Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
xxadev
vscode
提交
d72327c4
V
vscode
项目概览
xxadev
/
vscode
与 Fork 源项目一致
从无法访问的项目Fork
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
V
vscode
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
d72327c4
编写于
5月 18, 2018
作者:
R
Rob Lourens
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Remove unneeded forced SearchModel refresh when search is complete
上级
32bdc37e
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
33 addition
and
59 deletion
+33
-59
src/vs/workbench/parts/search/common/searchModel.ts
src/vs/workbench/parts/search/common/searchModel.ts
+0
-3
src/vs/workbench/parts/search/test/common/searchModel.test.ts
...vs/workbench/parts/search/test/common/searchModel.test.ts
+33
-56
未找到文件。
src/vs/workbench/parts/search/common/searchModel.ts
浏览文件 @
d72327c4
...
...
@@ -791,9 +791,6 @@ export class SearchModel extends Disposable {
private
onSearchCompleted
(
completed
:
ISearchComplete
,
duration
:
number
):
ISearchComplete
{
this
.
currentRequest
=
null
;
if
(
completed
)
{
this
.
_searchResult
.
add
(
completed
.
results
,
false
);
}
const
options
:
IPatternInfo
=
objects
.
assign
({},
this
.
_searchQuery
.
contentPattern
);
delete
options
.
pattern
;
/* __GDPR__
...
...
src/vs/workbench/parts/search/test/common/searchModel.test.ts
浏览文件 @
d72327c4
...
...
@@ -77,12 +77,21 @@ suite('SearchModel', () => {
});
});
test
(
'
Search Model: Search adds to results
'
,
function
()
{
function
ppromiseWithProgress
(
results
:
IFileMatch
[]):
()
=>
PPromise
<
any
,
IFileMatch
>
{
return
()
=>
new
PPromise
((
resolve
,
reject
,
progress
)
=>
{
process
.
nextTick
(()
=>
{
results
.
forEach
(
progress
);
resolve
(
null
);
});
});
}
test
(
'
Search Model: Search adds to results
'
,
async
()
=>
{
let
results
=
[
aRawMatch
(
'
file://c:/1
'
,
aLineMatch
(
'
preview 1
'
,
1
,
[[
1
,
3
],
[
4
,
7
]])),
aRawMatch
(
'
file://c:/2
'
,
aLineMatch
(
'
preview 2
'
))];
instantiationService
.
stub
(
ISearchService
,
'
search
'
,
PPromise
.
as
({
results
:
results
}
));
instantiationService
.
stub
(
ISearchService
,
'
search
'
,
ppromiseWithProgress
(
results
));
let
testObject
:
SearchModel
=
instantiationService
.
createInstance
(
SearchModel
);
testObject
.
search
({
contentPattern
:
{
pattern
:
'
somestring
'
},
type
:
1
,
folderQueries
});
await
testObject
.
search
({
contentPattern
:
{
pattern
:
'
somestring
'
},
type
:
1
,
folderQueries
});
let
actual
=
testObject
.
searchResult
.
matches
();
...
...
@@ -102,59 +111,27 @@ suite('SearchModel', () => {
assert
.
ok
(
new
Range
(
2
,
1
,
2
,
2
).
equalsRange
(
actuaMatches
[
0
].
range
()));
});
test
(
'
Search Model: Search adds to results during progress
'
,
function
()
{
let
results
=
[
aRawMatch
(
'
file://c:/1
'
,
aLineMatch
(
'
preview 1
'
,
1
,
[[
1
,
3
],
[
4
,
7
]])),
aRawMatch
(
'
file://c:/2
'
,
aLineMatch
(
'
preview 2
'
))];
let
promise
=
new
DeferredPPromise
<
ISearchComplete
,
ISearchProgressItem
>
();
instantiationService
.
stub
(
ISearchService
,
'
search
'
,
promise
);
let
testObject
=
instantiationService
.
createInstance
(
SearchModel
);
let
result
=
testObject
.
search
({
contentPattern
:
{
pattern
:
'
somestring
'
},
type
:
1
,
folderQueries
});
promise
.
progress
(
results
[
0
]);
promise
.
progress
(
results
[
1
]);
promise
.
complete
({
results
:
[],
stats
:
testSearchStats
});
return
result
.
then
(()
=>
{
let
actual
=
testObject
.
searchResult
.
matches
();
assert
.
equal
(
2
,
actual
.
length
);
assert
.
equal
(
'
file://c:/1
'
,
actual
[
0
].
resource
().
toString
());
let
actuaMatches
=
actual
[
0
].
matches
();
assert
.
equal
(
2
,
actuaMatches
.
length
);
assert
.
equal
(
'
preview 1
'
,
actuaMatches
[
0
].
text
());
assert
.
ok
(
new
Range
(
2
,
2
,
2
,
5
).
equalsRange
(
actuaMatches
[
0
].
range
()));
assert
.
equal
(
'
preview 1
'
,
actuaMatches
[
1
].
text
());
assert
.
ok
(
new
Range
(
2
,
5
,
2
,
12
).
equalsRange
(
actuaMatches
[
1
].
range
()));
actuaMatches
=
actual
[
1
].
matches
();
assert
.
equal
(
1
,
actuaMatches
.
length
);
assert
.
equal
(
'
preview 2
'
,
actuaMatches
[
0
].
text
());
assert
.
ok
(
new
Range
(
2
,
1
,
2
,
2
).
equalsRange
(
actuaMatches
[
0
].
range
()));
});
});
test
(
'
Search Model: Search reports telemetry on search completed
'
,
function
()
{
test
(
'
Search Model: Search reports telemetry on search completed
'
,
async
()
=>
{
let
target
=
instantiationService
.
spy
(
ITelemetryService
,
'
publicLog
'
);
let
results
=
[
aRawMatch
(
'
file://c:/1
'
,
aLineMatch
(
'
preview 1
'
,
1
,
[[
1
,
3
],
[
4
,
7
]])),
aRawMatch
(
'
file://c:/2
'
,
aLineMatch
(
'
preview 2
'
))];
instantiationService
.
stub
(
ISearchService
,
'
search
'
,
PPromise
.
as
({
results
:
results
}
));
instantiationService
.
stub
(
ISearchService
,
'
search
'
,
ppromiseWithProgress
(
results
));
let
testObject
=
instantiationService
.
createInstance
(
SearchModel
);
testObject
.
search
({
contentPattern
:
{
pattern
:
'
somestring
'
},
type
:
1
,
folderQueries
});
await
testObject
.
search
({
contentPattern
:
{
pattern
:
'
somestring
'
},
type
:
1
,
folderQueries
});
assert
.
ok
(
target
.
called
On
ce
);
assert
.
ok
(
target
.
called
Thri
ce
);
const
data
=
target
.
args
[
0
];
data
[
1
].
duration
=
-
1
;
assert
.
deepEqual
([
'
searchResults
Shown
'
,
{
count
:
3
,
fileCount
:
2
,
options
:
{},
duration
:
-
1
,
useRipgrep
:
undefined
}],
data
);
assert
.
deepEqual
([
'
searchResults
FirstRender
'
,
{
duration
:
-
1
}],
data
);
});
test
(
'
Search Model: Search reports timed telemetry on search when progress is not called
'
,
function
()
{
test
(
'
Search Model: Search reports timed telemetry on search when progress is not called
'
,
()
=>
{
let
target2
=
sinon
.
spy
();
stub
(
nullEvent
,
'
stop
'
,
target2
);
let
target1
=
sinon
.
stub
().
returns
(
nullEvent
);
instantiationService
.
stub
(
ITelemetryService
,
'
publicLog
'
,
target1
);
instantiationService
.
stub
(
ISearchService
,
'
search
'
,
PPromise
.
as
({
results
:
[]
}
));
instantiationService
.
stub
(
ISearchService
,
'
search
'
,
ppromiseWithProgress
([]
));
let
testObject
=
instantiationService
.
createInstance
(
SearchModel
);
const
result
=
testObject
.
search
({
contentPattern
:
{
pattern
:
'
somestring
'
},
type
:
1
,
folderQueries
});
...
...
@@ -168,7 +145,7 @@ suite('SearchModel', () => {
});
});
test
(
'
Search Model: Search reports timed telemetry on search when progress is called
'
,
function
()
{
test
(
'
Search Model: Search reports timed telemetry on search when progress is called
'
,
()
=>
{
let
target2
=
sinon
.
spy
();
stub
(
nullEvent
,
'
stop
'
,
target2
);
let
target1
=
sinon
.
stub
().
returns
(
nullEvent
);
...
...
@@ -192,7 +169,7 @@ suite('SearchModel', () => {
});
});
test
(
'
Search Model: Search reports timed telemetry on search when error is called
'
,
function
()
{
test
(
'
Search Model: Search reports timed telemetry on search when error is called
'
,
()
=>
{
let
target2
=
sinon
.
spy
();
stub
(
nullEvent
,
'
stop
'
,
target2
);
let
target1
=
sinon
.
stub
().
returns
(
nullEvent
);
...
...
@@ -215,7 +192,7 @@ suite('SearchModel', () => {
});
});
test
(
'
Search Model: Search reports timed telemetry on search when error is cancelled error
'
,
function
()
{
test
(
'
Search Model: Search reports timed telemetry on search when error is cancelled error
'
,
()
=>
{
let
target2
=
sinon
.
spy
();
stub
(
nullEvent
,
'
stop
'
,
target2
);
let
target1
=
sinon
.
stub
().
returns
(
nullEvent
);
...
...
@@ -238,11 +215,11 @@ suite('SearchModel', () => {
});
});
test
(
'
Search Model: Search results are cleared during search
'
,
function
()
{
test
(
'
Search Model: Search results are cleared during search
'
,
async
()
=>
{
let
results
=
[
aRawMatch
(
'
file://c:/1
'
,
aLineMatch
(
'
preview 1
'
,
1
,
[[
1
,
3
],
[
4
,
7
]])),
aRawMatch
(
'
file://c:/2
'
,
aLineMatch
(
'
preview 2
'
))];
instantiationService
.
stub
(
ISearchService
,
'
search
'
,
PPromise
.
as
({
results
:
results
}
));
instantiationService
.
stub
(
ISearchService
,
'
search
'
,
ppromiseWithProgress
(
results
));
let
testObject
:
SearchModel
=
instantiationService
.
createInstance
(
SearchModel
);
testObject
.
search
({
contentPattern
:
{
pattern
:
'
somestring
'
},
type
:
1
,
folderQueries
});
await
testObject
.
search
({
contentPattern
:
{
pattern
:
'
somestring
'
},
type
:
1
,
folderQueries
});
assert
.
ok
(
!
testObject
.
searchResult
.
isEmpty
());
instantiationService
.
stub
(
ISearchService
,
'
search
'
,
new
DeferredPPromise
<
ISearchComplete
,
ISearchProgressItem
>
());
...
...
@@ -251,7 +228,7 @@ suite('SearchModel', () => {
assert
.
ok
(
testObject
.
searchResult
.
isEmpty
());
});
test
(
'
Search Model: Previous search is cancelled when new search is called
'
,
function
()
{
test
(
'
Search Model: Previous search is cancelled when new search is called
'
,
async
()
=>
{
let
target
=
sinon
.
spy
();
instantiationService
.
stub
(
ISearchService
,
'
search
'
,
new
DeferredPPromise
((
c
,
e
,
p
)
=>
{
},
target
));
let
testObject
:
SearchModel
=
instantiationService
.
createInstance
(
SearchModel
);
...
...
@@ -263,29 +240,29 @@ suite('SearchModel', () => {
assert
.
ok
(
target
.
calledOnce
);
});
test
(
'
getReplaceString returns proper replace string for regExpressions
'
,
function
()
{
test
(
'
getReplaceString returns proper replace string for regExpressions
'
,
async
()
=>
{
let
results
=
[
aRawMatch
(
'
file://c:/1
'
,
aLineMatch
(
'
preview 1
'
,
1
,
[[
1
,
3
],
[
4
,
7
]]))];
instantiationService
.
stub
(
ISearchService
,
'
search
'
,
PPromise
.
as
({
results
:
results
}
));
instantiationService
.
stub
(
ISearchService
,
'
search
'
,
ppromiseWithProgress
(
results
));
let
testObject
:
SearchModel
=
instantiationService
.
createInstance
(
SearchModel
);
testObject
.
search
({
contentPattern
:
{
pattern
:
'
re
'
},
type
:
1
,
folderQueries
});
await
testObject
.
search
({
contentPattern
:
{
pattern
:
'
re
'
},
type
:
1
,
folderQueries
});
testObject
.
replaceString
=
'
hello
'
;
let
match
=
testObject
.
searchResult
.
matches
()[
0
].
matches
()[
0
];
assert
.
equal
(
'
hello
'
,
match
.
replaceString
);
testObject
.
search
({
contentPattern
:
{
pattern
:
'
re
'
,
isRegExp
:
true
},
type
:
1
,
folderQueries
});
await
testObject
.
search
({
contentPattern
:
{
pattern
:
'
re
'
,
isRegExp
:
true
},
type
:
1
,
folderQueries
});
match
=
testObject
.
searchResult
.
matches
()[
0
].
matches
()[
0
];
assert
.
equal
(
'
hello
'
,
match
.
replaceString
);
testObject
.
search
({
contentPattern
:
{
pattern
:
'
re(?:vi)
'
,
isRegExp
:
true
},
type
:
1
,
folderQueries
});
await
testObject
.
search
({
contentPattern
:
{
pattern
:
'
re(?:vi)
'
,
isRegExp
:
true
},
type
:
1
,
folderQueries
});
match
=
testObject
.
searchResult
.
matches
()[
0
].
matches
()[
0
];
assert
.
equal
(
'
hello
'
,
match
.
replaceString
);
testObject
.
search
({
contentPattern
:
{
pattern
:
'
r(e)(?:vi)
'
,
isRegExp
:
true
},
type
:
1
,
folderQueries
});
await
testObject
.
search
({
contentPattern
:
{
pattern
:
'
r(e)(?:vi)
'
,
isRegExp
:
true
},
type
:
1
,
folderQueries
});
match
=
testObject
.
searchResult
.
matches
()[
0
].
matches
()[
0
];
assert
.
equal
(
'
hello
'
,
match
.
replaceString
);
testObject
.
search
({
contentPattern
:
{
pattern
:
'
r(e)(?:vi)
'
,
isRegExp
:
true
},
type
:
1
,
folderQueries
});
await
testObject
.
search
({
contentPattern
:
{
pattern
:
'
r(e)(?:vi)
'
,
isRegExp
:
true
},
type
:
1
,
folderQueries
});
testObject
.
replaceString
=
'
hello$1
'
;
match
=
testObject
.
searchResult
.
matches
()[
0
].
matches
()[
0
];
assert
.
equal
(
'
helloe
'
,
match
.
replaceString
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录