Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
xxadev
vscode
提交
1dcbedd9
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,发现更多精彩内容 >>
提交
1dcbedd9
编写于
3月 15, 2017
作者:
R
Rob Lourens
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Run search integration tests against ripgrep
上级
fb6ae7bf
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
63 addition
and
139 deletion
+63
-139
src/vs/workbench/services/search/test/node/textSearch.integrationTest.ts
...h/services/search/test/node/textSearch.integrationTest.ts
+63
-139
未找到文件。
src/vs/workbench/services/search/test/node/textSearch.integrationTest.ts
浏览文件 @
1dcbedd9
...
...
@@ -8,28 +8,15 @@
import
path
=
require
(
'
path
'
);
import
assert
=
require
(
'
assert
'
);
import
{
LineMatch
}
from
'
vs/platform/search/common/search
'
;
import
{
TPromise
}
from
'
vs/base/common/winjs.base
'
;
import
{
FileWalker
}
from
'
vs/workbench/services/search/node/fileSearch
'
;
import
{
ISerializedFileMatch
}
from
'
vs/workbench/services/search/node/search
'
;
import
{
ISerializedFileMatch
,
IRawSearch
}
from
'
vs/workbench/services/search/node/search
'
;
import
{
Engine
as
TextSearchEngine
}
from
'
vs/workbench/services/search/node/textSearch
'
;
import
{
RipgrepEngine
}
from
'
vs/workbench/services/search/node/ripgrepTextSearch
'
;
import
{
TextSearchWorkerProvider
}
from
'
vs/workbench/services/search/node/textSearchWorkerProvider
'
;
function
countAll
(
matches
:
ISerializedFileMatch
[]):
number
{
return
matches
.
reduce
((
acc
,
m
)
=>
acc
+
count
(
m
.
lineMatches
),
0
);
}
function
count
(
lineMatches
:
LineMatch
[]):
number
{
let
count
=
0
;
if
(
lineMatches
)
{
for
(
let
i
=
0
;
i
<
lineMatches
.
length
;
i
++
)
{
let
line
=
lineMatches
[
i
];
let
wordMatches
=
line
.
offsetAndLengths
;
count
+=
wordMatches
.
length
;
}
}
return
count
;
return
matches
.
reduce
((
acc
,
m
)
=>
acc
+
m
.
numMatches
,
0
);
}
function
rootfolders
()
{
...
...
@@ -37,114 +24,103 @@ function rootfolders() {
}
const
textSearchWorkerProvider
=
new
TextSearchWorkerProvider
();
suite
(
'
Search-integration
'
,
()
=>
{
test
(
'
Text: GameOfLife
'
,
function
(
done
:
()
=>
void
)
{
let
c
=
0
;
let
config
=
{
rootFolders
:
rootfolders
(),
filePattern
:
'
*.js
'
,
contentPattern
:
{
pattern
:
'
GameOfLife
'
,
modifiers
:
'
i
'
}
};
function
doLegacySearchTest
(
config
:
IRawSearch
,
expectedResultCount
:
number
|
Function
):
TPromise
<
void
>
{
return
new
TPromise
<
void
>
(
resolve
=>
{
let
engine
=
new
TextSearchEngine
(
config
,
new
FileWalker
(
config
),
textSearchWorkerProvider
);
let
c
=
0
;
engine
.
search
((
result
)
=>
{
if
(
result
)
{
c
+=
countAll
(
result
);
}
},
()
=>
{
},
(
error
)
=>
{
assert
.
ok
(
!
error
);
assert
.
equal
(
c
,
4
);
done
();
if
(
typeof
expectedResultCount
===
'
function
'
)
{
assert
(
expectedResultCount
(
c
));
}
else
{
assert
.
equal
(
c
,
expectedResultCount
);
}
resolve
(
undefined
);
});
});
}
test
(
'
Text: GameOfLife (RegExp)
'
,
function
(
done
:
()
=>
void
)
{
let
c
=
0
;
let
config
=
{
rootFolders
:
rootfolders
(),
filePattern
:
'
*.js
'
,
contentPattern
:
{
pattern
:
'
Game.?fL
\\
w?fe
'
,
isRegExp
:
true
}
};
let
engine
=
new
TextSearchEngine
(
config
,
new
FileWalker
(
config
),
textSearchWorkerProvider
);
function
doRipgrepSearchTest
(
config
:
IRawSearch
,
expectedResultCount
:
number
):
TPromise
<
void
>
{
return
new
TPromise
<
void
>
(
resolve
=>
{
let
engine
=
new
RipgrepEngine
(
config
);
let
c
=
0
;
engine
.
search
((
result
)
=>
{
if
(
result
)
{
c
+=
countAll
(
result
)
;
c
+=
result
.
numMatches
;
}
},
()
=>
{
},
(
error
)
=>
{
assert
.
ok
(
!
error
);
assert
.
equal
(
c
,
4
);
done
(
);
assert
.
equal
(
c
,
expectedResultCount
);
resolve
(
undefined
);
});
});
}
function
doSearchTest
(
config
:
IRawSearch
,
expectedResultCount
:
number
,
done
)
{
return
doLegacySearchTest
(
config
,
expectedResultCount
)
.
then
(()
=>
doRipgrepSearchTest
(
config
,
expectedResultCount
))
.
then
(
done
,
done
);
}
suite
(
'
Search-integration
'
,
()
=>
{
test
(
'
Text: GameOfLife
'
,
function
(
done
:
()
=>
void
)
{
let
config
=
{
rootFolders
:
rootfolders
(),
filePattern
:
'
*.js
'
,
contentPattern
:
{
pattern
:
'
GameOfLife
'
,
modifiers
:
'
i
'
},
};
doSearchTest
(
config
,
4
,
done
);
});
test
(
'
Text: GameOfLife (RegExp)
'
,
function
(
done
:
()
=>
void
)
{
let
config
=
{
rootFolders
:
rootfolders
(),
filePattern
:
'
*.js
'
,
contentPattern
:
{
pattern
:
'
Game.?fL
\\
w?fe
'
,
isRegExp
:
true
}
};
doSearchTest
(
config
,
4
,
done
);
});
test
(
'
Text: GameOfLife (Word Match, Case Sensitive)
'
,
function
(
done
:
()
=>
void
)
{
let
c
=
0
;
let
config
=
{
rootFolders
:
rootfolders
(),
filePattern
:
'
*.js
'
,
contentPattern
:
{
pattern
:
'
GameOfLife
'
,
isWordMatch
:
true
,
isCaseSensitive
:
true
}
};
let
engine
=
new
TextSearchEngine
(
config
,
new
FileWalker
(
config
),
textSearchWorkerProvider
);
engine
.
search
((
result
)
=>
{
if
(
result
)
{
c
+=
countAll
(
result
);
}
},
()
=>
{
},
(
error
)
=>
{
assert
.
ok
(
!
error
);
assert
.
equal
(
c
,
4
);
done
();
});
doSearchTest
(
config
,
4
,
done
);
});
test
(
'
Text: Helvetica (UTF 16)
'
,
function
(
done
:
()
=>
void
)
{
let
c
=
0
;
let
config
=
{
rootFolders
:
rootfolders
(),
filePattern
:
'
*.css
'
,
contentPattern
:
{
pattern
:
'
Helvetica
'
,
modifiers
:
'
i
'
}
};
let
engine
=
new
TextSearchEngine
(
config
,
new
FileWalker
(
config
),
textSearchWorkerProvider
);
engine
.
search
((
result
)
=>
{
if
(
result
)
{
c
+=
countAll
(
result
);
}
},
()
=>
{
},
(
error
)
=>
{
assert
.
ok
(
!
error
);
assert
.
equal
(
c
,
3
);
done
();
});
doSearchTest
(
config
,
3
,
done
);
});
test
(
'
Text: e
'
,
function
(
done
:
()
=>
void
)
{
let
c
=
0
;
let
config
=
{
rootFolders
:
rootfolders
(),
filePattern
:
'
*.*
'
,
contentPattern
:
{
pattern
:
'
e
'
,
modifiers
:
'
i
'
}
};
let
engine
=
new
TextSearchEngine
(
config
,
new
FileWalker
(
config
),
textSearchWorkerProvider
);
engine
.
search
((
result
)
=>
{
if
(
result
)
{
c
+=
countAll
(
result
);
}
},
(
result
)
=>
{
},
(
error
)
=>
{
assert
.
ok
(
!
error
);
assert
.
equal
(
c
,
776
);
done
();
});
doSearchTest
(
config
,
776
,
done
);
});
test
(
'
Text: e (with excludes)
'
,
function
(
done
:
()
=>
void
)
{
let
c
=
0
;
let
config
:
any
=
{
rootFolders
:
rootfolders
(),
filePattern
:
'
*.*
'
,
...
...
@@ -152,21 +128,10 @@ suite('Search-integration', () => {
excludePattern
:
{
'
**/examples
'
:
true
}
};
let
engine
=
new
TextSearchEngine
(
config
,
new
FileWalker
(
config
),
textSearchWorkerProvider
);
engine
.
search
((
result
)
=>
{
if
(
result
)
{
c
+=
countAll
(
result
);
}
},
(
result
)
=>
{
},
(
error
)
=>
{
assert
.
ok
(
!
error
);
assert
.
equal
(
c
,
394
);
done
();
});
doSearchTest
(
config
,
394
,
done
);
});
test
(
'
Text: e (with includes)
'
,
function
(
done
:
()
=>
void
)
{
let
c
=
0
;
let
config
:
any
=
{
rootFolders
:
rootfolders
(),
filePattern
:
'
*.*
'
,
...
...
@@ -174,21 +139,10 @@ suite('Search-integration', () => {
includePattern
:
{
'
**/examples/**
'
:
true
}
};
let
engine
=
new
TextSearchEngine
(
config
,
new
FileWalker
(
config
),
textSearchWorkerProvider
);
engine
.
search
((
result
)
=>
{
if
(
result
)
{
c
+=
countAll
(
result
);
}
},
(
result
)
=>
{
},
(
error
)
=>
{
assert
.
ok
(
!
error
);
assert
.
equal
(
c
,
382
);
done
();
});
doSearchTest
(
config
,
382
,
done
);
});
test
(
'
Text: e (with includes and exclude)
'
,
function
(
done
:
()
=>
void
)
{
let
c
=
0
;
let
config
:
any
=
{
rootFolders
:
rootfolders
(),
filePattern
:
'
*.*
'
,
...
...
@@ -197,62 +151,32 @@ suite('Search-integration', () => {
excludePattern
:
{
'
**/examples/small.js
'
:
true
}
};
let
engine
=
new
TextSearchEngine
(
config
,
new
FileWalker
(
config
),
textSearchWorkerProvider
);
engine
.
search
((
result
)
=>
{
if
(
result
)
{
c
+=
countAll
(
result
);
}
},
(
result
)
=>
{
},
(
error
)
=>
{
assert
.
ok
(
!
error
);
assert
.
equal
(
c
,
361
);
done
();
});
doSearchTest
(
config
,
361
,
done
);
});
test
(
'
Text: a (capped)
'
,
function
(
done
:
()
=>
void
)
{
let
c
=
0
;
const
maxResults
=
52
0
;
let
config
=
{
rootFolders
:
rootfolders
(),
filePattern
:
'
*.*
'
,
contentPattern
:
{
pattern
:
'
a
'
,
modifiers
:
'
i
'
},
maxResults
:
520
maxResults
};
let
engine
=
new
TextSearchEngine
(
config
,
new
FileWalker
(
config
),
textSearchWorkerProvider
);
engine
.
search
((
result
)
=>
{
if
(
result
)
{
c
+=
countAll
(
result
);
}
},
(
result
)
=>
{
},
(
error
)
=>
{
assert
.
ok
(
!
error
);
// Search can go over the maxResults because it doesn't trim the results from its worker processes to the exact max size.
// But the worst-case scenario should be 2*max-1
assert
.
ok
(
c
<
520
*
2
);
done
();
});
// (Legacy) search can go over the maxResults because it doesn't trim the results from its worker processes to the exact max size.
// But the worst-case scenario should be 2*max-1
return
doLegacySearchTest
(
config
,
count
=>
count
<
maxResults
*
2
)
.
then
(()
=>
doRipgrepSearchTest
(
config
,
maxResults
))
.
then
(
done
,
done
);
});
test
(
'
Text: a (no results)
'
,
function
(
done
:
()
=>
void
)
{
let
c
=
0
;
let
config
=
{
rootFolders
:
rootfolders
(),
filePattern
:
'
*.*
'
,
contentPattern
:
{
pattern
:
'
ahsogehtdas
'
,
modifiers
:
'
i
'
}
};
let
engine
=
new
TextSearchEngine
(
config
,
new
FileWalker
(
config
),
textSearchWorkerProvider
);
engine
.
search
((
result
)
=>
{
if
(
result
)
{
c
+=
countAll
(
result
);
}
},
(
result
)
=>
{
},
(
error
)
=>
{
assert
.
ok
(
!
error
);
assert
.
equal
(
c
,
0
);
done
();
});
doSearchTest
(
config
,
0
,
done
);
});
});
\ No newline at end of file
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录