1 /**
2 * Copyright (c) 2025 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at*
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0*
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15 #include <gtest/gtest.h>
16 #include <cstddef>
17 #include <cstdio>
18 #include <optional>
19 #include <ostream>
20 #include <string>
21 #include <vector>
22
23 #include "es2panda.h"
24 #include "lsp/include/api.h"
25 #include "lsp/include/get_class_property_info.h"
26 #include "lsp/include/cancellation_token.h"
27 #include "lsp_api_test.h"
28 #include <iostream>
29
30 namespace {
31 // NOLINTBEGIN
32 using ark::es2panda::lsp::Initializer;
33
34 class LspGetClassPropertyInfoTests : public LSPAPITests {};
35 std::vector<std::string> fileContents = {
36 R"(
37 enum BloodType {
38 A = 'A',
39 AB = 'AB'
40 }
41
42 class Address {
43 province: string = '';
44 city: string = '';
45 }
46
47 interface Control {
48 state: number
49 }
50
51 interface SelectableControl extends Control {
52 select(): void
53 }
54
55 class SelectableControlClass extends Address implements SelectableControl {
56 select(): void {
57 throw new Error("Method not implemented.");
58 }
59
60 private state1: number = 0;
61 protected readonly hobbies: string[] = [];
62 }
63
64 enum Sex {
65 Male = 'Male'
66 }
67
68 export class Person extends SelectableControlClass implements SelectableControl {
69 static MAX_HEIGHT: number = 250;
70 static BLOOD_TYPES: BloodType = BloodType.AB;
71 static defaultAddress: Address = {
72 province: '北京',
73 city: '北京市',
74 };
75 name: string = '';
76 age: number = Person.MAX_HEIGHT;
77 weight: number = 0;
78 sex: Sex = Sex.Male;
79 bloodType: BloodType = BloodType.A;
80 address: Address = new Address();
81 hobbies: string[] = [];
82 maritalStatus: 'single' | 'married' | 'divorced' = 'single';
83 birthday: Date = new Date();
84 location: [number, number] = [0, 0];
85 avatar: Resource = $r('app.media.startIcon');
86 attributes: Map<string, object> = new Map();
87 isEmployed: boolean = false;
88 private privateIsEmployed: boolean = false;
89 protected protectedIsEmployed: boolean = false;
90 protected readonly readonlyIsEmployed: boolean = false;
91 onUpdate: (() => void) | null = null;
92 }
93 )"};
94 std::vector<std::string> fileContents2 = {
95 R"(
96 export enum BloodType {
97 A = 'A',
98 AB = 'AB'
99 }
100
101 export class Address {
102 state: number = 1;
103 province: string = '';
104 city: string = '';
105 }
106
107 interface Control {
108 state: number
109 }
110
111 export interface SelectableControl extends Control {
112 select(): void
113 }
114 )",
115 R"(
116 import { Address, SelectableControl } from "./GetClassPropertyInfo_SelectableControl";
117
118 export class SelectableControlClass extends Address implements SelectableControl {
119 select(): void {
120 throw new Error("Method not implemented.");
121 }
122
123 private state1: number = 0;
124 protected readonly hobbies: string[] = [];
125 }
126 )",
127 R"(
128 import { Address, BloodType, SelectableControl } from "./GetClassPropertyInfo_SelectableControl";
129 import { SelectableControlClass } from "./GetClassPropertyInfo_SelectableControlClass";
130
131 enum Sex {
132 Male = 'Male'
133 }
134
135 export class Person extends SelectableControlClass implements SelectableControl {
136 static MAX_HEIGHT: number = 250;
137 static BLOOD_TYPES: BloodType = BloodType.AB;
138 static defaultAddress: Address = {
139 province: '北京',
140 city: '北京市',
141 state: 0
142 };
143 name: string = '';
144 age: number = Person.MAX_HEIGHT;
145 weight: number = 0;
146 sex: Sex = Sex.Male;
147 bloodType: BloodType = BloodType.A;
148 address: Address = new Address();
149 hobbies: string[] = [];
150 maritalStatus: 'single' | 'married' | 'divorced' = 'single';
151 birthday: Date = new Date();
152 location: [number, number] = [0, 0];
153 avatar: Resource = $r('app.media.startIcon');
154 attributes: Map<string, object> = new Map();
155 isEmployed: boolean = false;
156 private privateIsEmployed: boolean = false;
157 protected protectedIsEmployed: boolean = false;
158 protected readonly readonlyIsEmployed: boolean = false;
159 onUpdate: (() => void) | null = null;
160 }
161 )"};
162
163 std::vector<std::tuple<std::string, size_t, size_t, std::string, std::vector<std::string>>> expectedResultWangz1 = {
164 {"MAX_HEIGHT", 561, 585, "classField", {"public", "static"}},
165 {"BLOOD_TYPES", 596, 633, "classField", {"public", "static"}},
166 {"defaultAddress", 644, 722, "classField", {"public", "static"}},
167 {"name", 726, 743, "classField", {"public"}},
168 {"age", 747, 778, "classField", {"public"}},
169 {"weight", 782, 800, "classField", {"public"}},
170 {"sex", 804, 823, "classField", {"public"}},
171 {"bloodType", 827, 861, "classField", {"public"}},
172 {"address", 865, 898, "classField", {"public"}},
173 {"hobbies", 901, 923, "classField", {"public"}},
174 {"maritalStatus", 927, 986, "classField", {"public"}},
175 {"birthday", 990, 1018, "classField", {"public"}},
176 {"location", 1021, 1056, "classField", {"public"}},
177 {"avatar", 1060, 1104, "classField", {"public"}},
178 {"attributes", 1108, 1152, "classField", {"public"}},
179 {"isEmployed", 1155, 1182, "classField", {"public"}},
180 {"privateIsEmployed", 1194, 1228, "classField", {"private"}},
181 {"protectedIsEmployed", 1242, 1278, "classField", {"protected"}},
182 {"readonlyIsEmployed", 1301, 1336, "classField", {"protected", "readonly"}},
183 {"onUpdate", 1340, 1376, "classField", {"public"}}};
184
CheckClassPropertiesMatch(const std::vector<FieldListProperty> & actualProperties,const std::vector<std::tuple<std::string,size_t,size_t,std::string,std::vector<std::string>>> & expectedResult)185 void CheckClassPropertiesMatch(
186 const std::vector<FieldListProperty> &actualProperties,
187 const std::vector<std::tuple<std::string, size_t, size_t, std::string, std::vector<std::string>>> &expectedResult)
188 {
189 for (size_t i = 0; i < actualProperties.size(); ++i) {
190 const auto &perp = actualProperties[i];
191 const auto &expected = expectedResult[i];
192
193 const auto &expectedName = std::get<0>(expected);
194 const auto expectedStart = std::get<1>(expected);
195 const auto expectedEnd = std::get<2>(expected);
196 const auto &expectedKind = std::get<3>(expected);
197 const auto &expectedModifiers = std::get<4>(expected);
198
199 bool nameMatch = (perp.displayName == expectedName);
200 bool startMatch = (perp.start == expectedStart);
201 bool endMatch = (perp.end == expectedEnd);
202 bool kindMatch = (perp.kind == expectedKind);
203
204 bool modifiersMatch = true;
205 if (perp.modifierKinds.has_value()) {
206 const auto &actualModifiers = perp.modifierKinds.value();
207 modifiersMatch = (actualModifiers == expectedModifiers); // 严格比较顺序
208 } else {
209 modifiersMatch = expectedModifiers.empty();
210 }
211
212 bool currentMatch = nameMatch && startMatch && endMatch && kindMatch && modifiersMatch;
213 ASSERT_EQ(true, currentMatch);
214 }
215 }
216
TEST_F(LspGetClassPropertyInfoTests,GetClassPropertyInfoMethodTest1)217 TEST_F(LspGetClassPropertyInfoTests, GetClassPropertyInfoMethodTest1)
218 {
219 constexpr size_t EXPECTED_CLASS_COUNT = 3;
220 constexpr size_t EXPECTED_CLASS_COUNT_ONE = 1;
221 constexpr size_t EXPECTED_PROP_COUNT = 20;
222
223 std::vector<std::string> fileNames = {"GetClassPropertyInfoMethodFile1.ets"};
224
225 auto filePaths = CreateTempFile(fileNames, fileContents);
226 std::vector<ark::es2panda::SourceFile> sourceFiles;
227
228 for (size_t i = 0; i < filePaths.size(); ++i) {
229 sourceFiles.emplace_back(filePaths[i], fileContents[i]);
230 }
231 ASSERT_EQ(fileNames.size(), sourceFiles.size());
232
233 Initializer initializer;
234 size_t sourceIndex = 0;
235 size_t tokenOffset = 800;
236 auto filePath = std::string {sourceFiles[sourceIndex].filePath};
237 auto fileContent = std::string {sourceFiles[sourceIndex].source};
238 auto context = initializer.CreateContext(filePath.c_str(), ES2PANDA_STATE_CHECKED, fileContent.c_str());
239
240 auto infos = ark::es2panda::lsp::GetClassPropertyInfo(context, tokenOffset, true);
241 ASSERT_EQ(EXPECTED_CLASS_COUNT, infos.size());
242
243 auto infos2 = ark::es2panda::lsp::GetClassPropertyInfo(context, tokenOffset);
244 initializer.DestroyContext(context);
245 ASSERT_EQ(EXPECTED_CLASS_COUNT_ONE, infos2.size());
246
247 FieldsInfo info = infos2[0];
248 ASSERT_EQ(EXPECTED_PROP_COUNT, info.properties.size());
249 ASSERT_EQ("Person", info.name);
250 CheckClassPropertiesMatch(info.properties, expectedResultWangz1);
251 }
252
253 std::vector<std::tuple<std::string, size_t, size_t, std::string, std::vector<std::string>>> expectedResultWangz2 = {
254 {"MAX_HEIGHT", 309, 333, "classField", {"public", "static"}},
255 {"BLOOD_TYPES", 344, 381, "classField", {"public", "static"}},
256 {"defaultAddress", 392, 483, "classField", {"public", "static"}},
257 {"name", 487, 504, "classField", {"public"}},
258 {"age", 508, 539, "classField", {"public"}},
259 {"weight", 543, 561, "classField", {"public"}},
260 {"sex", 565, 584, "classField", {"public"}},
261 {"bloodType", 588, 622, "classField", {"public"}},
262 {"address", 626, 659, "classField", {"public"}},
263 {"hobbies", 662, 684, "classField", {"public"}},
264 {"maritalStatus", 688, 747, "classField", {"public"}},
265 {"birthday", 751, 779, "classField", {"public"}},
266 {"location", 782, 817, "classField", {"public"}},
267 {"avatar", 821, 865, "classField", {"public"}},
268 {"attributes", 869, 913, "classField", {"public"}},
269 {"isEmployed", 916, 943, "classField", {"public"}},
270 {"privateIsEmployed", 955, 989, "classField", {"private"}},
271 {"protectedIsEmployed", 1003, 1039, "classField", {"protected"}},
272 {"readonlyIsEmployed", 1062, 1097, "classField", {"protected", "readonly"}},
273 {"onUpdate", 1101, 1137, "classField", {"public"}}};
274
TEST_F(LspGetClassPropertyInfoTests,GetClassPropertyInfoMethodTest2)275 TEST_F(LspGetClassPropertyInfoTests, GetClassPropertyInfoMethodTest2)
276 {
277 constexpr size_t EXPECTED_CLASS_COUNT = 3;
278 constexpr size_t EXPECTED_CLASS_COUNT_ONE = 1;
279 constexpr size_t EXPECTED_PROP_COUNT = 20;
280
281 std::vector<std::string> fileNames2 = {"GetClassPropertyInfo_SelectableControl.ets",
282 "GetClassPropertyInfo_SelectableControlClass.ets",
283 "GetClassPropertyInfo_Person.ets"};
284
285 auto filePaths = CreateTempFile(fileNames2, fileContents2);
286 std::vector<ark::es2panda::SourceFile> sourceFiles;
287
288 for (size_t i = 0; i < filePaths.size(); ++i) {
289 sourceFiles.emplace_back(filePaths[i], fileContents2[i]);
290 }
291 ASSERT_EQ(fileNames2.size(), sourceFiles.size());
292
293 Initializer initializer;
294 size_t sourceIndex = 2;
295 size_t tokenOffset = 300;
296 auto filePath = std::string {sourceFiles[sourceIndex].filePath};
297 auto fileContent = std::string {sourceFiles[sourceIndex].source};
298 auto context = initializer.CreateContext(filePath.c_str(), ES2PANDA_STATE_CHECKED, fileContent.c_str());
299
300 auto infos = ark::es2panda::lsp::GetClassPropertyInfo(context, tokenOffset, true);
301 ASSERT_EQ(EXPECTED_CLASS_COUNT, infos.size());
302
303 auto infos2 = ark::es2panda::lsp::GetClassPropertyInfo(context, tokenOffset);
304 initializer.DestroyContext(context);
305 ASSERT_EQ(EXPECTED_CLASS_COUNT_ONE, infos2.size());
306
307 FieldsInfo info = infos2[0];
308 ASSERT_EQ(EXPECTED_PROP_COUNT, info.properties.size());
309 ASSERT_EQ("Person", info.name);
310 CheckClassPropertiesMatch(info.properties, expectedResultWangz2);
311 }
312
313 std::vector<std::string> fileContents3 = {
314 R"(
315 class A {
316 }
317 )",
318 R"(
319 class B {
320 p1
321 p2
322 static p3
323 readonly p4
324 private p5
325 }
326 )",
327 R"(
328 class KKK {
329 tr:string;
330 constructor(tr: string) {
331 this.tr = tr;
332 }
333 }
334
335 class NNN extends KKK {
336 }
337 )",
338 R"(
339 class GGG {
340 tr:string;
341 constructor(tr: string) {
342 this.tr = tr;
343 }
344 }
345
346 class HHH extends GGG {
347 pop:string
348 }
349 )",
350 R"(
351 abstract class AA {
352 test: number;
353 }
354
355 class NN extends AA {
356 jkk: string;
357 }
358 )",
359 R"(
360 abstract class AA2 {
361 test: number;
362 private kn: string;
363 das: string;
364
365 constructor(test: number, kn: string) {
366 this.test = test;
367 this.kn = kn;
368 }
369 }
370
371 class NN2 extends AA2 {
372 jkk: string;
373 wwa: number;
374 }
375 )",
376 R"(
377 class ok {
378 test?:string;
379 }
380 )",
381 R"(
382 class TY {
383 private _a: string = "foo"
384 }
385 )",
386 R"(
387 class TwY {
388 static a: string = "foo"
389 }
390 )",
391 R"(
392 class TwasY {
393 a: string|number;
394 }
395 )",
396 R"(
397 abstract class TY {
398 abstract a: string|number;
399 }
400 )",
401 R"(
402 class Demo {
403 private name = 'jack';
404 private age = 25;
405 private doTask = () => 34;
406 }
407 )",
408 R"(
409 interface AA {
410 aa: number;
411 getAA(): number;
412 }
413
414 class BaseNN {
415 aa: number;
416
417 constructor(aa: number) {
418 this.aa = aa;
419 }
420
421 getAA(): number {
422 return 1;
423 }
424 }
425
426 class MM extends BaseNN implements AA {
427 aa: number;
428 getAA(): number {
429 return super.getAA();
430 }
431 }
432 )",
433 R"(
434 import CommonEventManager from '@ohos.commonEventManager';
435
436 interface SubscribeInfoType {
437 events: string[];
438 }
439
440 class CommonEventRegister {
441 subscriber: CommonEventManager.CommonEventSubscriber | null = null;
442 public subscribeInfo: SubscribeInfoType;
443 }
444 )"};
445
446 std::vector<std::tuple<std::string, size_t, size_t, std::string, std::vector<std::string>>> expectedResult1 = {};
447
TEST_F(LspGetClassPropertyInfoTests,GetClassPropertyInfoMethod1)448 TEST_F(LspGetClassPropertyInfoTests, GetClassPropertyInfoMethod1)
449 {
450 constexpr size_t EXPECTED_CLASS_COUNT = 1;
451 constexpr size_t EXPECTED_PROP_COUNT = 0;
452
453 std::vector<std::string> fileNames3 = {
454 "get_class_property_info_test_m1_01.ets", "get_class_property_info_test_m1_02.ets",
455 "get_class_property_info_test_m1_03.ets", "get_class_property_info_test_m1_04.ets",
456 "get_class_property_info_test_m1_05.ets", "get_class_property_info_test_m1_06.ets",
457 "get_class_property_info_test_m1_07.ets", "get_class_property_info_test_m1_08.ets",
458 "get_class_property_info_test_m1_09.ets", "get_class_property_info_test_m1_10.ets",
459 "get_class_property_info_test_m1_11.ets", "get_class_property_info_test_m1_12.ets",
460 "get_class_property_info_test_m1_13.ets", "get_class_property_info_test_m1_14.ets"};
461
462 auto filePaths = CreateTempFile(fileNames3, fileContents3);
463 std::vector<ark::es2panda::SourceFile> sourceFiles;
464
465 for (size_t i = 0; i < filePaths.size(); ++i) {
466 sourceFiles.emplace_back(filePaths[i], fileContents3[i]);
467 }
468 ASSERT_EQ(fileNames3.size(), sourceFiles.size());
469
470 Initializer initializer;
471 size_t sourceIndex = 0;
472 size_t tokenOffset = 12;
473 auto filePath = std::string {sourceFiles[sourceIndex].filePath};
474 auto fileContent = std::string {sourceFiles[sourceIndex].source};
475 auto context = initializer.CreateContext(filePath.c_str(), ES2PANDA_STATE_CHECKED, fileContent.c_str());
476
477 auto infos = ark::es2panda::lsp::GetClassPropertyInfo(context, tokenOffset, true);
478 ASSERT_EQ(EXPECTED_CLASS_COUNT, infos.size());
479 ASSERT_EQ(EXPECTED_PROP_COUNT, infos[0].properties.size());
480 CheckClassPropertiesMatch(infos[0].properties, expectedResult1);
481 }
482
483 std::vector<std::tuple<std::string, size_t, size_t, std::string, std::vector<std::string>>> expectedResult2 = {
484 {"p1", 13, 15, "classField", {"public"}},
485 {"p2", 18, 20, "classField", {"public"}},
486 {"p3", 30, 32, "classField", {"public", "static"}},
487 {"p4", 44, 46, "classField", {"public", "readonly"}},
488 {"p5", 57, 59, "classField", {"private"}}};
489
TEST_F(LspGetClassPropertyInfoTests,GetClassPropertyInfoMethod2)490 TEST_F(LspGetClassPropertyInfoTests, GetClassPropertyInfoMethod2)
491 {
492 constexpr size_t EXPECTED_CLASS_COUNT = 1;
493 constexpr size_t EXPECTED_PROP_COUNT = 5;
494
495 std::vector<std::string> fileNames3 = {
496 "get_class_property_info_test_m2_01.ets", "get_class_property_info_test_m2_02.ets",
497 "get_class_property_info_test_m2_03.ets", "get_class_property_info_test_m2_04.ets",
498 "get_class_property_info_test_m2_05.ets", "get_class_property_info_test_m2_06.ets",
499 "get_class_property_info_test_m2_07.ets", "get_class_property_info_test_m2_08.ets",
500 "get_class_property_info_test_m2_09.ets", "get_class_property_info_test_m2_10.ets",
501 "get_class_property_info_test_m2_11.ets", "get_class_property_info_test_m2_12.ets",
502 "get_class_property_info_test_m2_13.ets", "get_class_property_info_test_m2_14.ets"};
503
504 auto filePaths = CreateTempFile(fileNames3, fileContents3);
505 std::vector<ark::es2panda::SourceFile> sourceFiles;
506
507 for (size_t i = 0; i < filePaths.size(); ++i) {
508 sourceFiles.emplace_back(filePaths[i], fileContents3[i]);
509 }
510 ASSERT_EQ(fileNames3.size(), sourceFiles.size());
511
512 Initializer initializer;
513 size_t sourceIndex = 1;
514 size_t tokenOffset = 61;
515 auto filePath = std::string {sourceFiles[sourceIndex].filePath};
516 auto fileContent = std::string {sourceFiles[sourceIndex].source};
517 auto context = initializer.CreateContext(filePath.c_str(), ES2PANDA_STATE_CHECKED, fileContent.c_str());
518 auto infos = ark::es2panda::lsp::GetClassPropertyInfo(context, tokenOffset, true);
519 ASSERT_EQ(EXPECTED_CLASS_COUNT, infos.size());
520 ASSERT_EQ(EXPECTED_PROP_COUNT, infos[0].properties.size());
521 CheckClassPropertiesMatch(infos[0].properties, expectedResult2);
522 }
523
524 std::vector<std::tuple<std::string, size_t, size_t, std::string, std::vector<std::string>>> expectedResult3 = {};
525
TEST_F(LspGetClassPropertyInfoTests,GetClassPropertyInfoMethod3)526 TEST_F(LspGetClassPropertyInfoTests, GetClassPropertyInfoMethod3)
527 {
528 constexpr size_t EXPECTED_CLASS_COUNT = 2;
529 constexpr size_t EXPECTED_PROP_COUNT = 0;
530
531 std::vector<std::string> fileNames3 = {
532 "get_class_property_info_test_m3_01.ets", "get_class_property_info_test_m3_02.ets",
533 "get_class_property_info_test_m3_03.ets", "get_class_property_info_test_m3_04.ets",
534 "get_class_property_info_test_m3_05.ets", "get_class_property_info_test_m3_06.ets",
535 "get_class_property_info_test_m3_07.ets", "get_class_property_info_test_m3_08.ets",
536 "get_class_property_info_test_m3_09.ets", "get_class_property_info_test_m3_10.ets",
537 "get_class_property_info_test_m3_11.ets", "get_class_property_info_test_m3_12.ets",
538 "get_class_property_info_test_m3_13.ets", "get_class_property_info_test_m3_14.ets"};
539
540 auto filePaths = CreateTempFile(fileNames3, fileContents3);
541 std::vector<ark::es2panda::SourceFile> sourceFiles;
542
543 for (size_t i = 0; i < filePaths.size(); ++i) {
544 sourceFiles.emplace_back(filePaths[i], fileContents3[i]);
545 }
546 ASSERT_EQ(fileNames3.size(), sourceFiles.size());
547
548 Initializer initializer;
549 size_t sourceIndex = 2;
550 size_t tokenOffset = 104;
551 auto filePath = std::string {sourceFiles[sourceIndex].filePath};
552 auto fileContent = std::string {sourceFiles[sourceIndex].source};
553 auto context = initializer.CreateContext(filePath.c_str(), ES2PANDA_STATE_CHECKED, fileContent.c_str());
554 auto infos = ark::es2panda::lsp::GetClassPropertyInfo(context, tokenOffset, true);
555 ASSERT_EQ(EXPECTED_CLASS_COUNT, infos.size());
556 ASSERT_EQ(EXPECTED_PROP_COUNT, infos[0].properties.size());
557 CheckClassPropertiesMatch(infos[0].properties, expectedResult3);
558 }
559
560 std::vector<std::tuple<std::string, size_t, size_t, std::string, std::vector<std::string>>> expectedResult4 = {
561 {"pop", 107, 119, "classField", {"public"}}};
562
TEST_F(LspGetClassPropertyInfoTests,GetClassPropertyInfoMethod4)563 TEST_F(LspGetClassPropertyInfoTests, GetClassPropertyInfoMethod4)
564 {
565 constexpr size_t EXPECTED_CLASS_COUNT = 2;
566 constexpr size_t EXPECTED_PROP_COUNT = 1;
567
568 std::vector<std::string> fileNames3 = {
569 "get_class_property_info_test_m4_01.ets", "get_class_property_info_test_m4_02.ets",
570 "get_class_property_info_test_m4_03.ets", "get_class_property_info_test_m4_04.ets",
571 "get_class_property_info_test_m4_05.ets", "get_class_property_info_test_m4_06.ets",
572 "get_class_property_info_test_m4_07.ets", "get_class_property_info_test_m4_08.ets",
573 "get_class_property_info_test_m4_09.ets", "get_class_property_info_test_m4_10.ets",
574 "get_class_property_info_test_m4_11.ets", "get_class_property_info_test_m4_12.ets",
575 "get_class_property_info_test_m4_13.ets", "get_class_property_info_test_m4_14.ets"};
576
577 auto filePaths = CreateTempFile(fileNames3, fileContents3);
578 std::vector<ark::es2panda::SourceFile> sourceFiles;
579
580 for (size_t i = 0; i < filePaths.size(); ++i) {
581 sourceFiles.emplace_back(filePaths[i], fileContents3[i]);
582 }
583 ASSERT_EQ(fileNames3.size(), sourceFiles.size());
584
585 Initializer initializer;
586 size_t sourceIndex = 3;
587 size_t tokenOffset = 117;
588 auto filePath = std::string {sourceFiles[sourceIndex].filePath};
589 auto fileContent = std::string {sourceFiles[sourceIndex].source};
590 auto context = initializer.CreateContext(filePath.c_str(), ES2PANDA_STATE_CHECKED, fileContent.c_str());
591 auto infos = ark::es2panda::lsp::GetClassPropertyInfo(context, tokenOffset, true);
592 ASSERT_EQ(EXPECTED_CLASS_COUNT, infos.size());
593 ASSERT_EQ(EXPECTED_PROP_COUNT, infos[0].properties.size());
594 CheckClassPropertiesMatch(infos[0].properties, expectedResult4);
595 }
596
597 std::vector<std::tuple<std::string, size_t, size_t, std::string, std::vector<std::string>>> expectedResult5 = {
598 {"jkk", 64, 76, "classField", {"public"}}};
599
TEST_F(LspGetClassPropertyInfoTests,GetClassPropertyInfoMethod5)600 TEST_F(LspGetClassPropertyInfoTests, GetClassPropertyInfoMethod5)
601 {
602 constexpr size_t EXPECTED_CLASS_COUNT = 2;
603 constexpr size_t EXPECTED_PROP_COUNT = 1;
604
605 std::vector<std::string> fileNames3 = {
606 "get_class_property_info_test_m5_01.ets", "get_class_property_info_test_m5_02.ets",
607 "get_class_property_info_test_m5_03.ets", "get_class_property_info_test_m5_04.ets",
608 "get_class_property_info_test_m5_05.ets", "get_class_property_info_test_m5_06.ets",
609 "get_class_property_info_test_m5_07.ets", "get_class_property_info_test_m5_08.ets",
610 "get_class_property_info_test_m5_09.ets", "get_class_property_info_test_m5_10.ets",
611 "get_class_property_info_test_m5_11.ets", "get_class_property_info_test_m5_12.ets",
612 "get_class_property_info_test_m5_13.ets", "get_class_property_info_test_m5_14.ets"};
613
614 auto filePaths = CreateTempFile(fileNames3, fileContents3);
615 std::vector<ark::es2panda::SourceFile> sourceFiles;
616
617 for (size_t i = 0; i < filePaths.size(); ++i) {
618 sourceFiles.emplace_back(filePaths[i], fileContents3[i]);
619 }
620 ASSERT_EQ(fileNames3.size(), sourceFiles.size());
621
622 Initializer initializer;
623 size_t sourceIndex = 4;
624 size_t tokenOffset = 76;
625 auto filePath = std::string {sourceFiles[sourceIndex].filePath};
626 auto fileContent = std::string {sourceFiles[sourceIndex].source};
627 auto context = initializer.CreateContext(filePath.c_str(), ES2PANDA_STATE_CHECKED, fileContent.c_str());
628 auto infos = ark::es2panda::lsp::GetClassPropertyInfo(context, tokenOffset, true);
629 ASSERT_EQ(EXPECTED_CLASS_COUNT, infos.size());
630 ASSERT_EQ(EXPECTED_PROP_COUNT, infos[0].properties.size());
631 CheckClassPropertiesMatch(infos[0].properties, expectedResult5);
632 }
633
634 std::vector<std::tuple<std::string, size_t, size_t, std::string, std::vector<std::string>>> expectedResult6 = {
635 {"jkk", 195, 207, "classField", {"public"}}, {"wwa", 210, 222, "classField", {"public"}}};
636
TEST_F(LspGetClassPropertyInfoTests,GetClassPropertyInfoMethod6)637 TEST_F(LspGetClassPropertyInfoTests, GetClassPropertyInfoMethod6)
638 {
639 constexpr size_t EXPECTED_CLASS_COUNT = 2;
640 constexpr size_t EXPECTED_PROP_COUNT = 2;
641
642 std::vector<std::string> fileNames3 = {
643 "get_class_property_info_test_m6_01.ets", "get_class_property_info_test_m6_02.ets",
644 "get_class_property_info_test_m6_03.ets", "get_class_property_info_test_m6_04.ets",
645 "get_class_property_info_test_m6_05.ets", "get_class_property_info_test_m6_06.ets",
646 "get_class_property_info_test_m6_07.ets", "get_class_property_info_test_m6_08.ets",
647 "get_class_property_info_test_m6_09.ets", "get_class_property_info_test_m6_10.ets",
648 "get_class_property_info_test_m6_11.ets", "get_class_property_info_test_m6_12.ets",
649 "get_class_property_info_test_m6_13.ets", "get_class_property_info_test_m6_14.ets"};
650
651 auto filePaths = CreateTempFile(fileNames3, fileContents3);
652 std::vector<ark::es2panda::SourceFile> sourceFiles;
653
654 for (size_t i = 0; i < filePaths.size(); ++i) {
655 sourceFiles.emplace_back(filePaths[i], fileContents3[i]);
656 }
657 ASSERT_EQ(fileNames3.size(), sourceFiles.size());
658
659 Initializer initializer;
660 size_t sourceIndex = 5;
661 size_t tokenOffset = 222;
662 auto filePath = std::string {sourceFiles[sourceIndex].filePath};
663 auto fileContent = std::string {sourceFiles[sourceIndex].source};
664 auto context = initializer.CreateContext(filePath.c_str(), ES2PANDA_STATE_CHECKED, fileContent.c_str());
665 auto infos = ark::es2panda::lsp::GetClassPropertyInfo(context, tokenOffset, true);
666 ASSERT_EQ(EXPECTED_CLASS_COUNT, infos.size());
667 ASSERT_EQ(EXPECTED_PROP_COUNT, infos[0].properties.size());
668 CheckClassPropertiesMatch(infos[0].properties, expectedResult6);
669 }
670
671 std::vector<std::tuple<std::string, size_t, size_t, std::string, std::vector<std::string>>> expectedResult7 = {
672 {"test", 14, 27, "classField", {"public"}}};
673
TEST_F(LspGetClassPropertyInfoTests,GetClassPropertyInfoMethod7)674 TEST_F(LspGetClassPropertyInfoTests, GetClassPropertyInfoMethod7)
675 {
676 constexpr size_t EXPECTED_CLASS_COUNT = 1;
677 constexpr size_t EXPECTED_PROP_COUNT = 1;
678
679 std::vector<std::string> fileNames3 = {
680 "get_class_property_info_test_m7_01.ets", "get_class_property_info_test_m7_02.ets",
681 "get_class_property_info_test_m7_03.ets", "get_class_property_info_test_m7_04.ets",
682 "get_class_property_info_test_m7_05.ets", "get_class_property_info_test_m7_06.ets",
683 "get_class_property_info_test_m7_07.ets", "get_class_property_info_test_m7_08.ets",
684 "get_class_property_info_test_m7_09.ets", "get_class_property_info_test_m7_10.ets",
685 "get_class_property_info_test_m7_11.ets", "get_class_property_info_test_m7_12.ets",
686 "get_class_property_info_test_m7_13.ets", "get_class_property_info_test_m7_14.ets"};
687
688 auto filePaths = CreateTempFile(fileNames3, fileContents3);
689 std::vector<ark::es2panda::SourceFile> sourceFiles;
690
691 for (size_t i = 0; i < filePaths.size(); ++i) {
692 sourceFiles.emplace_back(filePaths[i], fileContents3[i]);
693 }
694 ASSERT_EQ(fileNames3.size(), sourceFiles.size());
695
696 Initializer initializer;
697 size_t sourceIndex = 6;
698 size_t tokenOffset = 27;
699 auto filePath = std::string {sourceFiles[sourceIndex].filePath};
700 auto fileContent = std::string {sourceFiles[sourceIndex].source};
701 auto context = initializer.CreateContext(filePath.c_str(), ES2PANDA_STATE_CHECKED, fileContent.c_str());
702 auto infos = ark::es2panda::lsp::GetClassPropertyInfo(context, tokenOffset, true);
703 ASSERT_EQ(EXPECTED_CLASS_COUNT, infos.size());
704 ASSERT_EQ(EXPECTED_PROP_COUNT, infos[0].properties.size());
705 CheckClassPropertiesMatch(infos[0].properties, expectedResult7);
706 }
707
708 std::vector<std::tuple<std::string, size_t, size_t, std::string, std::vector<std::string>>> expectedResult8 = {
709 {"_a", 22, 40, "classField", {"private"}}};
710
TEST_F(LspGetClassPropertyInfoTests,GetClassPropertyInfoMethod8)711 TEST_F(LspGetClassPropertyInfoTests, GetClassPropertyInfoMethod8)
712 {
713 constexpr size_t EXPECTED_CLASS_COUNT = 1;
714 constexpr size_t EXPECTED_PROP_COUNT = 1;
715
716 std::vector<std::string> fileNames3 = {
717 "get_class_property_info_test_m8_01.ets", "get_class_property_info_test_m8_02.ets",
718 "get_class_property_info_test_m8_03.ets", "get_class_property_info_test_m8_04.ets",
719 "get_class_property_info_test_m8_05.ets", "get_class_property_info_test_m8_06.ets",
720 "get_class_property_info_test_m8_07.ets", "get_class_property_info_test_m8_08.ets",
721 "get_class_property_info_test_m8_09.ets", "get_class_property_info_test_m8_10.ets",
722 "get_class_property_info_test_m8_11.ets", "get_class_property_info_test_m8_12.ets",
723 "get_class_property_info_test_m8_13.ets", "get_class_property_info_test_m8_14.ets"};
724
725 auto filePaths = CreateTempFile(fileNames3, fileContents3);
726 std::vector<ark::es2panda::SourceFile> sourceFiles;
727
728 for (size_t i = 0; i < filePaths.size(); ++i) {
729 sourceFiles.emplace_back(filePaths[i], fileContents3[i]);
730 }
731 ASSERT_EQ(fileNames3.size(), sourceFiles.size());
732
733 Initializer initializer;
734 size_t sourceIndex = 7;
735 size_t tokenOffset = 40;
736 auto filePath = std::string {sourceFiles[sourceIndex].filePath};
737 auto fileContent = std::string {sourceFiles[sourceIndex].source};
738 auto context = initializer.CreateContext(filePath.c_str(), ES2PANDA_STATE_CHECKED, fileContent.c_str());
739 auto infos = ark::es2panda::lsp::GetClassPropertyInfo(context, tokenOffset, true);
740 ASSERT_EQ(EXPECTED_CLASS_COUNT, infos.size());
741 ASSERT_EQ(EXPECTED_PROP_COUNT, infos[0].properties.size());
742 CheckClassPropertiesMatch(infos[0].properties, expectedResult8);
743 }
744
745 std::vector<std::tuple<std::string, size_t, size_t, std::string, std::vector<std::string>>> expectedResult9 = {
746 {"a", 22, 39, "classField", {"public", "static"}}};
747
TEST_F(LspGetClassPropertyInfoTests,GetClassPropertyInfoMethod9)748 TEST_F(LspGetClassPropertyInfoTests, GetClassPropertyInfoMethod9)
749 {
750 constexpr size_t EXPECTED_CLASS_COUNT = 1;
751 constexpr size_t EXPECTED_PROP_COUNT = 1;
752
753 std::vector<std::string> fileNames3 = {
754 "get_class_property_info_test_m9_01.ets", "get_class_property_info_test_m9_02.ets",
755 "get_class_property_info_test_m9_03.ets", "get_class_property_info_test_m9_04.ets",
756 "get_class_property_info_test_m9_05.ets", "get_class_property_info_test_m9_06.ets",
757 "get_class_property_info_test_m9_07.ets", "get_class_property_info_test_m9_08.ets",
758 "get_class_property_info_test_m9_09.ets", "get_class_property_info_test_m9_10.ets",
759 "get_class_property_info_test_m9_11.ets", "get_class_property_info_test_m9_12.ets",
760 "get_class_property_info_test_m9_13.ets", "get_class_property_info_test_m9_14.ets"};
761
762 auto filePaths = CreateTempFile(fileNames3, fileContents3);
763 std::vector<ark::es2panda::SourceFile> sourceFiles;
764
765 for (size_t i = 0; i < filePaths.size(); ++i) {
766 sourceFiles.emplace_back(filePaths[i], fileContents3[i]);
767 }
768 ASSERT_EQ(fileNames3.size(), sourceFiles.size());
769
770 Initializer initializer;
771 size_t sourceIndex = 8;
772 size_t tokenOffset = 39;
773 auto filePath = std::string {sourceFiles[sourceIndex].filePath};
774 auto fileContent = std::string {sourceFiles[sourceIndex].source};
775 auto context = initializer.CreateContext(filePath.c_str(), ES2PANDA_STATE_CHECKED, fileContent.c_str());
776 auto infos = ark::es2panda::lsp::GetClassPropertyInfo(context, tokenOffset, true);
777 ASSERT_EQ(EXPECTED_CLASS_COUNT, infos.size());
778 ASSERT_EQ(EXPECTED_PROP_COUNT, infos[0].properties.size());
779 CheckClassPropertiesMatch(infos[0].properties, expectedResult9);
780 }
781
782 std::vector<std::tuple<std::string, size_t, size_t, std::string, std::vector<std::string>>> expectedResult10 = {
783 {"a", 17, 34, "classField", {"public"}}};
784
TEST_F(LspGetClassPropertyInfoTests,GetClassPropertyInfoMethod10)785 TEST_F(LspGetClassPropertyInfoTests, GetClassPropertyInfoMethod10)
786 {
787 constexpr size_t EXPECTED_CLASS_COUNT = 1;
788 constexpr size_t EXPECTED_PROP_COUNT = 1;
789
790 std::vector<std::string> fileNames3 = {
791 "get_class_property_info_test_m10_01.ets", "get_class_property_info_test_m10_02.ets",
792 "get_class_property_info_test_m10_03.ets", "get_class_property_info_test_m10_04.ets",
793 "get_class_property_info_test_m10_05.ets", "get_class_property_info_test_m10_06.ets",
794 "get_class_property_info_test_m10_07.ets", "get_class_property_info_test_m10_08.ets",
795 "get_class_property_info_test_m10_09.ets", "get_class_property_info_test_m10_10.ets",
796 "get_class_property_info_test_m10_11.ets", "get_class_property_info_test_m10_12.ets",
797 "get_class_property_info_test_m10_13.ets", "get_class_property_info_test_m10_14.ets"};
798
799 auto filePaths = CreateTempFile(fileNames3, fileContents3);
800 std::vector<ark::es2panda::SourceFile> sourceFiles;
801
802 for (size_t i = 0; i < filePaths.size(); ++i) {
803 sourceFiles.emplace_back(filePaths[i], fileContents3[i]);
804 }
805 ASSERT_EQ(fileNames3.size(), sourceFiles.size());
806
807 Initializer initializer;
808 size_t sourceIndex = 9;
809 size_t tokenOffset = 35;
810 auto filePath = std::string {sourceFiles[sourceIndex].filePath};
811 auto fileContent = std::string {sourceFiles[sourceIndex].source};
812 auto context = initializer.CreateContext(filePath.c_str(), ES2PANDA_STATE_CHECKED, fileContent.c_str());
813 auto infos = ark::es2panda::lsp::GetClassPropertyInfo(context, tokenOffset, true);
814 ASSERT_EQ(EXPECTED_CLASS_COUNT, infos.size());
815 ASSERT_EQ(EXPECTED_PROP_COUNT, infos[0].properties.size());
816 CheckClassPropertiesMatch(infos[0].properties, expectedResult10);
817 }
818
819 std::vector<std::tuple<std::string, size_t, size_t, std::string, std::vector<std::string>>> expectedResult11 = {
820 {"a", 32, 49, "classField", {"public"}}};
821
TEST_F(LspGetClassPropertyInfoTests,GetClassPropertyInfoMethod11)822 TEST_F(LspGetClassPropertyInfoTests, GetClassPropertyInfoMethod11)
823 {
824 constexpr size_t EXPECTED_CLASS_COUNT = 1;
825 constexpr size_t EXPECTED_PROP_COUNT = 1;
826
827 std::vector<std::string> fileNames3 = {
828 "get_class_property_info_test_m11_01.ets", "get_class_property_info_test_m11_02.ets",
829 "get_class_property_info_test_m11_03.ets", "get_class_property_info_test_m11_04.ets",
830 "get_class_property_info_test_m11_05.ets", "get_class_property_info_test_m11_06.ets",
831 "get_class_property_info_test_m11_07.ets", "get_class_property_info_test_m11_08.ets",
832 "get_class_property_info_test_m11_09.ets", "get_class_property_info_test_m11_10.ets",
833 "get_class_property_info_test_m11_11.ets", "get_class_property_info_test_m11_12.ets",
834 "get_class_property_info_test_m11_13.ets", "get_class_property_info_test_m11_14.ets"};
835
836 auto filePaths = CreateTempFile(fileNames3, fileContents3);
837 std::vector<ark::es2panda::SourceFile> sourceFiles;
838
839 for (size_t i = 0; i < filePaths.size(); ++i) {
840 sourceFiles.emplace_back(filePaths[i], fileContents3[i]);
841 }
842 ASSERT_EQ(fileNames3.size(), sourceFiles.size());
843
844 Initializer initializer;
845 size_t sourceIndex = 10;
846 size_t tokenOffset = 50;
847 auto filePath = std::string {sourceFiles[sourceIndex].filePath};
848 auto fileContent = std::string {sourceFiles[sourceIndex].source};
849 auto context = initializer.CreateContext(filePath.c_str(), ES2PANDA_STATE_CHECKED, fileContent.c_str());
850 auto infos = ark::es2panda::lsp::GetClassPropertyInfo(context, tokenOffset, true);
851 ASSERT_EQ(EXPECTED_CLASS_COUNT, infos.size());
852 ASSERT_EQ(EXPECTED_PROP_COUNT, infos[0].properties.size());
853 CheckClassPropertiesMatch(infos[0].properties, expectedResult11);
854 }
855
856 std::vector<std::tuple<std::string, size_t, size_t, std::string, std::vector<std::string>>> expectedResult12 = {
857 {"name", 24, 37, "classField", {"private"}},
858 {"age", 49, 57, "classField", {"private"}},
859 {"doTask", 69, 86, "classField", {"private"}}};
860
TEST_F(LspGetClassPropertyInfoTests,GetClassPropertyInfoMethod12)861 TEST_F(LspGetClassPropertyInfoTests, GetClassPropertyInfoMethod12)
862 {
863 constexpr size_t EXPECTED_CLASS_COUNT = 1;
864 constexpr size_t EXPECTED_PROP_COUNT = 3;
865
866 std::vector<std::string> fileNames3 = {
867 "get_class_property_info_test_m12_01.ets", "get_class_property_info_test_m12_02.ets",
868 "get_class_property_info_test_m12_03.ets", "get_class_property_info_test_m12_04.ets",
869 "get_class_property_info_test_m12_05.ets", "get_class_property_info_test_m12_06.ets",
870 "get_class_property_info_test_m12_07.ets", "get_class_property_info_test_m12_08.ets",
871 "get_class_property_info_test_m12_09.ets", "get_class_property_info_test_m12_10.ets",
872 "get_class_property_info_test_m12_11.ets", "get_class_property_info_test_m12_12.ets",
873 "get_class_property_info_test_m12_13.ets", "get_class_property_info_test_m12_14.ets"};
874
875 auto filePaths = CreateTempFile(fileNames3, fileContents3);
876 std::vector<ark::es2panda::SourceFile> sourceFiles;
877
878 for (size_t i = 0; i < filePaths.size(); ++i) {
879 sourceFiles.emplace_back(filePaths[i], fileContents3[i]);
880 }
881 ASSERT_EQ(fileNames3.size(), sourceFiles.size());
882
883 Initializer initializer;
884 size_t sourceIndex = 11;
885 size_t tokenOffset = 87;
886 auto filePath = std::string {sourceFiles[sourceIndex].filePath};
887 auto fileContent = std::string {sourceFiles[sourceIndex].source};
888 auto context = initializer.CreateContext(filePath.c_str(), ES2PANDA_STATE_CHECKED, fileContent.c_str());
889 auto infos = ark::es2panda::lsp::GetClassPropertyInfo(context, tokenOffset, true);
890 ASSERT_EQ(EXPECTED_CLASS_COUNT, infos.size());
891 ASSERT_EQ(EXPECTED_PROP_COUNT, infos[0].properties.size());
892 CheckClassPropertiesMatch(infos[0].properties, expectedResult12);
893 }
894
895 std::vector<std::tuple<std::string, size_t, size_t, std::string, std::vector<std::string>>> expectedResult13 = {
896 {"aa", 216, 227, "classField", {"public"}}};
897
TEST_F(LspGetClassPropertyInfoTests,GetClassPropertyInfoMethod13)898 TEST_F(LspGetClassPropertyInfoTests, GetClassPropertyInfoMethod13)
899 {
900 constexpr size_t EXPECTED_CLASS_COUNT = 2;
901 constexpr size_t EXPECTED_PROP_COUNT = 1;
902
903 std::vector<std::string> fileNames3 = {
904 "get_class_property_info_test_m13_01.ets", "get_class_property_info_test_m13_02.ets",
905 "get_class_property_info_test_m13_03.ets", "get_class_property_info_test_m13_04.ets",
906 "get_class_property_info_test_m13_05.ets", "get_class_property_info_test_m13_06.ets",
907 "get_class_property_info_test_m13_07.ets", "get_class_property_info_test_m13_08.ets",
908 "get_class_property_info_test_m13_09.ets", "get_class_property_info_test_m13_10.ets",
909 "get_class_property_info_test_m13_11.ets", "get_class_property_info_test_m13_12.ets",
910 "get_class_property_info_test_m13_13.ets", "get_class_property_info_test_m13_14.ets"};
911
912 auto filePaths = CreateTempFile(fileNames3, fileContents3);
913 std::vector<ark::es2panda::SourceFile> sourceFiles;
914
915 for (size_t i = 0; i < filePaths.size(); ++i) {
916 sourceFiles.emplace_back(filePaths[i], fileContents3[i]);
917 }
918 ASSERT_EQ(fileNames3.size(), sourceFiles.size());
919
920 Initializer initializer;
921 size_t sourceIndex = 12;
922 size_t tokenOffset = 232;
923 auto filePath = std::string {sourceFiles[sourceIndex].filePath};
924 auto fileContent = std::string {sourceFiles[sourceIndex].source};
925 auto context = initializer.CreateContext(filePath.c_str(), ES2PANDA_STATE_CHECKED, fileContent.c_str());
926 auto infos = ark::es2panda::lsp::GetClassPropertyInfo(context, tokenOffset, true);
927 ASSERT_EQ(EXPECTED_CLASS_COUNT, infos.size());
928 ASSERT_EQ(EXPECTED_PROP_COUNT, infos[0].properties.size());
929 CheckClassPropertiesMatch(infos[0].properties, expectedResult13);
930 }
931
932 std::vector<std::tuple<std::string, size_t, size_t, std::string, std::vector<std::string>>> expectedResult14 = {
933 {"subscriber", 144, 210, "classField", {"public"}}, {"subscribeInfo", 221, 254, "classField", {"public"}}};
934
TEST_F(LspGetClassPropertyInfoTests,GetClassPropertyInfoMethod14)935 TEST_F(LspGetClassPropertyInfoTests, GetClassPropertyInfoMethod14)
936 {
937 constexpr size_t EXPECTED_CLASS_COUNT = 1;
938 constexpr size_t EXPECTED_PROP_COUNT = 2;
939
940 std::vector<std::string> fileNames3 = {
941 "get_class_property_info_test_m14_01.ets", "get_class_property_info_test_m14_02.ets",
942 "get_class_property_info_test_m14_03.ets", "get_class_property_info_test_m14_04.ets",
943 "get_class_property_info_test_m14_05.ets", "get_class_property_info_test_m14_06.ets",
944 "get_class_property_info_test_m14_07.ets", "get_class_property_info_test_m14_08.ets",
945 "get_class_property_info_test_m14_09.ets", "get_class_property_info_test_m14_10.ets",
946 "get_class_property_info_test_m14_11.ets", "get_class_property_info_test_m14_12.ets",
947 "get_class_property_info_test_m14_13.ets", "get_class_property_info_test_m14_14.ets"};
948
949 auto filePaths = CreateTempFile(fileNames3, fileContents3);
950 std::vector<ark::es2panda::SourceFile> sourceFiles;
951
952 for (size_t i = 0; i < filePaths.size(); ++i) {
953 sourceFiles.emplace_back(filePaths[i], fileContents3[i]);
954 }
955 ASSERT_EQ(fileNames3.size(), sourceFiles.size());
956
957 Initializer initializer;
958 size_t sourceIndex = 13;
959 size_t tokenOffset = 256;
960 auto filePath = std::string {sourceFiles[sourceIndex].filePath};
961 auto fileContent = std::string {sourceFiles[sourceIndex].source};
962 auto context = initializer.CreateContext(filePath.c_str(), ES2PANDA_STATE_CHECKED, fileContent.c_str());
963 auto infos = ark::es2panda::lsp::GetClassPropertyInfo(context, tokenOffset, true);
964 ASSERT_EQ(EXPECTED_CLASS_COUNT, infos.size());
965 ASSERT_EQ(EXPECTED_PROP_COUNT, infos[0].properties.size());
966 CheckClassPropertiesMatch(infos[0].properties, expectedResult14);
967 }
968
969 // NOLINTEND
970 } // namespace