Skip to content

Commit

Permalink
Add test for vuejs#684
Browse files Browse the repository at this point in the history
  • Loading branch information
yoyo930021 committed Nov 8, 2020
1 parent 22df49c commit c950555
Show file tree
Hide file tree
Showing 6 changed files with 173 additions and 0 deletions.
76 changes: 76 additions & 0 deletions test/completionHelper.ts
Original file line number Diff line number Diff line change
Expand Up @@ -115,6 +115,82 @@ export async function testCompletion(
});
}

export async function testCompletionResolve(
docUri: vscode.Uri,
position: vscode.Position,
expectedItems: CompletionItem[],
itemResolveCount: number
) {
await showFile(docUri);

const result = (await vscode.commands.executeCommand(
'vscode.executeCompletionItemProvider',
docUri,
position,
undefined,
itemResolveCount
)) as vscode.CompletionList;

expectedItems.forEach(ei => {
if (typeof ei === 'string') {
assert.ok(
result.items.some(i => {
return i.label === ei;
}),
`Can't find matching item for\n${JSON.stringify(ei, null, 2)}\nSeen items:\n${JSON.stringify(
result.items,
null,
2
)}`
);
} else {
const match = result.items.find(i => i.label === ei.label);
if (!match) {
assert.fail(
`Can't find matching item for\n${JSON.stringify(ei, null, 2)}\nSeen items:\n${JSON.stringify(
result.items,
null,
2
)}`
);
}

assert.equal(match.label, ei.label);
if (ei.kind) {
assert.equal(match.kind, ei.kind);
}
if (ei.detail) {
assert.equal(match.detail, ei.detail);
}

if (ei.documentation) {
if (typeof match.documentation === 'string') {
assert.equal(normalizeNewline(match.documentation), normalizeNewline(ei.documentation as string));
} else {
if (ei.documentation && (ei.documentation as MarkdownString).value && match.documentation) {
assert.equal(
normalizeNewline((match.documentation as vscode.MarkdownString).value),
normalizeNewline((ei.documentation as MarkdownString).value)
);
}
}
}

if (ei.additionalTextEdits) {
assert.deepStrictEqual(
match.additionalTextEdits,
ei.additionalTextEdits,
`Can't match additionalTextEdits for\n${
JSON.stringify(ei.additionalTextEdits, null, 2)
}\nSeen items:\n${
JSON.stringify(match.additionalTextEdits, null, 2)
}`
);
}
}
});
}

export async function testNoSuchCompletion(
docUri: vscode.Uri,
position: vscode.Position,
Expand Down
43 changes: 43 additions & 0 deletions test/lsp/features/completion/autoImport.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
import { testCompletion, testCompletionResolve } from '../../../completionHelper';
import { position, sameLineRange, textEdit } from '../../../util';
import { getDocUri } from '../../path';

describe('Should import vue component to script in template', () => {
it('completes components', async () => {
await testCompletion(getDocUri('completion/autoImport/defineInOneLine.vue'), position(3, 9), [
'two-stylus',
'two-stylus-expected'
]);
});

/**
* I can't get completion/resolve result in VSCode. =_=
* https://github.com/microsoft/vscode/issues/110182
*/
it.skip('Should do auto import when have components define in one line', async () => {
await testCompletionResolve(
getDocUri('completion/autoImport/defineInOneLine.vue'),
position(3, 9),
[
{
label: 'two-stylus',
additionalTextEdits: [
textEdit(sameLineRange(9, 0, 0), "import TwoStylus from '../../formatting/TwoStylus.vue'\n"),
textEdit(sameLineRange(10, 20, 20), ', TwoStylus')
]
},
{
label: 'two-stylus-expected',
additionalTextEdits: [
textEdit(
sameLineRange(9, 0, 0),
"import TwoStylusExpected from '../../formatting/TwoStylus.Expected.vue'\n"
),
textEdit(sameLineRange(10, 20, 20), ', TwoStylusExpected')
]
}
],
2
);
});
});
23 changes: 23 additions & 0 deletions test/lsp/fixture/completion/autoImport/defineInOneLine.vue
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
<template>
<div>
<child />
<two-
</div>
</template>

<script>
import Child from '../template/childComponent/Child.vue'
export default {
components: {Child},
data () {
return {
foo: ''
}
},
methods: {
getFoo () {
return this.
}
}
}
</script>
11 changes: 11 additions & 0 deletions test/lsp/fixture/completion/autoImport/noDefineComponents.vue
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
<template>
<div>
<
</div>
</template>

<script>
export default {
}
</script>
17 changes: 17 additions & 0 deletions test/lsp/fixture/completion/autoImport/sameComponentName.vue
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
<template>
<div>
<child />
<
</div>
</template>

<script>
import Child from '../template/childComponent/Child.vue'
export default {
components: {
Child,
}
}
</script>
3 changes: 3 additions & 0 deletions test/util.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,9 @@ export function location(uri: vscode.Uri, startLine: number, startChar: number,
export function sameLineLocation(uri: vscode.Uri, line: number, startChar: number, endChar: number) {
return new vscode.Location(uri, sameLineRange(line, startChar, endChar));
}
export function textEdit(range: vscode.Range, newText: string) {
return new vscode.TextEdit(range, newText);
}
export function sleep(ms: number) {
return new Promise(resolve => setTimeout(resolve, ms));
}

0 comments on commit c950555

Please sign in to comment.