• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /**
2  * Copyright (c) 2024 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 
16 #include "ast_verifier_test.h"
17 #include "macros.h"
18 #include "util/ast-builders/classDefinitionBuilder.h"
19 #include "util/ast-builders/binaryExpressionBuilder.h"
20 #include "util/ast-builders/classPropertyBuilder.h"
21 #include "util/ast-builders/identifierBuilder.h"
22 #include "util/ast-builders/numberLiteralBuilder.h"
23 #include "util/ast-builders/awaitExpressionBuilder.h"
24 #include "util/ast-builders/bigintLiteralBuilder.h"
25 #include "util/ast-builders/blockExpressionBuilder.h"
26 #include "util/ast-builders/blockStatementBuilder.h"
27 #include "util/ast-builders/booleanLiteralBuilder.h"
28 #include "util/ast-builders/breakStatementBuilder.h"
29 #include "util/ast-builders/callExpressionBuilder.h"
30 #include "util/ast-builders/superExpressionBuilder.h"
31 #include "util/ast-builders/charLiteralBuilder.h"
32 #include "util/ast-builders/classDeclarationBuilder.h"
33 #include "util/ast-builders/etsTypeReferenceBuilder.h"
34 #include "util/ast-builders/etsTypeReferencePartBuilder.h"
35 #include "util/ast-builders/exportDefaultDeclarationBuilder.h"
36 #include "util/ast-builders/expressionStatementBuilder.h"
37 #include "util/ast-builders/ifStatementBuilder.h"
38 #include "util/ast-builders/importDeclarationBuilder.h"
39 #include "util/ast-builders/importSpecifierBuilder.h"
40 #include "util/ast-builders/memberExpressionBuilder.h"
41 #include "util/ast-builders/thisExpressionBuilder.h"
42 #include "util/ast-builders/methodDefinitionBuilder.h"
43 #include "util/ast-builders/functionExpressionBuilder.h"
44 #include "util/ast-builders/scriptFunctionBuilder.h"
45 #include "util/ast-builders/stringLiteralBuilder.h"
46 #include "util/ast-builders/switchStatementBuilder.h"
47 #include "util/ast-builders/tsClassImplementsBuilder.h"
48 #include "util/ast-builders/tsEnumDeclarationBuilder.h"
49 #include "util/ast-builders/tsEnumMemberBuilder.h"
50 #include "util/ast-builders/tsTypeParameterInstantiationBuilder.h"
51 #include "util/ast-builders/unaryExpressionBuilder.h"
52 #include "util/ast-builders/undefinedLiteralBuilder.h"
53 #include "util/ast-builders/updateExpressionBuilder.h"
54 #include "util/ast-builders/variableDeclarationBuilder.h"
55 #include "util/ast-builders/variableDeclaratorBuilder.h"
56 #include "util/ast-builders/whileStatementBuilder.h"
57 #include "util/ast-builders/switchCaseStatementBuilder.h"
58 
59 #include <gtest/gtest.h>
60 
61 using ark::es2panda::ir::AwaitExpressionBuilder;
62 using ark::es2panda::ir::BigIntLiteralBuilder;
63 using ark::es2panda::ir::BinaryExpressionBuilder;
64 using ark::es2panda::ir::BlockExpressionBuilder;
65 using ark::es2panda::ir::BlockStatementBuilder;
66 using ark::es2panda::ir::BooleanLiteralBuilder;
67 using ark::es2panda::ir::BreakStatementBuilder;
68 using ark::es2panda::ir::CallExpressionBuilder;
69 using ark::es2panda::ir::CharLiteralBuilder;
70 using ark::es2panda::ir::ClassDeclarationBuilder;
71 using ark::es2panda::ir::ClassDefinitionBuilder;
72 using ark::es2panda::ir::ClassPropertyBuilder;
73 using ark::es2panda::ir::ETSTypeReferenceBuilder;
74 using ark::es2panda::ir::ETSTypeReferencePartBuilder;
75 using ark::es2panda::ir::ExportDefaultDeclarationBuilder;
76 using ark::es2panda::ir::ExpressionStatementBuilder;
77 using ark::es2panda::ir::FunctionExpressionBuilder;
78 using ark::es2panda::ir::IdentifierBuilder;
79 using ark::es2panda::ir::IfStatementBuilder;
80 using ark::es2panda::ir::ImportDeclarationBuilder;
81 using ark::es2panda::ir::ImportSpecifierBuilder;
82 using ark::es2panda::ir::MemberExpressionBuilder;
83 using ark::es2panda::ir::MethodDefinitionBuilder;
84 using ark::es2panda::ir::NumberLiteralBuilder;
85 using ark::es2panda::ir::ScriptFunctionBuilder;
86 using ark::es2panda::ir::StringLiteralBuilder;
87 using ark::es2panda::ir::SuperExpressionBuilder;
88 using ark::es2panda::ir::SwitchCaseStatementBuilder;
89 using ark::es2panda::ir::SwitchStatementBuilder;
90 using ark::es2panda::ir::ThisExpressionBuilder;
91 using ark::es2panda::ir::TSClassImplementsBuilder;
92 using ark::es2panda::ir::TSEnumDeclarationBuilder;
93 using ark::es2panda::ir::TSEnumMemberBuilder;
94 using ark::es2panda::ir::TSTypeParameterInstantiationBuilder;
95 using ark::es2panda::ir::UnaryExpressionBuilder;
96 using ark::es2panda::ir::UndefinedLiteralBuilder;
97 using ark::es2panda::ir::UpdateExpressionBuilder;
98 using ark::es2panda::ir::VariableDeclarationBuilder;
99 using ark::es2panda::ir::VariableDeclaratorBuilder;
100 using ark::es2panda::ir::WhileStatementBuilder;
101 
102 namespace {
TEST_F(ASTVerifierTest,arrowFunctionExpressionBuild)103 TEST_F(ASTVerifierTest, arrowFunctionExpressionBuild)
104 {
105     auto left = NumberLiteralBuilder(Allocator()).SetValue("10").Build();
106     auto right = NumberLiteralBuilder(Allocator()).SetValue("5").Build();
107     auto binaryExpr = BinaryExpressionBuilder(Allocator())
108                           .SetLeft(left)
109                           .SetRight(right)
110                           .SetOperator(ark::es2panda::lexer::TokenType::PUNCTUATOR_PLUS)
111                           .Build();
112     auto awaitExpr = AwaitExpressionBuilder(Allocator()).SetArgument(binaryExpr).Build();
113     ASSERT_TRUE(awaitExpr->IsAwaitExpression());
114 }
115 
TEST_F(ASTVerifierTest,awaitExpressionBuild)116 TEST_F(ASTVerifierTest, awaitExpressionBuild)
117 {
118     auto left = NumberLiteralBuilder(Allocator()).SetValue("10").Build();
119     auto right = NumberLiteralBuilder(Allocator()).SetValue("5").Build();
120     auto binaryExpr = BinaryExpressionBuilder(Allocator())
121                           .SetLeft(left)
122                           .SetRight(right)
123                           .SetOperator(ark::es2panda::lexer::TokenType::PUNCTUATOR_PLUS)
124                           .Build();
125     auto awaitExpr = AwaitExpressionBuilder(Allocator()).SetArgument(binaryExpr).Build();
126     ASSERT_TRUE(awaitExpr->IsAwaitExpression());
127 }
128 
TEST_F(ASTVerifierTest,bigintLiteralBuild)129 TEST_F(ASTVerifierTest, bigintLiteralBuild)
130 {
131     auto bigint = BigIntLiteralBuilder(Allocator()).SetValue("123").Build();
132     ASSERT_TRUE(bigint->IsBigIntLiteral());
133 }
134 
TEST_F(ASTVerifierTest,binaryExpressionBuild)135 TEST_F(ASTVerifierTest, binaryExpressionBuild)
136 {
137     auto left = NumberLiteralBuilder(Allocator()).SetValue("10").Build();
138     auto right = NumberLiteralBuilder(Allocator()).SetValue("5").Build();
139     auto binaryExpr = BinaryExpressionBuilder(Allocator())
140                           .SetLeft(left)
141                           .SetRight(right)
142                           .SetOperator(ark::es2panda::lexer::TokenType::PUNCTUATOR_PLUS)
143                           .Build();
144     ASSERT_TRUE(binaryExpr->IsBinaryExpression());
145 }
146 
TEST_F(ASTVerifierTest,blockExpressionBuild)147 TEST_F(ASTVerifierTest, blockExpressionBuild)
148 {
149     auto left = NumberLiteralBuilder(Allocator()).SetValue("10").Build();
150     auto right = NumberLiteralBuilder(Allocator()).SetValue("5").Build();
151     auto binaryExpr = BinaryExpressionBuilder(Allocator())
152                           .SetLeft(left)
153                           .SetRight(right)
154                           .SetOperator(ark::es2panda::lexer::TokenType::PUNCTUATOR_PLUS)
155                           .Build();
156     auto exprStmnt = ExpressionStatementBuilder(Allocator()).SetExpression(binaryExpr).Build();
157     auto blockExpr = BlockExpressionBuilder(Allocator()).AddStatement(exprStmnt).Build();
158     ASSERT_TRUE(blockExpr->IsBlockExpression());
159 }
160 
TEST_F(ASTVerifierTest,blockStatementBuild)161 TEST_F(ASTVerifierTest, blockStatementBuild)
162 {
163     auto left = NumberLiteralBuilder(Allocator()).SetValue("10").Build();
164     auto right = NumberLiteralBuilder(Allocator()).SetValue("5").Build();
165     auto binaryExpr = BinaryExpressionBuilder(Allocator())
166                           .SetLeft(left)
167                           .SetRight(right)
168                           .SetOperator(ark::es2panda::lexer::TokenType::PUNCTUATOR_PLUS)
169                           .Build();
170     auto exprStmnt = ExpressionStatementBuilder(Allocator()).SetExpression(binaryExpr).Build();
171     auto blockStmnt = BlockStatementBuilder(Allocator()).AddStatement(exprStmnt).Build();
172     ASSERT_TRUE(blockStmnt->IsBlockStatement());
173 }
174 
TEST_F(ASTVerifierTest,booleanLiteralBuild)175 TEST_F(ASTVerifierTest, booleanLiteralBuild)
176 {
177     auto boolLiteral = BooleanLiteralBuilder(Allocator()).SetValue(true).Build();
178     ASSERT_TRUE(boolLiteral->IsBooleanLiteral());
179 }
180 
TEST_F(ASTVerifierTest,breakStatementBuild)181 TEST_F(ASTVerifierTest, breakStatementBuild)
182 {
183     auto breakStmnt = BreakStatementBuilder(Allocator()).Build();
184     ASSERT_TRUE(breakStmnt->IsBreakStatement());
185 }
186 
TEST_F(ASTVerifierTest,callExpressionBuild)187 TEST_F(ASTVerifierTest, callExpressionBuild)
188 {
189     auto superExpr = SuperExpressionBuilder(Allocator()).Build();
190     auto callExpr = CallExpressionBuilder(Allocator()).SetCallee(superExpr).Build();
191     ASSERT_TRUE(callExpr->IsCallExpression());
192 }
193 
TEST_F(ASTVerifierTest,charLiteralBuild)194 TEST_F(ASTVerifierTest, charLiteralBuild)
195 {
196     // Create char literal with default value u0000
197     auto charLiteral = CharLiteralBuilder(Allocator()).Build();
198     ASSERT_TRUE(charLiteral->IsCharLiteral());
199 }
200 
TEST_F(ASTVerifierTest,classDeclarationBuild)201 TEST_F(ASTVerifierTest, classDeclarationBuild)
202 {
203     auto id = IdentifierBuilder(Allocator()).SetName("a").Build();
204     auto number = NumberLiteralBuilder(Allocator()).SetValue("10").Build();
205     auto classProperty = ClassPropertyBuilder(Allocator())
206                              .SetKey(id)
207                              .SetValue(number)
208                              .AddModifier(ark::es2panda::ir::ModifierFlags::PRIVATE)
209                              .Build();
210 
211     auto classId = IdentifierBuilder(Allocator()).SetName("A").Build();
212     auto classDef = ClassDefinitionBuilder(Allocator()).SetIdentifier(classId).AddProperty(classProperty).Build();
213     auto classDecl = ClassDeclarationBuilder(Allocator()).SetDefinition(classDef).Build();
214     ASSERT_TRUE(classDecl->IsClassDeclaration());
215 }
216 
TEST_F(ASTVerifierTest,etsTypeReferenceBuild)217 TEST_F(ASTVerifierTest, etsTypeReferenceBuild)
218 {
219     auto id = IdentifierBuilder(Allocator()).SetName("a").Build();
220     auto etsTypeReferencePart =
221         ETSTypeReferencePartBuilder(Allocator()).SetName(id).SetTypeParams(nullptr).SetPrev(nullptr).Build();
222     auto etsTypeReference = ETSTypeReferenceBuilder(Allocator()).SetETSTypeReferencePart(etsTypeReferencePart).Build();
223     ASSERT_TRUE(etsTypeReference->IsETSTypeReference());
224 }
225 
TEST_F(ASTVerifierTest,exportDefaultDeclarationBuild)226 TEST_F(ASTVerifierTest, exportDefaultDeclarationBuild)
227 {
228     auto idParent = IdentifierBuilder(Allocator()).SetName("parent").Build();
229     auto id = IdentifierBuilder(Allocator()).SetName("a").SetParent<IdentifierBuilder>(idParent).Build();
230     auto number = NumberLiteralBuilder(Allocator()).SetValue("10").Build();
231     auto classProperty = ClassPropertyBuilder(Allocator())
232                              .SetKey(id)
233                              .SetValue(number)
234                              .AddModifier(ark::es2panda::ir::ModifierFlags::PRIVATE)
235                              .Build();
236 
237     auto classId = IdentifierBuilder(Allocator()).SetName("A").Build();
238     auto classDef = ClassDefinitionBuilder(Allocator()).SetIdentifier(classId).AddProperty(classProperty).Build();
239     auto classDecl = ClassDeclarationBuilder(Allocator()).SetDefinition(classDef).Build();
240     auto exportDefaultDecl =
241         ExportDefaultDeclarationBuilder(Allocator()).SetDeclaration(classDecl).SetExportEquals(true).Build();
242     ASSERT_TRUE(exportDefaultDecl->IsExportDefaultDeclaration());
243 }
244 
TEST_F(ASTVerifierTest,expressionStatementBuild)245 TEST_F(ASTVerifierTest, expressionStatementBuild)
246 {
247     auto left = NumberLiteralBuilder(Allocator()).SetValue("10").Build();
248     auto right = NumberLiteralBuilder(Allocator()).SetValue("5").Build();
249     auto binaryExpr = BinaryExpressionBuilder(Allocator())
250                           .SetLeft(left)
251                           .SetRight(right)
252                           .SetOperator(ark::es2panda::lexer::TokenType::PUNCTUATOR_PLUS)
253                           .Build();
254     auto exprStmnt = ExpressionStatementBuilder(Allocator()).SetExpression(binaryExpr).Build();
255     ASSERT_TRUE(exprStmnt->IsExpressionStatement());
256 }
257 
TEST_F(ASTVerifierTest,ifStatementBuild)258 TEST_F(ASTVerifierTest, ifStatementBuild)
259 {
260     auto left = NumberLiteralBuilder(Allocator()).SetValue("10").Build();
261     auto right = NumberLiteralBuilder(Allocator()).SetValue("5").Build();
262     auto binaryExpr = BinaryExpressionBuilder(Allocator())
263                           .SetLeft(left)
264                           .SetRight(right)
265                           .SetOperator(ark::es2panda::lexer::TokenType::PUNCTUATOR_PLUS)
266                           .Build();
267     auto consStmnt = ExpressionStatementBuilder(Allocator()).SetExpression(binaryExpr).Build();
268     auto alterStmnt = ExpressionStatementBuilder(Allocator()).SetExpression(binaryExpr).Build();
269     auto ifStmnt =
270         IfStatementBuilder(Allocator()).SetTest(binaryExpr).SetConsequent(consStmnt).SetAlternate(alterStmnt).Build();
271     ASSERT_TRUE(ifStmnt->IsIfStatement());
272 }
273 
TEST_F(ASTVerifierTest,memberExpressionBuild)274 TEST_F(ASTVerifierTest, memberExpressionBuild)
275 {
276     auto member = NumberLiteralBuilder(Allocator()).SetValue("10").Build();
277     auto thisExpr = ThisExpressionBuilder(Allocator()).Build();
278     auto memberExpression = MemberExpressionBuilder(Allocator())
279                                 .SetObject(thisExpr)
280                                 .SetProperty(member)
281                                 .SetKind(ark::es2panda::ir::MemberExpressionKind::PROPERTY_ACCESS)
282                                 .Build();
283     ASSERT_TRUE(memberExpression->IsMemberExpression());
284 }
285 
TEST_F(ASTVerifierTest,methodDefinitionBuild)286 TEST_F(ASTVerifierTest, methodDefinitionBuild)
287 {
288     auto id = IdentifierBuilder(Allocator()).SetName("a").Build();
289     ark::ArenaVector<ark::es2panda::ir::Expression *> params(Allocator()->Adapter());
290     auto signature = ark::es2panda::ir::FunctionSignature(nullptr, std::move(params), nullptr);
291     auto func = ScriptFunctionBuilder(Allocator()).SetSignature(&signature).Build();
292     auto funcExpr = FunctionExpressionBuilder(Allocator()).SetFunction(func).Build();
293     auto methodDef = MethodDefinitionBuilder(Allocator())
294                          .SetKey(id)
295                          .SetMethodDefinitionKind(ark::es2panda::ir::MethodDefinitionKind::METHOD)
296                          .SetModifierFlags(ark::es2panda::ir::ModifierFlags::PUBLIC)
297                          .SetValue(funcExpr)
298                          .Build();
299     ASSERT_TRUE(methodDef->IsMethodDefinition());
300 }
301 
TEST_F(ASTVerifierTest,stringLiteralBuild)302 TEST_F(ASTVerifierTest, stringLiteralBuild)
303 {
304     auto stringLiteral = StringLiteralBuilder(Allocator()).SetValue("qwe").Build();
305     ASSERT_TRUE(stringLiteral->IsStringLiteral());
306 }
307 
TEST_F(ASTVerifierTest,tsClassImplementsBuild)308 TEST_F(ASTVerifierTest, tsClassImplementsBuild)
309 {
310     auto left = NumberLiteralBuilder(Allocator()).SetValue("10").Build();
311     auto right = NumberLiteralBuilder(Allocator()).SetValue("5").Build();
312     auto binaryExpr = BinaryExpressionBuilder(Allocator())
313                           .SetLeft(left)
314                           .SetRight(right)
315                           .SetOperator(ark::es2panda::lexer::TokenType::PUNCTUATOR_PLUS)
316                           .Build();
317     ark::ArenaVector<ark::es2panda::ir::TypeNode *> types(Allocator()->Adapter());
318     auto typeParams = TSTypeParameterInstantiationBuilder(Allocator()).SetParams(std::move(types)).Build();
319     auto tsClassImpl =
320         TSClassImplementsBuilder(Allocator()).SetExpression(binaryExpr).SetTypeParameters(typeParams).Build();
321     ASSERT_TRUE(tsClassImpl->IsTSClassImplements());
322 }
323 
TEST_F(ASTVerifierTest,switchStatementBuild)324 TEST_F(ASTVerifierTest, switchStatementBuild)
325 {
326     auto left = NumberLiteralBuilder(Allocator()).SetValue("10").Build();
327     auto right = NumberLiteralBuilder(Allocator()).SetValue("5").Build();
328     auto binaryExpr = BinaryExpressionBuilder(Allocator())
329                           .SetLeft(left)
330                           .SetRight(right)
331                           .SetOperator(ark::es2panda::lexer::TokenType::PUNCTUATOR_PLUS)
332                           .Build();
333     auto consStmnt = ExpressionStatementBuilder(Allocator()).SetExpression(binaryExpr).Build();
334 
335     auto thisExpr = ThisExpressionBuilder(Allocator()).Build();
336     ark::ArenaVector<ark::es2panda::ir::SwitchCaseStatement *> cases(Allocator()->Adapter());
337     ark::ArenaVector<ark::es2panda::ir::Statement *> conseq(Allocator()->Adapter());
338     conseq.push_back(consStmnt);
339     auto switchCase = SwitchCaseStatementBuilder(Allocator()).SetTest(binaryExpr).SetConsequent(conseq).Build();
340     cases.push_back(switchCase);
341     auto switchStmnt = SwitchStatementBuilder(Allocator()).SetCases(cases).SetDiscriminant(thisExpr).Build();
342     ASSERT_TRUE(switchStmnt->IsSwitchStatement());
343 }
344 
TEST_F(ASTVerifierTest,enumBuild)345 TEST_F(ASTVerifierTest, enumBuild)
346 {
347     auto id = IdentifierBuilder(Allocator()).SetName("a").Build();
348     auto idMember = IdentifierBuilder(Allocator()).SetName("s").Build();
349     auto init = NumberLiteralBuilder(Allocator()).SetValue("10").Build();
350     auto enumMember = TSEnumMemberBuilder(Allocator()).SetKey(idMember).SetInit(init).Build();
351     auto enumDecl = TSEnumDeclarationBuilder(Allocator())
352                         .SetKey(id)
353                         .SetIsConst(false)
354                         .SetIsDeclare(true)
355                         .SetIsConst(false)
356                         .AddMember(enumMember)
357                         .Build();
358     ASSERT_TRUE(enumDecl->IsTSEnumDeclaration());
359 }
360 
TEST_F(ASTVerifierTest,unaryExpressionBuild)361 TEST_F(ASTVerifierTest, unaryExpressionBuild)
362 {
363     auto id = IdentifierBuilder(Allocator()).SetName("a").Build();
364     auto unaryExpr = UnaryExpressionBuilder(Allocator())
365                          .SetArgument(id)
366                          .SetOperator(ark::es2panda::lexer::TokenType::PUNCTUATOR_MINUS)
367                          .Build();
368     ASSERT_TRUE(unaryExpr->IsUnaryExpression());
369 }
370 
TEST_F(ASTVerifierTest,undefinedLiteralBuild)371 TEST_F(ASTVerifierTest, undefinedLiteralBuild)
372 {
373     auto undefLiteral = UndefinedLiteralBuilder(Allocator()).Build();
374     ASSERT_TRUE(undefLiteral->IsUndefinedLiteral());
375 }
376 
TEST_F(ASTVerifierTest,updateExpressionBuild)377 TEST_F(ASTVerifierTest, updateExpressionBuild)
378 {
379     auto id = IdentifierBuilder(Allocator()).SetName("a").Build();
380     auto updateExpr = UpdateExpressionBuilder(Allocator())
381                           .SetArgument(id)
382                           .SetOperator(ark::es2panda::lexer::TokenType::PUNCTUATOR_MINUS_MINUS)
383                           .SetIsPrefix(true)
384                           .Build();
385     ASSERT_TRUE(updateExpr->IsUpdateExpression());
386 }
387 
TEST_F(ASTVerifierTest,VariableDeclarationBuild)388 TEST_F(ASTVerifierTest, VariableDeclarationBuild)
389 {
390     auto idDeclarator = IdentifierBuilder(Allocator()).SetName("a").Build();
391     auto init = NumberLiteralBuilder(Allocator()).SetValue("10").Build();
392     auto varDeclarator = VariableDeclaratorBuilder(Allocator()).SetId(idDeclarator).SetInit(init).Build();
393     ark::ArenaVector<ark::es2panda::ir::VariableDeclarator *> declarators(Allocator()->Adapter());
394     declarators.push_back(varDeclarator);
395     auto varDecl = VariableDeclarationBuilder(Allocator())
396                        .SetDeclarators(std::move(declarators))
397                        .SetKind(ark::es2panda::ir::VariableDeclaration::VariableDeclarationKind::LET)
398                        .Build();
399     ASSERT_TRUE(varDecl->IsVariableDeclaration());
400 }
401 
TEST_F(ASTVerifierTest,whileStatementBuild)402 TEST_F(ASTVerifierTest, whileStatementBuild)
403 {
404     auto left = NumberLiteralBuilder(Allocator()).SetValue("10").Build();
405     auto right = NumberLiteralBuilder(Allocator()).SetValue("5").Build();
406     auto binaryExpr = BinaryExpressionBuilder(Allocator())
407                           .SetLeft(left)
408                           .SetRight(right)
409                           .SetOperator(ark::es2panda::lexer::TokenType::PUNCTUATOR_PLUS)
410                           .Build();
411     auto exprStmnt = ExpressionStatementBuilder(Allocator()).SetExpression(binaryExpr).Build();
412     auto whileStmnt = WhileStatementBuilder(Allocator()).SetTest(binaryExpr).SetBody(exprStmnt).Build();
413     ASSERT_TRUE(whileStmnt->IsWhileStatement());
414 }
415 
TEST_F(ASTVerifierTest,multipleImportTest)416 TEST_F(ASTVerifierTest, multipleImportTest)
417 {
418     auto importedIdent = IdentifierBuilder(Allocator()).SetName("A").Build();
419     auto localIdent = IdentifierBuilder(Allocator()).SetName("A").Build();
420     auto stringLiteral = StringLiteralBuilder(Allocator()).SetValue("test").Build();
421     auto importSpecifier = ImportSpecifierBuilder(Allocator()).SetImported(importedIdent).SetLocal(localIdent).Build();
422     auto importDecl =
423         ImportDeclarationBuilder(Allocator()).SetSource(stringLiteral).AddSpecifier(importSpecifier).Build();
424     ASSERT_TRUE(importDecl->IsImportDeclaration());
425 
426     auto classId = IdentifierBuilder(Allocator()).SetName("B").Build();
427     auto classDef = ClassDefinitionBuilder(Allocator()).SetIdentifier(classId).SetSuperClass(localIdent).Build();
428     auto classDecl = ClassDeclarationBuilder(Allocator()).SetDefinition(classDef).Build();
429     ASSERT_TRUE(classDecl->IsClassDeclaration());
430 }
431 }  // anonymous namespace
432