Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
xxadev
vscode
提交
035963b1
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,发现更多精彩内容 >>
提交
035963b1
编写于
10月 18, 2019
作者:
M
Matt Bierner
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Add basic pinning test for jsdoc completions
For #82874
上级
81d1db92
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
125 addition
and
69 deletion
+125
-69
extensions/typescript-language-features/src/test/completions.test.ts
...typescript-language-features/src/test/completions.test.ts
+2
-68
extensions/typescript-language-features/src/test/jsDocCompletions.test.ts
...cript-language-features/src/test/jsDocCompletions.test.ts
+44
-0
extensions/typescript-language-features/src/test/suggestTestHelpers.ts
...pescript-language-features/src/test/suggestTestHelpers.ts
+63
-0
extensions/typescript-language-features/src/test/testUtils.ts
...nsions/typescript-language-features/src/test/testUtils.ts
+16
-1
未找到文件。
extensions/typescript-language-features/src/test/completions.test.ts
浏览文件 @
035963b1
...
...
@@ -7,6 +7,8 @@ import * as assert from 'assert';
import
'
mocha
'
;
import
*
as
vscode
from
'
vscode
'
;
import
{
disposeAll
}
from
'
../utils/dispose
'
;
import
{
createTestEditor
,
joinLines
,
wait
}
from
'
./testUtils
'
;
import
{
acceptFirstSuggestion
,
typeCommitCharacter
}
from
'
./suggestTestHelpers
'
;
const
testDocumentUri
=
vscode
.
Uri
.
parse
(
'
untitled:test.ts
'
);
...
...
@@ -292,71 +294,3 @@ suite('TypeScript Completions', () => {
});
});
const
joinLines
=
(...
args
:
string
[])
=>
args
.
join
(
'
\n
'
);
const
wait
=
(
ms
:
number
)
=>
new
Promise
(
resolve
=>
setTimeout
(
resolve
,
ms
));
async
function
acceptFirstSuggestion
(
uri
:
vscode
.
Uri
,
_disposables
:
vscode
.
Disposable
[],
options
?:
{
useLineRange
?:
boolean
})
{
const
didChangeDocument
=
onChangedDocument
(
uri
,
_disposables
);
const
didSuggest
=
onDidSuggest
(
_disposables
,
options
);
await
vscode
.
commands
.
executeCommand
(
'
editor.action.triggerSuggest
'
);
await
didSuggest
;
// TODO: depends on reverting fix for https://github.com/Microsoft/vscode/issues/64257
// Make sure we have time to resolve the suggestion because `acceptSelectedSuggestion` doesn't
await
wait
(
40
);
await
vscode
.
commands
.
executeCommand
(
'
acceptSelectedSuggestion
'
);
return
await
didChangeDocument
;
}
async
function
typeCommitCharacter
(
uri
:
vscode
.
Uri
,
character
:
string
,
_disposables
:
vscode
.
Disposable
[])
{
const
didChangeDocument
=
onChangedDocument
(
uri
,
_disposables
);
const
didSuggest
=
onDidSuggest
(
_disposables
);
await
vscode
.
commands
.
executeCommand
(
'
editor.action.triggerSuggest
'
);
await
didSuggest
;
await
vscode
.
commands
.
executeCommand
(
'
type
'
,
{
text
:
character
});
return
await
didChangeDocument
;
}
function
onChangedDocument
(
documentUri
:
vscode
.
Uri
,
disposables
:
vscode
.
Disposable
[])
{
return
new
Promise
<
vscode
.
TextDocument
>
(
resolve
=>
vscode
.
workspace
.
onDidChangeTextDocument
(
e
=>
{
if
(
e
.
document
.
uri
.
toString
()
===
documentUri
.
toString
())
{
resolve
(
e
.
document
);
}
},
undefined
,
disposables
));
}
async
function
createTestEditor
(
uri
:
vscode
.
Uri
,
...
lines
:
string
[])
{
const
document
=
await
vscode
.
workspace
.
openTextDocument
(
uri
);
await
vscode
.
window
.
showTextDocument
(
document
);
const
activeEditor
=
vscode
.
window
.
activeTextEditor
;
if
(
!
activeEditor
)
{
throw
new
Error
(
'
no active editor
'
);
}
await
activeEditor
.
insertSnippet
(
new
vscode
.
SnippetString
(
joinLines
(...
lines
)),
new
vscode
.
Range
(
0
,
0
,
1000
,
0
));
}
function
onDidSuggest
(
disposables
:
vscode
.
Disposable
[],
options
?:
{
useLineRange
?:
boolean
})
{
return
new
Promise
(
resolve
=>
disposables
.
push
(
vscode
.
languages
.
registerCompletionItemProvider
(
'
typescript
'
,
new
class
implements
vscode
.
CompletionItemProvider
{
provideCompletionItems
(
doc
:
vscode
.
TextDocument
,
position
:
vscode
.
Position
):
vscode
.
ProviderResult
<
vscode
.
CompletionItem
[]
|
vscode
.
CompletionList
>
{
// Return a fake item that will come first
const
range
=
options
&&
options
.
useLineRange
?
new
vscode
.
Range
(
new
vscode
.
Position
(
position
.
line
,
0
),
position
)
:
doc
.
getWordRangeAtPosition
(
position
);
return
[{
label
:
'
🦄
'
,
insertText
:
doc
.
getText
(
range
),
filterText
:
doc
.
getText
(
range
),
preselect
:
true
,
sortText
:
'
\
0
'
,
range
:
range
}];
}
async
resolveCompletionItem
(
item
:
vscode
.
CompletionItem
)
{
await
vscode
.
commands
.
executeCommand
(
'
selectNextSuggestion
'
);
resolve
();
return
item
;
}
})));
}
\ No newline at end of file
extensions/typescript-language-features/src/test/jsDocCompletions.test.ts
0 → 100644
浏览文件 @
035963b1
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import
*
as
assert
from
'
assert
'
;
import
'
mocha
'
;
import
*
as
vscode
from
'
vscode
'
;
import
{
disposeAll
}
from
'
../utils/dispose
'
;
import
{
createTestEditor
,
joinLines
,
wait
}
from
'
./testUtils
'
;
import
{
acceptFirstSuggestion
}
from
'
./suggestTestHelpers
'
;
const
testDocumentUri
=
vscode
.
Uri
.
parse
(
'
untitled:test.ts
'
);
suite
(
'
JSDoc Completions
'
,
()
=>
{
const
_disposables
:
vscode
.
Disposable
[]
=
[];
setup
(
async
()
=>
{
await
wait
(
100
);
});
teardown
(
async
()
=>
{
disposeAll
(
_disposables
);
});
test
(
'
Should complete jsdoc inside single line comment
'
,
async
()
=>
{
await
createTestEditor
(
testDocumentUri
,
`/**$0 */`
,
`function abcdef(x, y) { }`
,
);
const
document
=
await
acceptFirstSuggestion
(
testDocumentUri
,
_disposables
,
{
useLineRange
:
true
});
assert
.
strictEqual
(
document
.
getText
(),
joinLines
(
`/**`
,
` *`
,
` * @param {*} x `
,
` * @param {*} y `
,
` */`
,
`function abcdef(x, y) { }`
,
));
});
});
extensions/typescript-language-features/src/test/suggestTestHelpers.ts
0 → 100644
浏览文件 @
035963b1
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import
'
mocha
'
;
import
*
as
vscode
from
'
vscode
'
;
import
{
wait
}
from
'
./testUtils
'
;
export
async
function
acceptFirstSuggestion
(
uri
:
vscode
.
Uri
,
_disposables
:
vscode
.
Disposable
[],
options
?:
{
useLineRange
?:
boolean
})
{
const
didChangeDocument
=
onChangedDocument
(
uri
,
_disposables
);
const
didSuggest
=
onDidSuggest
(
_disposables
,
options
);
await
vscode
.
commands
.
executeCommand
(
'
editor.action.triggerSuggest
'
);
await
didSuggest
;
// TODO: depends on reverting fix for https://github.com/Microsoft/vscode/issues/64257
// Make sure we have time to resolve the suggestion because `acceptSelectedSuggestion` doesn't
await
wait
(
40
);
await
vscode
.
commands
.
executeCommand
(
'
acceptSelectedSuggestion
'
);
return
await
didChangeDocument
;
}
export
async
function
typeCommitCharacter
(
uri
:
vscode
.
Uri
,
character
:
string
,
_disposables
:
vscode
.
Disposable
[])
{
const
didChangeDocument
=
onChangedDocument
(
uri
,
_disposables
);
const
didSuggest
=
onDidSuggest
(
_disposables
);
await
vscode
.
commands
.
executeCommand
(
'
editor.action.triggerSuggest
'
);
await
didSuggest
;
await
vscode
.
commands
.
executeCommand
(
'
type
'
,
{
text
:
character
});
return
await
didChangeDocument
;
}
export
function
onChangedDocument
(
documentUri
:
vscode
.
Uri
,
disposables
:
vscode
.
Disposable
[])
{
return
new
Promise
<
vscode
.
TextDocument
>
(
resolve
=>
vscode
.
workspace
.
onDidChangeTextDocument
(
e
=>
{
if
(
e
.
document
.
uri
.
toString
()
===
documentUri
.
toString
())
{
resolve
(
e
.
document
);
}
},
undefined
,
disposables
));
}
function
onDidSuggest
(
disposables
:
vscode
.
Disposable
[],
options
?:
{
useLineRange
?:
boolean
})
{
return
new
Promise
(
resolve
=>
disposables
.
push
(
vscode
.
languages
.
registerCompletionItemProvider
(
'
typescript
'
,
new
class
implements
vscode
.
CompletionItemProvider
{
provideCompletionItems
(
doc
:
vscode
.
TextDocument
,
position
:
vscode
.
Position
):
vscode
.
ProviderResult
<
vscode
.
CompletionItem
[]
|
vscode
.
CompletionList
>
{
// Return a fake item that will come first
const
range
=
options
&&
options
.
useLineRange
?
new
vscode
.
Range
(
new
vscode
.
Position
(
position
.
line
,
0
),
position
)
:
doc
.
getWordRangeAtPosition
(
position
.
translate
({
characterDelta
:
-
1
}));
return
[{
label
:
'
🦄
'
,
insertText
:
doc
.
getText
(
range
),
filterText
:
doc
.
getText
(
range
),
preselect
:
true
,
sortText
:
'
a
'
,
range
:
range
}];
}
async
resolveCompletionItem
(
item
:
vscode
.
CompletionItem
)
{
await
vscode
.
commands
.
executeCommand
(
'
selectNextSuggestion
'
);
resolve
();
return
item
;
}
})));
}
extensions/typescript-language-features/src/test/testUtils.ts
浏览文件 @
035963b1
...
...
@@ -65,4 +65,19 @@ export function withRandomFileEditor(
});
});
});
}
\ No newline at end of file
}
export
const
wait
=
(
ms
:
number
)
=>
new
Promise
(
resolve
=>
setTimeout
(
resolve
,
ms
));
export
const
joinLines
=
(...
args
:
string
[])
=>
args
.
join
(
'
\n
'
);
export
async
function
createTestEditor
(
uri
:
vscode
.
Uri
,
...
lines
:
string
[])
{
const
document
=
await
vscode
.
workspace
.
openTextDocument
(
uri
);
await
vscode
.
window
.
showTextDocument
(
document
);
const
activeEditor
=
vscode
.
window
.
activeTextEditor
;
if
(
!
activeEditor
)
{
throw
new
Error
(
'
no active editor
'
);
}
await
activeEditor
.
insertSnippet
(
new
vscode
.
SnippetString
(
joinLines
(...
lines
)),
new
vscode
.
Range
(
0
,
0
,
1000
,
0
));
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录