1e509ee18Sopenharmony_ci/*
2e509ee18Sopenharmony_ci * Copyright (c) 2023 Huawei Device Co., Ltd.
3e509ee18Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
4e509ee18Sopenharmony_ci * you may not use this file except in compliance with the License.
5e509ee18Sopenharmony_ci * You may obtain a copy of the License at
6e509ee18Sopenharmony_ci *
7e509ee18Sopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
8e509ee18Sopenharmony_ci *
9e509ee18Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
10e509ee18Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
11e509ee18Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12e509ee18Sopenharmony_ci * See the License for the specific language governing permissions and
13e509ee18Sopenharmony_ci * limitations under the License.
14e509ee18Sopenharmony_ci */
15e509ee18Sopenharmony_ci
16e509ee18Sopenharmony_ci#ifndef ECMASCRIPT_TOOLING_TEST_TESTCASES_JS_CLOSURE_SCOPE_TEST_H
17e509ee18Sopenharmony_ci#define ECMASCRIPT_TOOLING_TEST_TESTCASES_JS_CLOSURE_SCOPE_TEST_H
18e509ee18Sopenharmony_ci
19e509ee18Sopenharmony_ci#include <map>
20e509ee18Sopenharmony_ci#include "tooling/test/client_utils/test_util.h"
21e509ee18Sopenharmony_ci
22e509ee18Sopenharmony_cinamespace panda::ecmascript::tooling::test {
23e509ee18Sopenharmony_ciclass JsClosureScopeTest : public TestActions {
24e509ee18Sopenharmony_cipublic:
25e509ee18Sopenharmony_ci    JsClosureScopeTest()
26e509ee18Sopenharmony_ci    {
27e509ee18Sopenharmony_ci        testAction = {
28e509ee18Sopenharmony_ci            {SocketAction::SEND, "enable"},
29e509ee18Sopenharmony_ci            {SocketAction::RECV, "", ActionRule::CUSTOM_RULE, MatchRule::replySuccess},
30e509ee18Sopenharmony_ci            {SocketAction::SEND, "runtime-enable"},
31e509ee18Sopenharmony_ci            {SocketAction::RECV, "", ActionRule::CUSTOM_RULE, MatchRule::replySuccess},
32e509ee18Sopenharmony_ci            {SocketAction::SEND, "run"},
33e509ee18Sopenharmony_ci            {SocketAction::RECV, "", ActionRule::CUSTOM_RULE, MatchRule::replySuccess},
34e509ee18Sopenharmony_ci            // load closure_scope.js
35e509ee18Sopenharmony_ci            {SocketAction::RECV, "Debugger.scriptParsed", ActionRule::STRING_CONTAIN},
36e509ee18Sopenharmony_ci            // break on start
37e509ee18Sopenharmony_ci            {SocketAction::RECV, "Debugger.paused", ActionRule::STRING_CONTAIN},
38e509ee18Sopenharmony_ci            // set first breakpoint
39e509ee18Sopenharmony_ci            {SocketAction::SEND, "b " DEBUGGER_JS_DIR "closure_scope.js 30"},
40e509ee18Sopenharmony_ci            {SocketAction::RECV, "", ActionRule::CUSTOM_RULE, MatchRule::replySuccess},
41e509ee18Sopenharmony_ci            // // set second breakpoint
42e509ee18Sopenharmony_ci            {SocketAction::SEND, "b " DEBUGGER_JS_DIR "closure_scope.js 53"},
43e509ee18Sopenharmony_ci            {SocketAction::RECV, "", ActionRule::CUSTOM_RULE, MatchRule::replySuccess},
44e509ee18Sopenharmony_ci
45e509ee18Sopenharmony_ci            // hit breakpoint after resume first time
46e509ee18Sopenharmony_ci            {SocketAction::SEND, "resume"},
47e509ee18Sopenharmony_ci            {SocketAction::RECV, "Debugger.resumed", ActionRule::STRING_CONTAIN},
48e509ee18Sopenharmony_ci            {SocketAction::RECV, "", ActionRule::CUSTOM_RULE, MatchRule::replySuccess},
49e509ee18Sopenharmony_ci            {SocketAction::RECV, "Debugger.paused", ActionRule::CUSTOM_RULE, [] (auto recv, auto, auto) -> bool {
50e509ee18Sopenharmony_ci                std::unique_ptr<PtJson> json = PtJson::Parse(recv);
51e509ee18Sopenharmony_ci                Result ret;
52e509ee18Sopenharmony_ci                std::string method;
53e509ee18Sopenharmony_ci                ret = json->GetString("method", &method);
54e509ee18Sopenharmony_ci                if (ret != Result::SUCCESS || method != "Debugger.paused") {
55e509ee18Sopenharmony_ci                    return false;
56e509ee18Sopenharmony_ci                }
57e509ee18Sopenharmony_ci
58e509ee18Sopenharmony_ci                DebuggerClient debuggerClient(0);
59e509ee18Sopenharmony_ci                debuggerClient.PausedReply(std::move(json));
60e509ee18Sopenharmony_ci                return true;
61e509ee18Sopenharmony_ci            }},
62e509ee18Sopenharmony_ci            {SocketAction::SEND, "print"},
63e509ee18Sopenharmony_ci            {SocketAction::RECV, "", ActionRule::CUSTOM_RULE, [] (auto recv, auto, auto) -> bool {
64e509ee18Sopenharmony_ci                std::unique_ptr<PtJson> json = PtJson::Parse(recv);
65e509ee18Sopenharmony_ci                int32_t id = 0;
66e509ee18Sopenharmony_ci                Result ret = json->GetInt("id", &id);
67e509ee18Sopenharmony_ci                if (ret != Result::SUCCESS) {
68e509ee18Sopenharmony_ci                    return false;
69e509ee18Sopenharmony_ci                }
70e509ee18Sopenharmony_ci                RuntimeClient runtimeClient(0);
71e509ee18Sopenharmony_ci                runtimeClient.HandleGetProperties(std::move(json), id);
72e509ee18Sopenharmony_ci                return true;
73e509ee18Sopenharmony_ci            }},
74e509ee18Sopenharmony_ci            {SocketAction::SEND, "print 2"},
75e509ee18Sopenharmony_ci            {SocketAction::RECV, "", ActionRule::CUSTOM_RULE, [] (auto recv, auto, auto) -> bool {
76e509ee18Sopenharmony_ci                std::unique_ptr<PtJson> json = PtJson::Parse(recv);
77e509ee18Sopenharmony_ci                Result ret;
78e509ee18Sopenharmony_ci                int32_t id = 0;
79e509ee18Sopenharmony_ci                ret = json->GetInt("id", &id);
80e509ee18Sopenharmony_ci                if (ret != Result::SUCCESS) {
81e509ee18Sopenharmony_ci                    return false;
82e509ee18Sopenharmony_ci                }
83e509ee18Sopenharmony_ci
84e509ee18Sopenharmony_ci                std::unique_ptr<PtJson> result = nullptr;
85e509ee18Sopenharmony_ci                ret = json->GetObject("result", &result);
86e509ee18Sopenharmony_ci                if (ret != Result::SUCCESS) {
87e509ee18Sopenharmony_ci                    return false;
88e509ee18Sopenharmony_ci                }
89e509ee18Sopenharmony_ci
90e509ee18Sopenharmony_ci                std::unique_ptr<PtJson> innerResult;
91e509ee18Sopenharmony_ci                ret = result->GetArray("result", &innerResult);
92e509ee18Sopenharmony_ci                if (ret != Result::SUCCESS) {
93e509ee18Sopenharmony_ci                    return false;
94e509ee18Sopenharmony_ci                }
95e509ee18Sopenharmony_ci
96e509ee18Sopenharmony_ci                std::string name;
97e509ee18Sopenharmony_ci                ret = innerResult->Get(0)->GetString("name", &name);
98e509ee18Sopenharmony_ci                if (ret != Result::SUCCESS || name != "v3") {
99e509ee18Sopenharmony_ci                    return false;
100e509ee18Sopenharmony_ci                }
101e509ee18Sopenharmony_ci
102e509ee18Sopenharmony_ci                std::unique_ptr<PtJson> value;
103e509ee18Sopenharmony_ci                ret = innerResult->Get(0)->GetObject("value", &value);
104e509ee18Sopenharmony_ci                if (ret != Result::SUCCESS) {
105e509ee18Sopenharmony_ci                    return false;
106e509ee18Sopenharmony_ci                }
107e509ee18Sopenharmony_ci
108e509ee18Sopenharmony_ci                std::string valueDes;
109e509ee18Sopenharmony_ci                ret = value->GetString("description", &valueDes);
110e509ee18Sopenharmony_ci                if (ret != Result::SUCCESS || valueDes != "4") {
111e509ee18Sopenharmony_ci                    return false;
112e509ee18Sopenharmony_ci                }
113e509ee18Sopenharmony_ci                return true;
114e509ee18Sopenharmony_ci            }},
115e509ee18Sopenharmony_ci            {SocketAction::SEND, "print 3"},
116e509ee18Sopenharmony_ci            {SocketAction::RECV, "", ActionRule::CUSTOM_RULE, [] (auto recv, auto, auto) -> bool {
117e509ee18Sopenharmony_ci                std::unique_ptr<PtJson> json = PtJson::Parse(recv);
118e509ee18Sopenharmony_ci                Result ret;
119e509ee18Sopenharmony_ci                int32_t id = 0;
120e509ee18Sopenharmony_ci                ret = json->GetInt("id", &id);
121e509ee18Sopenharmony_ci                if (ret != Result::SUCCESS) {
122e509ee18Sopenharmony_ci                    return false;
123e509ee18Sopenharmony_ci                }
124e509ee18Sopenharmony_ci
125e509ee18Sopenharmony_ci                std::unique_ptr<PtJson> result = nullptr;
126e509ee18Sopenharmony_ci                ret = json->GetObject("result", &result);
127e509ee18Sopenharmony_ci                if (ret != Result::SUCCESS) {
128e509ee18Sopenharmony_ci                    return false;
129e509ee18Sopenharmony_ci                }
130e509ee18Sopenharmony_ci
131e509ee18Sopenharmony_ci                std::unique_ptr<PtJson> innerResult;
132e509ee18Sopenharmony_ci                ret = result->GetArray("result", &innerResult);
133e509ee18Sopenharmony_ci                if (ret != Result::SUCCESS) {
134e509ee18Sopenharmony_ci                    return false;
135e509ee18Sopenharmony_ci                }
136e509ee18Sopenharmony_ci
137e509ee18Sopenharmony_ci                std::string name;
138e509ee18Sopenharmony_ci                ret = innerResult->Get(0)->GetString("name", &name);
139e509ee18Sopenharmony_ci                if (ret != Result::SUCCESS || name != "v2_2") {
140e509ee18Sopenharmony_ci                    return false;
141e509ee18Sopenharmony_ci                }
142e509ee18Sopenharmony_ci
143e509ee18Sopenharmony_ci                std::unique_ptr<PtJson> value;
144e509ee18Sopenharmony_ci                ret = innerResult->Get(0)->GetObject("value", &value);
145e509ee18Sopenharmony_ci                if (ret != Result::SUCCESS) {
146e509ee18Sopenharmony_ci                    return false;
147e509ee18Sopenharmony_ci                }
148e509ee18Sopenharmony_ci
149e509ee18Sopenharmony_ci                std::string valueDes;
150e509ee18Sopenharmony_ci                ret = value->GetString("description", &valueDes);
151e509ee18Sopenharmony_ci                if (ret != Result::SUCCESS || valueDes != "3") {
152e509ee18Sopenharmony_ci                    return false;
153e509ee18Sopenharmony_ci                }
154e509ee18Sopenharmony_ci
155e509ee18Sopenharmony_ci                ret = innerResult->Get(1)->GetString("name", &name);
156e509ee18Sopenharmony_ci                if (ret != Result::SUCCESS || name != "v2_1") {
157e509ee18Sopenharmony_ci                    return false;
158e509ee18Sopenharmony_ci                }
159e509ee18Sopenharmony_ci
160e509ee18Sopenharmony_ci                ret = innerResult->Get(1)->GetObject("value", &value);
161e509ee18Sopenharmony_ci                if (ret != Result::SUCCESS) {
162e509ee18Sopenharmony_ci                    return false;
163e509ee18Sopenharmony_ci                }
164e509ee18Sopenharmony_ci
165e509ee18Sopenharmony_ci                ret = value->GetString("description", &valueDes);
166e509ee18Sopenharmony_ci                if (ret != Result::SUCCESS || valueDes != "2") {
167e509ee18Sopenharmony_ci                    return false;
168e509ee18Sopenharmony_ci                }
169e509ee18Sopenharmony_ci                return true;
170e509ee18Sopenharmony_ci            }},
171e509ee18Sopenharmony_ci            {SocketAction::SEND, "print 4"},
172e509ee18Sopenharmony_ci            {SocketAction::RECV, "", ActionRule::CUSTOM_RULE, [] (auto recv, auto, auto) -> bool {
173e509ee18Sopenharmony_ci                std::unique_ptr<PtJson> json = PtJson::Parse(recv);
174e509ee18Sopenharmony_ci                Result ret;
175e509ee18Sopenharmony_ci                int32_t id = 0;
176e509ee18Sopenharmony_ci                ret = json->GetInt("id", &id);
177e509ee18Sopenharmony_ci                if (ret != Result::SUCCESS) {
178e509ee18Sopenharmony_ci                    return false;
179e509ee18Sopenharmony_ci                }
180e509ee18Sopenharmony_ci
181e509ee18Sopenharmony_ci                std::unique_ptr<PtJson> result = nullptr;
182e509ee18Sopenharmony_ci                ret = json->GetObject("result", &result);
183e509ee18Sopenharmony_ci                if (ret != Result::SUCCESS) {
184e509ee18Sopenharmony_ci                    return false;
185e509ee18Sopenharmony_ci                }
186e509ee18Sopenharmony_ci
187e509ee18Sopenharmony_ci                std::unique_ptr<PtJson> innerResult;
188e509ee18Sopenharmony_ci                ret = result->GetArray("result", &innerResult);
189e509ee18Sopenharmony_ci                if (ret != Result::SUCCESS) {
190e509ee18Sopenharmony_ci                    return false;
191e509ee18Sopenharmony_ci                }
192e509ee18Sopenharmony_ci
193e509ee18Sopenharmony_ci                std::string name;
194e509ee18Sopenharmony_ci                ret = innerResult->Get(0)->GetString("name", &name);
195e509ee18Sopenharmony_ci                if (ret != Result::SUCCESS || name != "v1") {
196e509ee18Sopenharmony_ci                    return false;
197e509ee18Sopenharmony_ci                }
198e509ee18Sopenharmony_ci
199e509ee18Sopenharmony_ci                std::unique_ptr<PtJson> value;
200e509ee18Sopenharmony_ci                ret = innerResult->Get(0)->GetObject("value", &value);
201e509ee18Sopenharmony_ci                if (ret != Result::SUCCESS) {
202e509ee18Sopenharmony_ci                    return false;
203e509ee18Sopenharmony_ci                }
204e509ee18Sopenharmony_ci
205e509ee18Sopenharmony_ci                std::string valueDes;
206e509ee18Sopenharmony_ci                ret = value->GetString("description", &valueDes);
207e509ee18Sopenharmony_ci                if (ret != Result::SUCCESS || valueDes != "1") {
208e509ee18Sopenharmony_ci                    return false;
209e509ee18Sopenharmony_ci                }
210e509ee18Sopenharmony_ci                return true;
211e509ee18Sopenharmony_ci            }},
212e509ee18Sopenharmony_ci
213e509ee18Sopenharmony_ci            // hit breakpoint after resume second time
214e509ee18Sopenharmony_ci            {SocketAction::SEND, "resume"},
215e509ee18Sopenharmony_ci            {SocketAction::RECV, "Debugger.resumed", ActionRule::STRING_CONTAIN},
216e509ee18Sopenharmony_ci            {SocketAction::RECV, "", ActionRule::CUSTOM_RULE, MatchRule::replySuccess},
217e509ee18Sopenharmony_ci            {SocketAction::RECV, "Debugger.paused", ActionRule::CUSTOM_RULE, [] (auto recv, auto, auto) -> bool {
218e509ee18Sopenharmony_ci                std::unique_ptr<PtJson> json = PtJson::Parse(recv);
219e509ee18Sopenharmony_ci                Result ret;
220e509ee18Sopenharmony_ci                std::string method;
221e509ee18Sopenharmony_ci                ret = json->GetString("method", &method);
222e509ee18Sopenharmony_ci                if (ret != Result::SUCCESS || method != "Debugger.paused") {
223e509ee18Sopenharmony_ci                    return false;
224e509ee18Sopenharmony_ci                }
225e509ee18Sopenharmony_ci                DebuggerClient debuggerClient(0);
226e509ee18Sopenharmony_ci                debuggerClient.PausedReply(std::move(json));
227e509ee18Sopenharmony_ci                return true;
228e509ee18Sopenharmony_ci            }},
229e509ee18Sopenharmony_ci            {SocketAction::SEND, "print"},
230e509ee18Sopenharmony_ci            {SocketAction::RECV, "", ActionRule::CUSTOM_RULE, [] (auto recv, auto, auto) -> bool {
231e509ee18Sopenharmony_ci                std::unique_ptr<PtJson> json = PtJson::Parse(recv);
232e509ee18Sopenharmony_ci                int32_t id = 0;
233e509ee18Sopenharmony_ci                Result ret = json->GetInt("id", &id);
234e509ee18Sopenharmony_ci                if (ret != Result::SUCCESS) {
235e509ee18Sopenharmony_ci                    return false;
236e509ee18Sopenharmony_ci                }
237e509ee18Sopenharmony_ci                RuntimeClient runtimeClient(0);
238e509ee18Sopenharmony_ci                runtimeClient.HandleGetProperties(std::move(json), id);
239e509ee18Sopenharmony_ci                return true;
240e509ee18Sopenharmony_ci            }},
241e509ee18Sopenharmony_ci            {SocketAction::SEND, "print 2"},
242e509ee18Sopenharmony_ci            {SocketAction::RECV, "", ActionRule::CUSTOM_RULE, [] (auto recv, auto, auto) -> bool {
243e509ee18Sopenharmony_ci                std::unique_ptr<PtJson> json = PtJson::Parse(recv);
244e509ee18Sopenharmony_ci                Result ret;
245e509ee18Sopenharmony_ci                int32_t id = 0;
246e509ee18Sopenharmony_ci                ret = json->GetInt("id", &id);
247e509ee18Sopenharmony_ci                if (ret != Result::SUCCESS) {
248e509ee18Sopenharmony_ci                    return false;
249e509ee18Sopenharmony_ci                }
250e509ee18Sopenharmony_ci
251e509ee18Sopenharmony_ci                std::unique_ptr<PtJson> result = nullptr;
252e509ee18Sopenharmony_ci                ret = json->GetObject("result", &result);
253e509ee18Sopenharmony_ci                if (ret != Result::SUCCESS) {
254e509ee18Sopenharmony_ci                    return false;
255e509ee18Sopenharmony_ci                }
256e509ee18Sopenharmony_ci
257e509ee18Sopenharmony_ci                std::unique_ptr<PtJson> innerResult;
258e509ee18Sopenharmony_ci                ret = result->GetArray("result", &innerResult);
259e509ee18Sopenharmony_ci                if (ret != Result::SUCCESS) {
260e509ee18Sopenharmony_ci                    return false;
261e509ee18Sopenharmony_ci                }
262e509ee18Sopenharmony_ci
263e509ee18Sopenharmony_ci                std::string name;
264e509ee18Sopenharmony_ci                ret = innerResult->Get(0)->GetString("name", &name);
265e509ee18Sopenharmony_ci                if (ret != Result::SUCCESS || name != "i") {
266e509ee18Sopenharmony_ci                    return false;
267e509ee18Sopenharmony_ci                }
268e509ee18Sopenharmony_ci
269e509ee18Sopenharmony_ci                std::unique_ptr<PtJson> value;
270e509ee18Sopenharmony_ci                ret = innerResult->Get(0)->GetObject("value", &value);
271e509ee18Sopenharmony_ci                if (ret != Result::SUCCESS) {
272e509ee18Sopenharmony_ci                    return false;
273e509ee18Sopenharmony_ci                }
274e509ee18Sopenharmony_ci
275e509ee18Sopenharmony_ci                std::string valueDes;
276e509ee18Sopenharmony_ci                ret = value->GetString("description", &valueDes);
277e509ee18Sopenharmony_ci                if (ret != Result::SUCCESS || valueDes != "5") {
278e509ee18Sopenharmony_ci                    return false;
279e509ee18Sopenharmony_ci                }
280e509ee18Sopenharmony_ci                return true;
281e509ee18Sopenharmony_ci            }},
282e509ee18Sopenharmony_ci            {SocketAction::SEND, "print 3"},
283e509ee18Sopenharmony_ci            {SocketAction::RECV, "", ActionRule::CUSTOM_RULE, [] (auto recv, auto, auto) -> bool {
284e509ee18Sopenharmony_ci                std::unique_ptr<PtJson> json = PtJson::Parse(recv);
285e509ee18Sopenharmony_ci                Result ret;
286e509ee18Sopenharmony_ci                int32_t id = 0;
287e509ee18Sopenharmony_ci                ret = json->GetInt("id", &id);
288e509ee18Sopenharmony_ci                if (ret != Result::SUCCESS) {
289e509ee18Sopenharmony_ci                    return false;
290e509ee18Sopenharmony_ci                }
291e509ee18Sopenharmony_ci
292e509ee18Sopenharmony_ci                std::unique_ptr<PtJson> result = nullptr;
293e509ee18Sopenharmony_ci                ret = json->GetObject("result", &result);
294e509ee18Sopenharmony_ci                if (ret != Result::SUCCESS) {
295e509ee18Sopenharmony_ci                    return false;
296e509ee18Sopenharmony_ci                }
297e509ee18Sopenharmony_ci
298e509ee18Sopenharmony_ci                std::unique_ptr<PtJson> innerResult;
299e509ee18Sopenharmony_ci                ret = result->GetArray("result", &innerResult);
300e509ee18Sopenharmony_ci                if (ret != Result::SUCCESS) {
301e509ee18Sopenharmony_ci                    return false;
302e509ee18Sopenharmony_ci                }
303e509ee18Sopenharmony_ci
304e509ee18Sopenharmony_ci                std::string name;
305e509ee18Sopenharmony_ci                ret = innerResult->Get(0)->GetString("name", &name);
306e509ee18Sopenharmony_ci                if (ret != Result::SUCCESS || name != "a") {
307e509ee18Sopenharmony_ci                    return false;
308e509ee18Sopenharmony_ci                }
309e509ee18Sopenharmony_ci
310e509ee18Sopenharmony_ci                std::unique_ptr<PtJson> value;
311e509ee18Sopenharmony_ci                ret = innerResult->Get(0)->GetObject("value", &value);
312e509ee18Sopenharmony_ci                if (ret != Result::SUCCESS) {
313e509ee18Sopenharmony_ci                    return false;
314e509ee18Sopenharmony_ci                }
315e509ee18Sopenharmony_ci
316e509ee18Sopenharmony_ci                std::string valueDes;
317e509ee18Sopenharmony_ci                ret = value->GetString("description", &valueDes);
318e509ee18Sopenharmony_ci                if (ret != Result::SUCCESS || valueDes != "10") {
319e509ee18Sopenharmony_ci                    return false;
320e509ee18Sopenharmony_ci                }
321e509ee18Sopenharmony_ci                return true;
322e509ee18Sopenharmony_ci            }},
323e509ee18Sopenharmony_ci            // reply success and run
324e509ee18Sopenharmony_ci            {SocketAction::SEND, "success"},
325e509ee18Sopenharmony_ci            {SocketAction::SEND, "resume"},
326e509ee18Sopenharmony_ci            {SocketAction::RECV, "Debugger.resumed", ActionRule::STRING_CONTAIN},
327e509ee18Sopenharmony_ci            {SocketAction::RECV, "", ActionRule::CUSTOM_RULE, MatchRule::replySuccess},
328e509ee18Sopenharmony_ci        };
329e509ee18Sopenharmony_ci    }
330e509ee18Sopenharmony_ci
331e509ee18Sopenharmony_ci    std::pair<std::string, std::string> GetEntryPoint() override
332e509ee18Sopenharmony_ci    {
333e509ee18Sopenharmony_ci        return {pandaFile_, entryPoint_};
334e509ee18Sopenharmony_ci    }
335e509ee18Sopenharmony_ci    ~JsClosureScopeTest() = default;
336e509ee18Sopenharmony_ci
337e509ee18Sopenharmony_ciprivate:
338e509ee18Sopenharmony_ci    std::string pandaFile_ = DEBUGGER_ABC_DIR "closure_scope.abc";
339e509ee18Sopenharmony_ci    std::string sourceFile_ = DEBUGGER_JS_DIR "closure_scope.js";
340e509ee18Sopenharmony_ci    std::string entryPoint_ = "_GLOBAL::func_main_0";
341e509ee18Sopenharmony_ci};
342e509ee18Sopenharmony_ci
343e509ee18Sopenharmony_cistd::unique_ptr<TestActions> GetJsClosureScopeTest()
344e509ee18Sopenharmony_ci{
345e509ee18Sopenharmony_ci    return std::make_unique<JsClosureScopeTest>();
346e509ee18Sopenharmony_ci}
347e509ee18Sopenharmony_ci}  // namespace panda::ecmascript::tooling::test
348e509ee18Sopenharmony_ci
349e509ee18Sopenharmony_ci#endif  // ECMASCRIPT_TOOLING_TEST_TESTCASES_JS_CLOSURE_SCOPE_TEST_H
350