Skip to content

Commit 117ce52

Browse files
committed
Rewrite find references tests
1 parent c2e54b9 commit 117ce52

File tree

10 files changed

+324
-45
lines changed

10 files changed

+324
-45
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,124 @@
1+
// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
2+
3+
exports[`Completions > #2454 1`] = `
4+
"
5+
<script setup lang="ts">
6+
let vLoading: any;
7+
</script>
8+
9+
<template>
10+
<div v-loading="vLoading"></div>
11+
</template>
12+
"
13+
`;
14+
15+
exports[`Completions > #2511 1`] = `
16+
"
17+
<script setup lang="ts">
18+
import componentForAutoImport$1 from './component-for-auto-import.vue';
19+
</script>
20+
"
21+
`;
22+
23+
exports[`Completions > #3658 1`] = `
24+
"
25+
<template>
26+
<Comp>
27+
<template #foo="foo">
28+
{{ foo }}
29+
</template>
30+
</Comp>
31+
</template>
32+
"
33+
`;
34+
35+
exports[`Completions > #4639 1`] = `
36+
"
37+
<template>
38+
<div @click.capture />
39+
</template>
40+
"
41+
`;
42+
43+
exports[`Completions > $event argument 1`] = `"<template><div @click="console.log($event)"></div></template>"`;
44+
45+
exports[`Completions > <script setup> 1`] = `
46+
"
47+
<template>{{ foo }}</template>
48+
49+
<script lang="ts" setup>
50+
const foo = 1;
51+
</script>
52+
"
53+
`;
54+
55+
exports[`Completions > Alias path 1`] = `
56+
"
57+
<script setup lang="ts">
58+
import Component from '@/empty.vue';
59+
</script>
60+
"
61+
`;
62+
63+
exports[`Completions > Component auto import 1`] = `
64+
"
65+
<script setup lang="ts">
66+
import ComponentForAutoImport from './ComponentForAutoImport.vue';
67+
68+
</script>
69+
70+
<template>
71+
<ComponentForAutoImport />
72+
</template>
73+
"
74+
`;
75+
76+
exports[`Completions > Directives 1`] = `"<template><div v-html="$1"></div></template>"`;
77+
78+
exports[`Completions > Directives 2`] = `"<template><div v-cloak></div></template>"`;
79+
80+
exports[`Completions > Directives 3`] = `"<template><div v-else></div></template>"`;
81+
82+
exports[`Completions > Directives 4`] = `"<template><div v-pre></div></template>"`;
83+
84+
exports[`Completions > Relative path 1`] = `
85+
"
86+
<script setup lang="ts">
87+
import Component from './empty.vue';
88+
</script>
89+
"
90+
`;
91+
92+
exports[`Completions > Slot name 1`] = `
93+
"
94+
<template>
95+
<Foo>
96+
<template #default></template>
97+
</Foo>
98+
</template>
99+
100+
<script lang="ts" setup>
101+
let Foo: new () => {
102+
$slots: {
103+
default: any;
104+
};
105+
};
106+
</script>
107+
"
108+
`;
109+
110+
exports[`Completions > core#8811 1`] = `
111+
"
112+
<script setup lang="ts">
113+
declare const Foo: new () => {
114+
$props: {
115+
FooBar: string;
116+
};
117+
};
118+
</script>
119+
120+
<template>
121+
<Foo :-foo-bar="$1" ></Foo>
122+
</template>
123+
"
124+
`;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
2+
3+
exports[`Definitions > Default slot 1`] = `"tsconfigProject/foo.vue"`;
4+
5+
exports[`Definitions > Default slot 2`] = `
6+
{
7+
"end": {
8+
"character": 16,
9+
"line": 7,
10+
},
11+
"start": {
12+
"character": 5,
13+
"line": 7,
14+
},
15+
}
16+
`;
17+
18+
exports[`Definitions > Default slot 3`] = `"tsconfigProject/fixture.vue"`;
19+
20+
exports[`Definitions > Default slot 4`] = `
21+
{
22+
"end": {
23+
"character": 9,
24+
"line": 2,
25+
},
26+
"start": {
27+
"character": 5,
28+
"line": 2,
29+
},
30+
}
31+
`;
32+
33+
exports[`Definitions > Named slot 1`] = `"tsconfigProject/foo.vue"`;
34+
35+
exports[`Definitions > Named slot 2`] = `
36+
{
37+
"end": {
38+
"character": 17,
39+
"line": 6,
40+
},
41+
"start": {
42+
"character": 14,
43+
"line": 6,
44+
},
45+
}
46+
`;
47+
48+
exports[`Definitions > Named slot 3`] = `"tsconfigProject/fixture.vue"`;
49+
50+
exports[`Definitions > Named slot 4`] = `
51+
{
52+
"end": {
53+
"character": 19,
54+
"line": 2,
55+
},
56+
"start": {
57+
"character": 16,
58+
"line": 2,
59+
},
60+
}
61+
`;
62+
63+
exports[`Definitions > v-bind shorthand 1`] = `"tsconfigProject/fixture.vue"`;
64+
65+
exports[`Definitions > v-bind shorthand 2`] = `
66+
{
67+
"end": {
68+
"character": 13,
69+
"line": 6,
70+
},
71+
"start": {
72+
"character": 10,
73+
"line": 6,
74+
},
75+
}
76+
`;
77+
78+
exports[`Definitions > v-bind shorthand 3`] = `"tsconfigProject/fixture.vue"`;
79+
80+
exports[`Definitions > v-bind shorthand 4`] = `
81+
{
82+
"end": {
83+
"character": 12,
84+
"line": 2,
85+
},
86+
"start": {
87+
"character": 9,
88+
"line": 2,
89+
},
90+
}
91+
`;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
1+
import { TextDocument } from '@volar/language-server';
2+
import * as path from 'path';
3+
import { afterEach, describe, expect, it } from 'vitest';
4+
import { URI } from 'vscode-uri';
5+
import { getLanguageServer, testWorkspacePath } from './server.js';
6+
7+
describe('Definitions', async () => {
8+
9+
it('Default slot', async () => {
10+
await ensureGlobalTypesHolder('tsconfigProject');
11+
await openDocument('tsconfigProject/foo.vue', 'vue', `
12+
<script setup lang="ts">
13+
import Fixture from './fixture.vue';
14+
</script>
15+
16+
<template>
17+
<Fixture>
18+
<div></div>
19+
</Fixture>
20+
</template>
21+
`);
22+
await assertReferences('tsconfigProject/fixture.vue', 'vue', `
23+
<template>
24+
<slot|></slot>
25+
</template>
26+
`);
27+
});
28+
29+
it('Named slot', async () => {
30+
await ensureGlobalTypesHolder('tsconfigProject');
31+
await openDocument('tsconfigProject/foo.vue', 'vue', `
32+
<script setup lang="ts">
33+
import Fixture from './fixture.vue';
34+
</script>
35+
36+
<template>
37+
<Fixture #foo></Fixture>
38+
</template>
39+
`);
40+
await assertReferences('tsconfigProject/fixture.vue', 'vue', `
41+
<template>
42+
<slot name="|foo"></slot>
43+
</template>
44+
`);
45+
});
46+
47+
it('v-bind shorthand', async () => {
48+
await ensureGlobalTypesHolder('tsconfigProject');
49+
await assertReferences('tsconfigProject/fixture.vue', 'vue', `
50+
<script setup lang="ts">
51+
const |foo = 1;
52+
</script>
53+
54+
<template>
55+
<Foo :foo></Foo>
56+
</template>
57+
`);
58+
});
59+
60+
const openedDocuments: TextDocument[] = [];
61+
62+
afterEach(async () => {
63+
const server = await getLanguageServer();
64+
for (const document of openedDocuments) {
65+
await server.closeTextDocument(document.uri);
66+
}
67+
openedDocuments.length = 0;
68+
});
69+
70+
/**
71+
* @deprecated Remove this when #4717 fixed.
72+
*/
73+
async function ensureGlobalTypesHolder(folderName: string) {
74+
const document = await openDocument(`${folderName}/globalTypesHolder.vue`, 'vue', '');
75+
const server = await getLanguageServer();
76+
await server.sendDocumentDiagnosticRequest(document.uri);
77+
}
78+
79+
async function assertReferences(fileName: string, languageId: string, content: string) {
80+
const offset = content.indexOf('|');
81+
content = content.slice(0, offset) + content.slice(offset + 1);
82+
83+
const server = await getLanguageServer();
84+
let document = await openDocument(fileName, languageId, content);
85+
86+
const position = document.positionAt(offset);
87+
const references = await server.sendReferencesRequest(document.uri, position, { includeDeclaration: false });
88+
expect(references).toBeDefined();
89+
expect(references!.length).greaterThan(0);
90+
91+
for (const loc of references!) {
92+
expect(path.relative(testWorkspacePath, URI.parse(loc.uri).fsPath)).toMatchSnapshot();
93+
expect(loc.range).toMatchSnapshot();
94+
}
95+
}
96+
97+
async function openDocument(fileName: string, languageId: string, content: string) {
98+
const server = await getLanguageServer();
99+
const uri = URI.file(`${testWorkspacePath}/${fileName}`);
100+
const document = await server.openInMemoryDocument(uri.toString(), languageId, content);
101+
if (openedDocuments.every(d => d.uri !== document.uri)) {
102+
openedDocuments.push(document);
103+
}
104+
return document;
105+
}
106+
});

test-workspace/language-service/reference/slot-default/entry.vue

-4
This file was deleted.

test-workspace/language-service/reference/slot-default/foo.vue

-9
This file was deleted.

test-workspace/language-service/reference/slot-named/entry.vue

-4
This file was deleted.

test-workspace/language-service/reference/slot-named/foo.vue

-7
This file was deleted.

test-workspace/language-service/reference/v-bind-shorthand/child.vue

-6
This file was deleted.

test-workspace/language-service/reference/v-bind-shorthand/entry.vue

-13
This file was deleted.

vitest.config.ts

+3-2
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,10 @@ import { defineConfig } from 'vitest/config';
22

33
export default defineConfig({
44
test: {
5+
include: ['packages/language-server/tests/**/*.spec.ts'],
56
poolOptions: {
6-
threads: {
7-
singleThread: true,
7+
forks: {
8+
singleFork: true,
89
isolate: false,
910
},
1011
},

0 commit comments

Comments
 (0)