• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
16 #include <gtest/gtest.h>
17 #include <cstddef>
18 #include <string>
19 #include <vector>
20 #include "lsp_api_test.h"
21 #include "lsp/include/internal_api.h"
22 #include "lsp/include/api.h"
23 #include "public/es2panda_lib.h"
24 
25 namespace {
26 using ark::es2panda::lsp::Initializer;
27 
28 class LspGetSafeDeleteInfoTest : public LSPAPITests {};
29 
TEST_F(LspGetSafeDeleteInfoTest,GetSafeDeleteInfoCase1)30 TEST_F(LspGetSafeDeleteInfoTest, GetSafeDeleteInfoCase1)
31 {
32     std::vector<std::string> files = {"get-safe-delete-info-case1.ets"};
33     std::vector<std::string> texts = {R"(function a(): Number { return 1; } a())"};
34     auto filePaths = CreateTempFile(files, texts);
35 
36     Initializer initializer;
37     es2panda_Context *ctx = initializer.CreateContext(filePaths[0].c_str(), ES2PANDA_STATE_CHECKED);
38     LSPAPI const *lspApi = GetImpl();
39 
40     // NOLINTNEXTLINE(readability-identifier-naming,-warnings-as-errors)
41     constexpr size_t offset = 16;
42     bool result = lspApi->getSafeDeleteInfo(ctx, offset);
43     ASSERT_EQ(result, false);
44 
45     // NOLINTNEXTLINE(readability-identifier-naming,-warnings-as-errors)
46     constexpr size_t offsetT2 = 35;
47     result = lspApi->getSafeDeleteInfo(ctx, offsetT2);
48     ASSERT_EQ(result, true);
49 
50     initializer.DestroyContext(ctx);
51 }
52 
TEST_F(LspGetSafeDeleteInfoTest,GetSafeDeleteInfoCase2)53 TEST_F(LspGetSafeDeleteInfoTest, GetSafeDeleteInfoCase2)
54 {
55     std::vector<std::string> files = {"get-safe-delete-info-case2.ets"};
56     std::vector<std::string> texts = {R"(export const PI = 3.1415926;)"};
57     auto filePaths = CreateTempFile(files, texts);
58 
59     Initializer initializer;
60     es2panda_Context *ctx = initializer.CreateContext(filePaths[0].c_str(), ES2PANDA_STATE_CHECKED);
61     LSPAPI const *lspApi = GetImpl();
62 
63     // NOLINTNEXTLINE(readability-identifier-naming,-warnings-as-errors)
64     constexpr size_t offset = 14;
65     bool result = lspApi->getSafeDeleteInfo(ctx, offset);
66     ASSERT_EQ(result, true);
67 
68     initializer.DestroyContext(ctx);
69 }
70 
TEST_F(LspGetSafeDeleteInfoTest,GetSafeDeleteInfoCase3)71 TEST_F(LspGetSafeDeleteInfoTest, GetSafeDeleteInfoCase3)
72 {
73     std::vector<std::string> files = {"get-safe-delete-info-case3.ets"};
74     std::vector<std::string> texts = {R"(
75     function setAlarmDefaultTime(alarmItem?: AlarmItem) {
76       let hour;
77       let minute;
78     })"};
79     auto filePaths = CreateTempFile(files, texts);
80 
81     Initializer initializer;
82     es2panda_Context *ctx = initializer.CreateContext(filePaths[0].c_str(), ES2PANDA_STATE_CHECKED);
83     LSPAPI const *lspApi = GetImpl();
84 
85     // NOLINTNEXTLINE(readability-identifier-naming,-warnings-as-errors)
86     constexpr size_t offset = 71;
87     bool result = lspApi->getSafeDeleteInfo(ctx, offset);
88     ASSERT_EQ(result, true);
89 
90     // NOLINTNEXTLINE(readability-identifier-naming,-warnings-as-errors)
91     constexpr size_t offsetT2 = 89;
92     result = lspApi->getSafeDeleteInfo(ctx, offsetT2);
93     ASSERT_EQ(result, true);
94 
95     initializer.DestroyContext(ctx);
96 }
97 
TEST_F(LspGetSafeDeleteInfoTest,GetSafeDeleteInfoCase4)98 TEST_F(LspGetSafeDeleteInfoTest, GetSafeDeleteInfoCase4)
99 {
100     std::vector<std::string> files = {"get-safe-delete-info-namespace.ets"};
101     std::vector<std::string> texts = {R"(
102     namespace Foo {}
103     class Foo2 {}
104     )"};
105     auto filePaths = CreateTempFile(files, texts);
106 
107     Initializer initializer;
108     es2panda_Context *ctx = initializer.CreateContext(filePaths[0].c_str(), ES2PANDA_STATE_CHECKED);
109     LSPAPI const *lspApi = GetImpl();
110 
111     // NOLINTNEXTLINE(readability-identifier-naming,-warnings-as-errors)
112     constexpr size_t offset = 14;
113     bool result = lspApi->getSafeDeleteInfo(ctx, offset);
114     ASSERT_EQ(result, false);
115 
116     // NOLINTNEXTLINE(readability-identifier-naming,-warnings-as-errors)
117     constexpr size_t offsetT2 = 31;
118     result = lspApi->getSafeDeleteInfo(ctx, offsetT2);
119     ASSERT_EQ(result, true);
120 
121     initializer.DestroyContext(ctx);
122 }
123 
TEST_F(LspGetSafeDeleteInfoTest,GetSafeDeleteInfoCase5)124 TEST_F(LspGetSafeDeleteInfoTest, GetSafeDeleteInfoCase5)
125 {
126     std::vector<std::string> files = {"get-safe-delete-info-typeparam.ets"};
127     std::vector<std::string> texts = {R"(
128     function foo<T>(a: T) { return a; }
129     )"};
130     auto filePaths = CreateTempFile(files, texts);
131 
132     Initializer initializer;
133     es2panda_Context *ctx = initializer.CreateContext(filePaths[0].c_str(), ES2PANDA_STATE_CHECKED);
134     LSPAPI const *lspApi = GetImpl();
135 
136     // NOLINTNEXTLINE(readability-identifier-naming,-warnings-as-errors)
137     constexpr size_t offset = 17;
138     bool result = lspApi->getSafeDeleteInfo(ctx, offset);
139     ASSERT_EQ(result, false);
140 
141     initializer.DestroyContext(ctx);
142 }
143 
TEST_F(LspGetSafeDeleteInfoTest,GetSafeDeleteInfoCase6)144 TEST_F(LspGetSafeDeleteInfoTest, GetSafeDeleteInfoCase6)
145 {
146     std::vector<std::string> files = {"get-safe-delete-info-import.ets"};
147     std::vector<std::string> texts = {R"(import { foo } from "./mod";)"};
148     auto filePaths = CreateTempFile(files, texts);
149 
150     Initializer initializer;
151     es2panda_Context *ctx = initializer.CreateContext(filePaths[0].c_str(), ES2PANDA_STATE_CHECKED);
152     LSPAPI const *lspApi = GetImpl();
153 
154     // NOLINTNEXTLINE(readability-identifier-naming,-warnings-as-errors)
155     constexpr size_t offset = 9;
156     bool result = lspApi->getSafeDeleteInfo(ctx, offset);
157     ASSERT_EQ(result, true);
158 
159     // NOLINTNEXTLINE(readability-identifier-naming,-warnings-as-errors)
160     constexpr size_t offsetT2 = 23;
161     result = lspApi->getSafeDeleteInfo(ctx, offsetT2);
162     ASSERT_EQ(result, true);
163 
164     initializer.DestroyContext(ctx);
165 }
166 
TEST_F(LspGetSafeDeleteInfoTest,GetSafeDeleteInfoCase7)167 TEST_F(LspGetSafeDeleteInfoTest, GetSafeDeleteInfoCase7)
168 {
169     std::vector<std::string> files = {"get-safe-delete-info-arrow.ets"};
170     std::vector<std::string> texts = {R"(
171     export const calcDistance = (time: number) => {
172         const ret = 0.5 * time * time;
173         return ret;
174     };
175     )"};
176     auto filePaths = CreateTempFile(files, texts);
177 
178     Initializer initializer;
179     es2panda_Context *ctx = initializer.CreateContext(filePaths[0].c_str(), ES2PANDA_STATE_CHECKED);
180     LSPAPI const *lspApi = GetImpl();
181 
182     // NOLINTNEXTLINE(readability-identifier-naming,-warnings-as-errors)
183     constexpr size_t offset = 28;
184     bool result = lspApi->getSafeDeleteInfo(ctx, offset);
185     ASSERT_EQ(result, true);
186 
187     initializer.DestroyContext(ctx);
188 }
189 
TEST_F(LspGetSafeDeleteInfoTest,GetSafeDeleteInfoCase8)190 TEST_F(LspGetSafeDeleteInfoTest, GetSafeDeleteInfoCase8)
191 {
192     std::vector<std::string> files = {"get-safe-delete-info-interface.ets"};
193     std::vector<std::string> texts = {R"(
194     export interface VideoPlayer {
195         prepare(): Promise<void>;
196     }
197 
198     function bar(parameter: VideoPlayer) {
199         parameter.prepare();
200     }
201     )"};
202     auto filePaths = CreateTempFile(files, texts);
203 
204     Initializer initializer;
205     es2panda_Context *ctx = initializer.CreateContext(filePaths[0].c_str(), ES2PANDA_STATE_CHECKED);
206     LSPAPI const *lspApi = GetImpl();
207 
208     // NOLINTNEXTLINE(readability-identifier-naming,-warnings-as-errors)
209     constexpr size_t offset = 31;
210     bool result = lspApi->getSafeDeleteInfo(ctx, offset);
211     ASSERT_EQ(result, true);
212 
213     // NOLINTNEXTLINE(readability-identifier-naming,-warnings-as-errors)
214     constexpr size_t offsetT2 = 143;
215     result = lspApi->getSafeDeleteInfo(ctx, offsetT2);
216     ASSERT_EQ(result, true);
217 
218     initializer.DestroyContext(ctx);
219 }
220 
TEST_F(LspGetSafeDeleteInfoTest,GetSafeDeleteInfoCase9)221 TEST_F(LspGetSafeDeleteInfoTest, GetSafeDeleteInfoCase9)
222 {
223     std::vector<std::string> files = {"get-safe-delete-info-importdefault.ets"};
224     std::vector<std::string> texts = {R"(
225     import BuildProfile from 'BuildProfile';
226     BuildProfile.bundleName
227     )"};
228     auto filePaths = CreateTempFile(files, texts);
229 
230     Initializer initializer;
231     es2panda_Context *ctx = initializer.CreateContext(filePaths[0].c_str(), ES2PANDA_STATE_CHECKED);
232     LSPAPI const *lspApi = GetImpl();
233 
234     // NOLINTNEXTLINE(readability-identifier-naming,-warnings-as-errors)
235     constexpr size_t offset = 15;
236     bool result = lspApi->getSafeDeleteInfo(ctx, offset);
237     ASSERT_EQ(result, true);
238 
239     // NOLINTNEXTLINE(readability-identifier-naming,-warnings-as-errors)
240     constexpr size_t offsetT2 = 52;
241     result = lspApi->getSafeDeleteInfo(ctx, offsetT2);
242     ASSERT_EQ(result, true);
243 
244     initializer.DestroyContext(ctx);
245 }
246 }  // namespace
247