Skip to content

Commit 5dc1064

Browse files
authored
Tests for $store (#605)
To have something to test against when tackling #493 Note that the ranges in these tests are wrong (they end one too soon) (this is a known limitation currently) so if the tests fail due to ranges being correct, the tests should be adjusted accordingly.
1 parent 961e76b commit 5dc1064

File tree

7 files changed

+330
-6
lines changed

7 files changed

+330
-6
lines changed

.prettierignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
packages/svelte2tsx/*.d.ts
22
packages/svelte2tsx/test/**
3+
packages/language-server/test/**/*.svelte
34
.github/**

packages/language-server/test/plugins/typescript/TypescriptPlugin.test.ts

Lines changed: 130 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import * as assert from 'assert';
22
import * as path from 'path';
33
import ts from 'typescript';
4-
import { FileChangeType, Position } from 'vscode-languageserver';
4+
import { FileChangeType, Position, Range } from 'vscode-languageserver';
55
import { Document, DocumentManager } from '../../../src/lib/documents';
66
import { LSConfigManager } from '../../../src/ls-config';
77
import { TypeScriptPlugin } from '../../../src/plugins';
@@ -181,18 +181,18 @@ describe('TypescriptPlugin', () => {
181181
it('provides definitions from svelte to svelte doc', async () => {
182182
const { plugin, document } = setup('definitions.svelte');
183183

184-
const definitions = await plugin.getDefinitions(document, Position.create(7, 3));
184+
const definitions = await plugin.getDefinitions(document, Position.create(12, 3));
185185

186186
assert.deepStrictEqual(definitions, [
187187
{
188188
originSelectionRange: {
189189
start: {
190190
character: 1,
191-
line: 7
191+
line: 12
192192
},
193193
end: {
194194
character: 13,
195-
line: 7
195+
line: 12
196196
}
197197
},
198198
targetRange: {
@@ -220,6 +220,132 @@ describe('TypescriptPlugin', () => {
220220
]);
221221
});
222222

223+
describe('provides definitions for $store within svelte file', () => {
224+
async function test$StoreDef(pos: Position, originSelectionRange: Range) {
225+
const { plugin, document } = setup('definitions.svelte');
226+
227+
const definitions = await plugin.getDefinitions(document, pos);
228+
229+
assert.deepStrictEqual(definitions, [
230+
{
231+
originSelectionRange,
232+
targetRange: {
233+
start: {
234+
character: 4,
235+
line: 6
236+
},
237+
end: {
238+
character: 9,
239+
line: 6
240+
}
241+
},
242+
targetSelectionRange: {
243+
start: {
244+
character: 4,
245+
line: 6
246+
},
247+
end: {
248+
character: 9,
249+
line: 6
250+
}
251+
},
252+
targetUri: getUri('definitions.svelte')
253+
}
254+
]);
255+
}
256+
257+
it('(within script simple)', async () => {
258+
await test$StoreDef(
259+
Position.create(7, 1),
260+
Range.create(Position.create(7, 1), Position.create(7, 5))
261+
);
262+
});
263+
264+
it('(within script if)', async () => {
265+
await test$StoreDef(
266+
Position.create(8, 7),
267+
Range.create(Position.create(8, 5), Position.create(8, 9))
268+
);
269+
});
270+
271+
it('(within template simple)', async () => {
272+
await test$StoreDef(
273+
Position.create(13, 3),
274+
Range.create(Position.create(13, 2), Position.create(13, 6))
275+
);
276+
});
277+
278+
it('(within template if)', async () => {
279+
await test$StoreDef(
280+
Position.create(14, 7),
281+
Range.create(Position.create(14, 6), Position.create(14, 10))
282+
);
283+
});
284+
});
285+
286+
describe('provides definitions for $store from svelte file to ts file', () => {
287+
async function test$StoreDef(pos: Position, originSelectionRange: Range) {
288+
const { plugin, document } = setup('definitions.svelte');
289+
290+
const definitions = await plugin.getDefinitions(document, pos);
291+
292+
assert.deepStrictEqual(definitions, [
293+
{
294+
originSelectionRange,
295+
targetRange: {
296+
start: {
297+
character: 16,
298+
line: 0
299+
},
300+
end: {
301+
character: 21,
302+
line: 0
303+
}
304+
},
305+
targetSelectionRange: {
306+
start: {
307+
character: 16,
308+
line: 0
309+
},
310+
end: {
311+
character: 21,
312+
line: 0
313+
}
314+
},
315+
targetUri: getUri('definitions.ts')
316+
}
317+
]);
318+
}
319+
320+
it('(within script simple)', async () => {
321+
await test$StoreDef(
322+
Position.create(9, 1),
323+
Range.create(Position.create(9, 1), Position.create(9, 5))
324+
);
325+
});
326+
327+
it('(within script if)', async () => {
328+
await test$StoreDef(
329+
Position.create(10, 7),
330+
Range.create(Position.create(10, 5), Position.create(10, 9))
331+
);
332+
});
333+
334+
it('(within template simple)', async () => {
335+
await test$StoreDef(
336+
Position.create(16, 3),
337+
Range.create(Position.create(16, 2), Position.create(16, 6))
338+
);
339+
});
340+
341+
it('(within template if)', async () => {
342+
await test$StoreDef(
343+
Position.create(17, 7),
344+
Range.create(Position.create(17, 6), Position.create(17, 10))
345+
);
346+
});
347+
});
348+
223349
const setupForOnWatchedFileChanges = () => {
224350
const { plugin, document } = setup('empty.svelte');
225351
const filePath = document.getFilePath()!;

packages/language-server/test/plugins/typescript/features/DiagnosticsProvider.test.ts

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,86 @@ describe('DiagnosticsProvider', () => {
9393
]);
9494
});
9595

96+
it('provides diagnostics for wrong $store usage', async () => {
97+
const { plugin, document } = setup('diagnostics-$store.svelte');
98+
const diagnostics = await plugin.getDiagnostics(document);
99+
100+
assert.deepStrictEqual(diagnostics, [
101+
{
102+
code: 2345,
103+
message:
104+
"Argument of type 'string' is not assignable to parameter of type 'SvelteStore<any>'.",
105+
range: {
106+
end: {
107+
character: 5,
108+
line: 2
109+
},
110+
start: {
111+
character: 1,
112+
line: 2
113+
}
114+
},
115+
severity: 1,
116+
source: 'ts',
117+
tags: []
118+
},
119+
{
120+
code: 2345,
121+
message:
122+
"Argument of type 'string' is not assignable to parameter of type 'SvelteStore<any>'.",
123+
range: {
124+
end: {
125+
character: 8,
126+
line: 3
127+
},
128+
start: {
129+
character: 4,
130+
line: 3
131+
}
132+
},
133+
severity: 1,
134+
source: 'ts',
135+
tags: []
136+
},
137+
{
138+
code: 2345,
139+
message:
140+
"Argument of type 'string' is not assignable to parameter of type 'SvelteStore<any>'.",
141+
range: {
142+
end: {
143+
character: 6,
144+
line: 6
145+
},
146+
start: {
147+
character: 2,
148+
line: 6
149+
}
150+
},
151+
severity: 1,
152+
source: 'ts',
153+
tags: []
154+
},
155+
{
156+
code: 2345,
157+
message:
158+
"Argument of type 'string' is not assignable to parameter of type 'SvelteStore<any>'.",
159+
range: {
160+
end: {
161+
character: 10,
162+
line: 7
163+
},
164+
start: {
165+
character: 6,
166+
line: 7
167+
}
168+
},
169+
severity: 1,
170+
source: 'ts',
171+
tags: []
172+
}
173+
]);
174+
});
175+
96176
it('provides no typecheck diagnostics for js file', async () => {
97177
const { plugin, document } = setup('diagnostics-js-notypecheck.svelte');
98178
const diagnostics = await plugin.getDiagnostics(document);

packages/language-server/test/plugins/typescript/features/RenameProvider.test.ts

Lines changed: 89 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,8 @@ describe('RenameProvider', () => {
2828
const renameDoc2 = await openDoc('rename2.svelte');
2929
const renameDoc3 = await openDoc('rename3.svelte');
3030
const renameDoc4 = await openDoc('rename4.svelte');
31-
return { provider, renameDoc1, renameDoc2, renameDoc3, renameDoc4, docManager };
31+
const renameDoc5 = await openDoc('rename5.svelte');
32+
return { provider, renameDoc1, renameDoc2, renameDoc3, renameDoc4, renameDoc5, docManager };
3233

3334
async function openDoc(filename: string) {
3435
const filePath = getFullPath(filename);
@@ -286,6 +287,93 @@ describe('RenameProvider', () => {
286287
});
287288
});
288289

290+
describe('should allow rename of $store', () => {
291+
async function do$storeRename(pos: Position) {
292+
const { provider, renameDoc5 } = await setup();
293+
const result = await provider.rename(renameDoc5, pos, 'store1');
294+
295+
assert.deepStrictEqual(result, {
296+
changes: {
297+
[getUri('rename5.svelte')]: [
298+
{
299+
newText: 'store1',
300+
range: {
301+
start: {
302+
line: 1,
303+
character: 8
304+
},
305+
end: {
306+
line: 1,
307+
character: 13
308+
}
309+
}
310+
},
311+
{
312+
newText: 'store1',
313+
range: {
314+
start: {
315+
line: 2,
316+
character: 5
317+
},
318+
end: {
319+
line: 2,
320+
character: 10
321+
}
322+
}
323+
},
324+
{
325+
newText: 'store1',
326+
range: {
327+
start: {
328+
line: 3,
329+
character: 8
330+
},
331+
end: {
332+
line: 3,
333+
character: 13
334+
}
335+
}
336+
},
337+
{
338+
newText: 'store1',
339+
range: {
340+
start: {
341+
line: 6,
342+
character: 2
343+
},
344+
end: {
345+
line: 6,
346+
character: 7
347+
}
348+
}
349+
},
350+
{
351+
newText: 'store1',
352+
range: {
353+
start: {
354+
line: 7,
355+
character: 6
356+
},
357+
end: {
358+
line: 7,
359+
character: 11
360+
}
361+
}
362+
}
363+
]
364+
}
365+
});
366+
}
367+
368+
it('from definition', async () => {
369+
await do$storeRename(Position.create(1, 10));
370+
});
371+
372+
it('from usage within script', async () => {
373+
await do$storeRename(Position.create(3, 10));
374+
});
375+
});
376+
289377
it('should allow rename of variable', async () => {
290378
const { provider, renameDoc1 } = await setup();
291379
const result = await provider.prepareRename(renameDoc1, Position.create(1, 25));

packages/language-server/test/plugins/typescript/testfiles/definitions.svelte

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,5 +4,16 @@ import ImportedFile from './imported-file.svelte';
44
function bla() {return true;}
55
bla();
66
blubb();
7+
let store = null;
8+
$store;
9+
if ($store) {}
10+
$blubb;
11+
if ($blubb) {}
712
</script>
8-
<ImportedFile></ImportedFile>
13+
<ImportedFile></ImportedFile>
14+
{$store}
15+
{#if $store}
16+
{/if}
17+
{$blubb}
18+
{#if $blubb}
19+
{/if}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
<script lang="ts">
2+
let store = "not a store";
3+
$store;
4+
if($store) {}
5+
</script>
6+
7+
{$store}
8+
{#if $store}
9+
{/if}

0 commit comments

Comments
 (0)