Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
microsoft
GitHub Repository: microsoft/vscode
Path: blob/main/extensions/copilot/src/platform/parser/test/node/getTestableNodes.ts.spec.ts
13405 views
1
/*---------------------------------------------------------------------------------------------
2
* Copyright (c) Microsoft Corporation. All rights reserved.
3
* Licensed under the MIT License. See License.txt in the project root for license information.
4
*--------------------------------------------------------------------------------------------*/
5
6
import { outdent } from 'outdent';
7
import { afterAll, expect, suite, test } from 'vitest';
8
import { _dispose } from '../../node/parserWithCaching';
9
import { WASMLanguage } from '../../node/treeSitterLanguages';
10
import { annotTestableNodes } from './getTestableNodes.util';
11
12
suite('getTestableNodes - ts', () => {
13
afterAll(() => _dispose());
14
15
function run(annotatedSrc: string) {
16
return annotTestableNodes(
17
WASMLanguage.TypeScript,
18
annotatedSrc,
19
);
20
}
21
22
test('function declaration', async () => {
23
const result = await run(
24
outdent`
25
function add(a: number, b: number): number {
26
return a + b;
27
}
28
`,
29
);
30
expect(result).toMatchInlineSnapshot(`
31
"<NODE>function <IDENT>add</IDENT>(a: number, b: number): number {
32
return a + b;
33
}</NODE>"
34
`);
35
});
36
37
test('method', async () => {
38
const result = await run(
39
outdent`
40
class Foo {
41
method(a: number, b: number): number {
42
return a + b;
43
}
44
}
45
`,
46
);
47
expect(result).toMatchInlineSnapshot(`
48
"<NODE>class <IDENT>Foo</IDENT> {
49
<NODE-1><IDENT-1>method</IDENT-1>(a: number, b: number): number {
50
return a + b;
51
}</NODE-1>
52
}</NODE>"
53
`);
54
});
55
56
test('public method', async () => {
57
const result = await run(
58
outdent`
59
class Foo {
60
method(a: number, b: number): number {
61
return a + b;
62
}
63
}
64
`,
65
);
66
expect(result).toMatchInlineSnapshot(`
67
"<NODE>class <IDENT>Foo</IDENT> {
68
<NODE-1><IDENT-1>method</IDENT-1>(a: number, b: number): number {
69
return a + b;
70
}</NODE-1>
71
}</NODE>"
72
`);
73
});
74
75
test('several public methods', async () => {
76
const result = await run(
77
outdent`
78
class Foo {
79
method(a: number, b: number): number {
80
return a + b;
81
}
82
83
method2(a: number, b: number): number {
84
return a + b;
85
}
86
87
method3(a: number, b: number): number {
88
return a + b;
89
}
90
91
method4(a: number, b: number): number {
92
return a + b;
93
}
94
}
95
`,
96
);
97
expect(result).toMatchInlineSnapshot(`
98
"<NODE>class <IDENT>Foo</IDENT> {
99
<NODE-1><IDENT-1>method</IDENT-1>(a: number, b: number): number {
100
return a + b;
101
}</NODE-1>
102
103
<NODE-2><IDENT-2>method2</IDENT-2>(a: number, b: number): number {
104
return a + b;
105
}</NODE-2>
106
107
<NODE-3><IDENT-3>method3</IDENT-3>(a: number, b: number): number {
108
return a + b;
109
}</NODE-3>
110
111
<NODE-4><IDENT-4>method4</IDENT-4>(a: number, b: number): number {
112
return a + b;
113
}</NODE-4>
114
}</NODE>"
115
`);
116
});
117
118
test('captures mix', async () => {
119
const result = await run(
120
outdent`
121
class Foo {
122
methodPub() {
123
}
124
125
private method(a: number, b: number): number {
126
return a + b;
127
}
128
}
129
`,
130
);
131
expect(result).toMatchInlineSnapshot(`
132
"<NODE>class <IDENT>Foo</IDENT> {
133
<NODE-1><IDENT-1>methodPub</IDENT-1>() {
134
}</NODE-1>
135
136
private method(a: number, b: number): number {
137
return a + b;
138
}
139
}</NODE>"
140
`);
141
});
142
143
test('does NOT capture private method', async () => {
144
const result = await run(
145
outdent`
146
class Foo {
147
private method(a: number, b: number): number {
148
return a + b;
149
}
150
}
151
`,
152
);
153
expect(result).toMatchInlineSnapshot(`
154
"class Foo {
155
private method(a: number, b: number): number {
156
return a + b;
157
}
158
}"
159
`);
160
});
161
162
test('static method', async () => {
163
const result = await run(
164
outdent`
165
class Foo {
166
static method(a: number, b: number): number {
167
return a + b;
168
}
169
}
170
`,
171
);
172
expect(result).toMatchInlineSnapshot(`
173
"<NODE>class <IDENT>Foo</IDENT> {
174
<NODE-1>static <IDENT-1>method</IDENT-1>(a: number, b: number): number {
175
return a + b;
176
}</NODE-1>
177
}</NODE>"
178
`);
179
});
180
181
test('private static method', async () => {
182
const result = await run(
183
outdent`
184
class Foo {
185
private static method(a: number, b: number): number {
186
return a + b;
187
}
188
}
189
`,
190
);
191
expect(result).toMatchInlineSnapshot(`
192
"class Foo {
193
private static method(a: number, b: number): number {
194
return a + b;
195
}
196
}"
197
`);
198
});
199
200
201
test('public static method', async () => {
202
const result = await run(
203
outdent`
204
class Foo {
205
public static method(a: number, b: number): number {
206
return a + b;
207
}
208
}
209
`,
210
);
211
expect(result).toMatchInlineSnapshot(`
212
"<NODE>class <IDENT>Foo</IDENT> {
213
<NODE-1>public static <IDENT-1>method</IDENT-1>(a: number, b: number): number {
214
return a + b;
215
}</NODE-1>
216
}</NODE>"
217
`);
218
});
219
220
test('class declaration', async () => {
221
const result = await run(
222
outdent`
223
export class Foo {
224
method(a: number, b: number): number {
225
return a + b;
226
}
227
}
228
`,
229
);
230
expect(result).toMatchInlineSnapshot(`
231
"export <NODE>class <IDENT>Foo</IDENT> {
232
<NODE-1><IDENT-1>method</IDENT-1>(a: number, b: number): number {
233
return a + b;
234
}</NODE-1>
235
}</NODE>"
236
`);
237
});
238
239
test('class declaration with prop and method', async () => {
240
const result = await run(
241
outdent`
242
export class Foo {
243
bar = 1;
244
245
method(a: number, b: number): number {
246
return a + b;
247
}
248
}
249
`,
250
);
251
expect(result).toMatchInlineSnapshot(`
252
"export <NODE>class <IDENT>Foo</IDENT> {
253
bar = 1;
254
255
<NODE-1><IDENT-1>method</IDENT-1>(a: number, b: number): number {
256
return a + b;
257
}</NODE-1>
258
}</NODE>"
259
`);
260
});
261
262
test('class declaration with prop and static method', async () => {
263
const result = await run(
264
outdent`
265
export class Foo {
266
bar = 1;
267
268
static method(a: number, b: number): number {
269
return a + b;
270
}
271
}
272
`,
273
);
274
expect(result).toMatchInlineSnapshot(`
275
"export <NODE>class <IDENT>Foo</IDENT> {
276
bar = 1;
277
278
<NODE-1>static <IDENT-1>method</IDENT-1>(a: number, b: number): number {
279
return a + b;
280
}</NODE-1>
281
}</NODE>"
282
`);
283
});
284
});
285
286