1ca0551cfSopenharmony_ci/*
2ca0551cfSopenharmony_ci * Copyright (c) 2022 Huawei Device Co., Ltd.
3ca0551cfSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
4ca0551cfSopenharmony_ci * you may not use this file except in compliance with the License.
5ca0551cfSopenharmony_ci * You may obtain a copy of the License at
6ca0551cfSopenharmony_ci *
7ca0551cfSopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
8ca0551cfSopenharmony_ci *
9ca0551cfSopenharmony_ci * Unless required by applicable law or agreed to in writing, software
10ca0551cfSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
11ca0551cfSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12ca0551cfSopenharmony_ci * See the License for the specific language governing permissions and
13ca0551cfSopenharmony_ci * limitations under the License.
14ca0551cfSopenharmony_ci */
15ca0551cfSopenharmony_ci
16ca0551cfSopenharmony_ci#include <gtest/gtest.h>
17ca0551cfSopenharmony_ci#define private public
18ca0551cfSopenharmony_ci#define protected public
19ca0551cfSopenharmony_ci#include "parser/lexer.h"
20ca0551cfSopenharmony_ci
21ca0551cfSopenharmony_ciusing namespace testing;
22ca0551cfSopenharmony_ciusing namespace testing::ext;
23ca0551cfSopenharmony_cinamespace OHOS {
24ca0551cfSopenharmony_cinamespace Idl {
25ca0551cfSopenharmony_ci
26ca0551cfSopenharmony_ciclass LexerUnitTest : public testing::Test {
27ca0551cfSopenharmony_cipublic:
28ca0551cfSopenharmony_ci    LexerUnitTest() {}
29ca0551cfSopenharmony_ci
30ca0551cfSopenharmony_ci    virtual ~LexerUnitTest() {}
31ca0551cfSopenharmony_ci
32ca0551cfSopenharmony_ci    static void SetUpTestCase();
33ca0551cfSopenharmony_ci
34ca0551cfSopenharmony_ci    static void TearDownTestCase();
35ca0551cfSopenharmony_ci
36ca0551cfSopenharmony_ci    void SetUp();
37ca0551cfSopenharmony_ci
38ca0551cfSopenharmony_ci    void TearDown();
39ca0551cfSopenharmony_ci};
40ca0551cfSopenharmony_ci
41ca0551cfSopenharmony_civoid LexerUnitTest::SetUpTestCase() {}
42ca0551cfSopenharmony_ci
43ca0551cfSopenharmony_civoid LexerUnitTest::TearDownTestCase() {}
44ca0551cfSopenharmony_ci
45ca0551cfSopenharmony_civoid LexerUnitTest::SetUp() {}
46ca0551cfSopenharmony_ci
47ca0551cfSopenharmony_civoid LexerUnitTest::TearDown() {}
48ca0551cfSopenharmony_ci
49ca0551cfSopenharmony_ci/*
50ca0551cfSopenharmony_ci * @tc.name: OpenSourceFileTest_0100
51ca0551cfSopenharmony_ci * @tc.desc: test Lexer's OpenSourceFile function return false.
52ca0551cfSopenharmony_ci * @tc.type: FUNC
53ca0551cfSopenharmony_ci * @tc.require:
54ca0551cfSopenharmony_ci */
55ca0551cfSopenharmony_ciHWTEST_F(LexerUnitTest, OpenSourceFileTest_0100, Function | MediumTest | Level1)
56ca0551cfSopenharmony_ci{
57ca0551cfSopenharmony_ci    GTEST_LOG_(INFO)
58ca0551cfSopenharmony_ci        << "LexerUnitTest, OpenSourceFileTest_0100, TestSize.Level1";
59ca0551cfSopenharmony_ci    Lexer imageLexer;
60ca0551cfSopenharmony_ci    String filePath = "";
61ca0551cfSopenharmony_ci    bool result = imageLexer.OpenSourceFile(filePath);
62ca0551cfSopenharmony_ci    EXPECT_EQ(result, false);
63ca0551cfSopenharmony_ci}
64ca0551cfSopenharmony_ci
65ca0551cfSopenharmony_ci/*
66ca0551cfSopenharmony_ci * @tc.name: TokenToCharTest_0100
67ca0551cfSopenharmony_ci * @tc.desc: test the token in Lexer's TokenToChar function is ANGLE_BRACKETS_LEFT.
68ca0551cfSopenharmony_ci * @tc.type: FUNC
69ca0551cfSopenharmony_ci * @tc.require:
70ca0551cfSopenharmony_ci */
71ca0551cfSopenharmony_ciHWTEST_F(LexerUnitTest, TokenToCharTest_0100, Function | MediumTest | Level1)
72ca0551cfSopenharmony_ci{
73ca0551cfSopenharmony_ci    GTEST_LOG_(INFO)
74ca0551cfSopenharmony_ci        << "LexerUnitTest, TokenToCharTest_0100, TestSize.Level1";
75ca0551cfSopenharmony_ci    Lexer imageLexer;
76ca0551cfSopenharmony_ci    Token token = Token::ANGLE_BRACKETS_LEFT;
77ca0551cfSopenharmony_ci    int result = imageLexer.TokenToChar(token);
78ca0551cfSopenharmony_ci    EXPECT_EQ(result, 60);
79ca0551cfSopenharmony_ci}
80ca0551cfSopenharmony_ci
81ca0551cfSopenharmony_ci/*
82ca0551cfSopenharmony_ci * @tc.name: TokenToCharTest_0200
83ca0551cfSopenharmony_ci * @tc.desc: test the token in Lexer's TokenToChar function is ANGLE_BRACKETS_RIGHT.
84ca0551cfSopenharmony_ci * @tc.type: FUNC
85ca0551cfSopenharmony_ci * @tc.require:
86ca0551cfSopenharmony_ci */
87ca0551cfSopenharmony_ciHWTEST_F(LexerUnitTest, TokenToCharTest_0200, Function | MediumTest | Level1)
88ca0551cfSopenharmony_ci{
89ca0551cfSopenharmony_ci    GTEST_LOG_(INFO)
90ca0551cfSopenharmony_ci        << "LexerUnitTest, TokenToCharTest_0200, TestSize.Level1";
91ca0551cfSopenharmony_ci    Lexer imageLexer;
92ca0551cfSopenharmony_ci    Token token = Token::ANGLE_BRACKETS_RIGHT;
93ca0551cfSopenharmony_ci    int result = imageLexer.TokenToChar(token);
94ca0551cfSopenharmony_ci    EXPECT_EQ(result, 62);
95ca0551cfSopenharmony_ci}
96ca0551cfSopenharmony_ci
97ca0551cfSopenharmony_ci/*
98ca0551cfSopenharmony_ci * @tc.name: TokenToCharTest_0300
99ca0551cfSopenharmony_ci * @tc.desc: test the token in Lexer's TokenToChar function is BRACES_LEFT.
100ca0551cfSopenharmony_ci * @tc.type: FUNC
101ca0551cfSopenharmony_ci * @tc.require:
102ca0551cfSopenharmony_ci */
103ca0551cfSopenharmony_ciHWTEST_F(LexerUnitTest, TokenToCharTest_0300, Function | MediumTest | Level1)
104ca0551cfSopenharmony_ci{
105ca0551cfSopenharmony_ci    GTEST_LOG_(INFO)
106ca0551cfSopenharmony_ci        << "LexerUnitTest, TokenToCharTest_0300, TestSize.Level1";
107ca0551cfSopenharmony_ci    Lexer imageLexer;
108ca0551cfSopenharmony_ci    Token token = Token::BRACES_LEFT;
109ca0551cfSopenharmony_ci    int result = imageLexer.TokenToChar(token);
110ca0551cfSopenharmony_ci    EXPECT_EQ(result, 123);
111ca0551cfSopenharmony_ci}
112ca0551cfSopenharmony_ci
113ca0551cfSopenharmony_ci/*
114ca0551cfSopenharmony_ci * @tc.name: TokenToCharTest_0400
115ca0551cfSopenharmony_ci * @tc.desc: test the token in Lexer's TokenToChar function is BRACES_RIGHT.
116ca0551cfSopenharmony_ci * @tc.type: FUNC
117ca0551cfSopenharmony_ci * @tc.require:
118ca0551cfSopenharmony_ci */
119ca0551cfSopenharmony_ciHWTEST_F(LexerUnitTest, TokenToCharTest_0400, Function | MediumTest | Level1)
120ca0551cfSopenharmony_ci{
121ca0551cfSopenharmony_ci    GTEST_LOG_(INFO)
122ca0551cfSopenharmony_ci        << "LexerUnitTest, TokenToCharTest_0400, TestSize.Level1";
123ca0551cfSopenharmony_ci    Lexer imageLexer;
124ca0551cfSopenharmony_ci    Token token = Token::BRACES_RIGHT;
125ca0551cfSopenharmony_ci    int result = imageLexer.TokenToChar(token);
126ca0551cfSopenharmony_ci    EXPECT_EQ(result, 125);
127ca0551cfSopenharmony_ci}
128ca0551cfSopenharmony_ci
129ca0551cfSopenharmony_ci/*
130ca0551cfSopenharmony_ci * @tc.name: TokenToCharTest_0500
131ca0551cfSopenharmony_ci * @tc.desc: test the token in Lexer's TokenToChar function is BRACKETS_LEFT.
132ca0551cfSopenharmony_ci * @tc.type: FUNC
133ca0551cfSopenharmony_ci * @tc.require:
134ca0551cfSopenharmony_ci */
135ca0551cfSopenharmony_ciHWTEST_F(LexerUnitTest, TokenToCharTest_0500, Function | MediumTest | Level1)
136ca0551cfSopenharmony_ci{
137ca0551cfSopenharmony_ci    GTEST_LOG_(INFO)
138ca0551cfSopenharmony_ci        << "LexerUnitTest, TokenToCharTest_0500, TestSize.Level1";
139ca0551cfSopenharmony_ci    Lexer imageLexer;
140ca0551cfSopenharmony_ci    Token token = Token::BRACKETS_LEFT;
141ca0551cfSopenharmony_ci    int result = imageLexer.TokenToChar(token);
142ca0551cfSopenharmony_ci    EXPECT_EQ(result, 91);
143ca0551cfSopenharmony_ci}
144ca0551cfSopenharmony_ci
145ca0551cfSopenharmony_ci/*
146ca0551cfSopenharmony_ci * @tc.name: TokenToCharTest_0600
147ca0551cfSopenharmony_ci * @tc.desc: test the token in Lexer's TokenToChar function is BRACKETS_RIGHT.
148ca0551cfSopenharmony_ci * @tc.type: FUNC
149ca0551cfSopenharmony_ci * @tc.require:
150ca0551cfSopenharmony_ci */
151ca0551cfSopenharmony_ciHWTEST_F(LexerUnitTest, TokenToCharTest_0600, Function | MediumTest | Level1)
152ca0551cfSopenharmony_ci{
153ca0551cfSopenharmony_ci    GTEST_LOG_(INFO)
154ca0551cfSopenharmony_ci        << "LexerUnitTest, TokenToCharTest_0600, TestSize.Level1";
155ca0551cfSopenharmony_ci    Lexer imageLexer;
156ca0551cfSopenharmony_ci    Token token = Token::BRACKETS_RIGHT;
157ca0551cfSopenharmony_ci    int result = imageLexer.TokenToChar(token);
158ca0551cfSopenharmony_ci    EXPECT_EQ(result, 93);
159ca0551cfSopenharmony_ci}
160ca0551cfSopenharmony_ci
161ca0551cfSopenharmony_ci/*
162ca0551cfSopenharmony_ci * @tc.name: TokenToCharTest_0700
163ca0551cfSopenharmony_ci * @tc.desc: test the token in Lexer's TokenToChar function is COMMA.
164ca0551cfSopenharmony_ci * @tc.type: FUNC
165ca0551cfSopenharmony_ci * @tc.require:
166ca0551cfSopenharmony_ci */
167ca0551cfSopenharmony_ciHWTEST_F(LexerUnitTest, TokenToCharTest_0700, Function | MediumTest | Level1)
168ca0551cfSopenharmony_ci{
169ca0551cfSopenharmony_ci    GTEST_LOG_(INFO)
170ca0551cfSopenharmony_ci        << "LexerUnitTest, TokenToCharTest_0700, TestSize.Level1";
171ca0551cfSopenharmony_ci    Lexer imageLexer;
172ca0551cfSopenharmony_ci    Token token = Token::COMMA;
173ca0551cfSopenharmony_ci    int result = imageLexer.TokenToChar(token);
174ca0551cfSopenharmony_ci    EXPECT_EQ(result, 44);
175ca0551cfSopenharmony_ci}
176ca0551cfSopenharmony_ci
177ca0551cfSopenharmony_ci/*
178ca0551cfSopenharmony_ci * @tc.name: TokenToCharTest_0800
179ca0551cfSopenharmony_ci * @tc.desc: test the token in Lexer's TokenToChar function is DOT.
180ca0551cfSopenharmony_ci * @tc.type: FUNC
181ca0551cfSopenharmony_ci * @tc.require:
182ca0551cfSopenharmony_ci */
183ca0551cfSopenharmony_ciHWTEST_F(LexerUnitTest, TokenToCharTest_0800, Function | MediumTest | Level1)
184ca0551cfSopenharmony_ci{
185ca0551cfSopenharmony_ci    GTEST_LOG_(INFO)
186ca0551cfSopenharmony_ci        << "LexerUnitTest, TokenToCharTest_0800, TestSize.Level1";
187ca0551cfSopenharmony_ci    Lexer imageLexer;
188ca0551cfSopenharmony_ci    Token token = Token::DOT;
189ca0551cfSopenharmony_ci    int result = imageLexer.TokenToChar(token);
190ca0551cfSopenharmony_ci    EXPECT_EQ(result, 46);
191ca0551cfSopenharmony_ci}
192ca0551cfSopenharmony_ci
193ca0551cfSopenharmony_ci/*
194ca0551cfSopenharmony_ci * @tc.name: TokenToCharTest_0900
195ca0551cfSopenharmony_ci * @tc.desc: test the token in Lexer's TokenToChar function is PARENTHESES_LEFT.
196ca0551cfSopenharmony_ci * @tc.type: FUNC
197ca0551cfSopenharmony_ci * @tc.require:
198ca0551cfSopenharmony_ci */
199ca0551cfSopenharmony_ciHWTEST_F(LexerUnitTest, TokenToCharTest_0900, Function | MediumTest | Level1)
200ca0551cfSopenharmony_ci{
201ca0551cfSopenharmony_ci    GTEST_LOG_(INFO)
202ca0551cfSopenharmony_ci        << "LexerUnitTest, TokenToCharTest_0900, TestSize.Level1";
203ca0551cfSopenharmony_ci    Lexer imageLexer;
204ca0551cfSopenharmony_ci    Token token = Token::PARENTHESES_LEFT;
205ca0551cfSopenharmony_ci    int result = imageLexer.TokenToChar(token);
206ca0551cfSopenharmony_ci    EXPECT_EQ(result, 40);
207ca0551cfSopenharmony_ci}
208ca0551cfSopenharmony_ci
209ca0551cfSopenharmony_ci/*
210ca0551cfSopenharmony_ci * @tc.name: TokenToCharTest_1000
211ca0551cfSopenharmony_ci * @tc.desc: test the token in Lexer's TokenToChar function is PARENTHESES_RIGHT.
212ca0551cfSopenharmony_ci * @tc.type: FUNC
213ca0551cfSopenharmony_ci * @tc.require:
214ca0551cfSopenharmony_ci */
215ca0551cfSopenharmony_ciHWTEST_F(LexerUnitTest, TokenToCharTest_1000, Function | MediumTest | Level1)
216ca0551cfSopenharmony_ci{
217ca0551cfSopenharmony_ci    GTEST_LOG_(INFO)
218ca0551cfSopenharmony_ci        << "LexerUnitTest, TokenToCharTest_1000, TestSize.Level1";
219ca0551cfSopenharmony_ci    Lexer imageLexer;
220ca0551cfSopenharmony_ci    Token token = Token::PARENTHESES_RIGHT;
221ca0551cfSopenharmony_ci    int result = imageLexer.TokenToChar(token);
222ca0551cfSopenharmony_ci    EXPECT_EQ(result, 41);
223ca0551cfSopenharmony_ci}
224ca0551cfSopenharmony_ci
225ca0551cfSopenharmony_ci/*
226ca0551cfSopenharmony_ci * @tc.name: TokenToCharTest_1100
227ca0551cfSopenharmony_ci * @tc.desc: test the token in Lexer's TokenToChar function is other.
228ca0551cfSopenharmony_ci * @tc.type: FUNC
229ca0551cfSopenharmony_ci * @tc.require:
230ca0551cfSopenharmony_ci */
231ca0551cfSopenharmony_ciHWTEST_F(LexerUnitTest, TokenToCharTest_1100, Function | MediumTest | Level1)
232ca0551cfSopenharmony_ci{
233ca0551cfSopenharmony_ci    GTEST_LOG_(INFO)
234ca0551cfSopenharmony_ci        << "LexerUnitTest, TokenToCharTest_1100, TestSize.Level1";
235ca0551cfSopenharmony_ci    Lexer imageLexer;
236ca0551cfSopenharmony_ci    Token token = Token::IDENTIFIER;
237ca0551cfSopenharmony_ci    int result = imageLexer.TokenToChar(token);
238ca0551cfSopenharmony_ci    EXPECT_EQ(result, -1);
239ca0551cfSopenharmony_ci}
240ca0551cfSopenharmony_ci
241ca0551cfSopenharmony_ci/*
242ca0551cfSopenharmony_ci * @tc.name: strToIntTest_0100
243ca0551cfSopenharmony_ci * @tc.desc: test str to int
244ca0551cfSopenharmony_ci * @tc.type: FUNC
245ca0551cfSopenharmony_ci * @tc.require:
246ca0551cfSopenharmony_ci */
247ca0551cfSopenharmony_ciHWTEST_F(LexerUnitTest, strToIntTest_0100, Function | MediumTest | Level1)
248ca0551cfSopenharmony_ci{
249ca0551cfSopenharmony_ci    GTEST_LOG_(INFO) << "LexerUnitTest, strToIntTest_0100, TestSize.Level1";
250ca0551cfSopenharmony_ci    Lexer imageLexer;
251ca0551cfSopenharmony_ci    int number;
252ca0551cfSopenharmony_ci    {
253ca0551cfSopenharmony_ci        const char *str = "100";
254ca0551cfSopenharmony_ci        bool result = imageLexer.strToInt(str, 3, number);
255ca0551cfSopenharmony_ci        EXPECT_EQ(result, true);
256ca0551cfSopenharmony_ci        EXPECT_EQ(number, 100);
257ca0551cfSopenharmony_ci    }
258ca0551cfSopenharmony_ci
259ca0551cfSopenharmony_ci    {
260ca0551cfSopenharmony_ci        const char *str = "0000100";
261ca0551cfSopenharmony_ci        bool result = imageLexer.strToInt(str, 7, number);
262ca0551cfSopenharmony_ci        EXPECT_EQ(result, true);
263ca0551cfSopenharmony_ci        EXPECT_EQ(number, 100);
264ca0551cfSopenharmony_ci    }
265ca0551cfSopenharmony_ci
266ca0551cfSopenharmony_ci    {
267ca0551cfSopenharmony_ci        const char *str = "0";
268ca0551cfSopenharmony_ci        bool result = imageLexer.strToInt(str, 1, number);
269ca0551cfSopenharmony_ci        EXPECT_EQ(result, true);
270ca0551cfSopenharmony_ci        EXPECT_EQ(number, 0);
271ca0551cfSopenharmony_ci    }
272ca0551cfSopenharmony_ci
273ca0551cfSopenharmony_ci    {
274ca0551cfSopenharmony_ci        const char *str = "-1";
275ca0551cfSopenharmony_ci        bool result = imageLexer.strToInt(str, 2, number);
276ca0551cfSopenharmony_ci        EXPECT_EQ(result, false);
277ca0551cfSopenharmony_ci    }
278ca0551cfSopenharmony_ci
279ca0551cfSopenharmony_ci    // exceed the upper limit of int
280ca0551cfSopenharmony_ci    {
281ca0551cfSopenharmony_ci        const char *str = "2147483647";
282ca0551cfSopenharmony_ci        bool result = imageLexer.strToInt(str, 10, number);
283ca0551cfSopenharmony_ci        EXPECT_EQ(result, true);
284ca0551cfSopenharmony_ci        EXPECT_EQ(number, 2147483647);
285ca0551cfSopenharmony_ci    }
286ca0551cfSopenharmony_ci
287ca0551cfSopenharmony_ci    // exceed the upper limit of int
288ca0551cfSopenharmony_ci    {
289ca0551cfSopenharmony_ci        const char *str = "2147483648";
290ca0551cfSopenharmony_ci        bool result = imageLexer.strToInt(str, 10, number);
291ca0551cfSopenharmony_ci        EXPECT_EQ(result, false);
292ca0551cfSopenharmony_ci    }
293ca0551cfSopenharmony_ci
294ca0551cfSopenharmony_ci    {
295ca0551cfSopenharmony_ci        const char *str = "abdc";
296ca0551cfSopenharmony_ci        bool result = imageLexer.strToInt(str, 4, number);
297ca0551cfSopenharmony_ci        EXPECT_EQ(result, false);
298ca0551cfSopenharmony_ci    }
299ca0551cfSopenharmony_ci
300ca0551cfSopenharmony_ci    {
301ca0551cfSopenharmony_ci        const char *str = "0000";
302ca0551cfSopenharmony_ci        bool result = imageLexer.strToInt(str, 4, number);
303ca0551cfSopenharmony_ci        EXPECT_EQ(result, true);
304ca0551cfSopenharmony_ci        EXPECT_EQ(number, 0);
305ca0551cfSopenharmony_ci    }
306ca0551cfSopenharmony_ci}
307ca0551cfSopenharmony_ci} // namespace idl
308ca0551cfSopenharmony_ci} // namespace OHOS