1e509ee18Sopenharmony_ci/*
2e509ee18Sopenharmony_ci * Copyright (c) 2022 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#include "agent/debugger_impl.h"
17e509ee18Sopenharmony_ci#include "ecmascript/tests/test_helper.h"
18e509ee18Sopenharmony_ci#include "protocol_channel.h"
19e509ee18Sopenharmony_ci#include "protocol_handler.h"
20e509ee18Sopenharmony_ci
21e509ee18Sopenharmony_ciusing namespace panda::ecmascript;
22e509ee18Sopenharmony_ciusing namespace panda::ecmascript::tooling;
23e509ee18Sopenharmony_cinamespace panda::ecmascript::tooling {
24e509ee18Sopenharmony_ciclass DebuggerImplFriendTest {
25e509ee18Sopenharmony_cipublic:
26e509ee18Sopenharmony_ci    explicit DebuggerImplFriendTest(std::unique_ptr<DebuggerImpl> &debuggerImpl)
27e509ee18Sopenharmony_ci    {
28e509ee18Sopenharmony_ci        debuggerImpl_ = std::move(debuggerImpl);
29e509ee18Sopenharmony_ci    }
30e509ee18Sopenharmony_ci
31e509ee18Sopenharmony_ci    void CheckAndGenerateCondFunc(const std::optional<std::string> condition)
32e509ee18Sopenharmony_ci    {
33e509ee18Sopenharmony_ci        debuggerImpl_->CheckAndGenerateCondFunc(condition);
34e509ee18Sopenharmony_ci    }
35e509ee18Sopenharmony_ci
36e509ee18Sopenharmony_ci    Local<JSValueRef> ConvertToLocal(const std::string &varValue)
37e509ee18Sopenharmony_ci    {
38e509ee18Sopenharmony_ci        return debuggerImpl_->ConvertToLocal(varValue);
39e509ee18Sopenharmony_ci    }
40e509ee18Sopenharmony_ci
41e509ee18Sopenharmony_ci    bool GetMixStackEnabled()
42e509ee18Sopenharmony_ci    {
43e509ee18Sopenharmony_ci        return debuggerImpl_->mixStackEnabled_;
44e509ee18Sopenharmony_ci    }
45e509ee18Sopenharmony_ci
46e509ee18Sopenharmony_ci    bool DecodeAndCheckBase64(const std::string &src, std::vector<uint8_t> &dest)
47e509ee18Sopenharmony_ci    {
48e509ee18Sopenharmony_ci        return debuggerImpl_->DecodeAndCheckBase64(src, dest);
49e509ee18Sopenharmony_ci    }
50e509ee18Sopenharmony_ciprivate:
51e509ee18Sopenharmony_ci    std::unique_ptr<DebuggerImpl> debuggerImpl_;
52e509ee18Sopenharmony_ci};
53e509ee18Sopenharmony_ci}
54e509ee18Sopenharmony_ci
55e509ee18Sopenharmony_cinamespace panda::test {
56e509ee18Sopenharmony_ciclass DebuggerImplTest : public testing::Test {
57e509ee18Sopenharmony_cipublic:
58e509ee18Sopenharmony_ci    static void SetUpTestCase()
59e509ee18Sopenharmony_ci    {
60e509ee18Sopenharmony_ci        GTEST_LOG_(INFO) << "SetUpTestCase";
61e509ee18Sopenharmony_ci    }
62e509ee18Sopenharmony_ci
63e509ee18Sopenharmony_ci    static void TearDownTestCase()
64e509ee18Sopenharmony_ci    {
65e509ee18Sopenharmony_ci        GTEST_LOG_(INFO) << "TearDownCase";
66e509ee18Sopenharmony_ci    }
67e509ee18Sopenharmony_ci
68e509ee18Sopenharmony_ci    void SetUp() override
69e509ee18Sopenharmony_ci    {
70e509ee18Sopenharmony_ci        TestHelper::CreateEcmaVMWithScope(ecmaVm, thread, scope);
71e509ee18Sopenharmony_ci    }
72e509ee18Sopenharmony_ci
73e509ee18Sopenharmony_ci    void TearDown() override
74e509ee18Sopenharmony_ci    {
75e509ee18Sopenharmony_ci        TestHelper::DestroyEcmaVMWithScope(ecmaVm, scope);
76e509ee18Sopenharmony_ci    }
77e509ee18Sopenharmony_ci
78e509ee18Sopenharmony_ciprotected:
79e509ee18Sopenharmony_ci    EcmaVM *ecmaVm {nullptr};
80e509ee18Sopenharmony_ci    EcmaHandleScope *scope {nullptr};
81e509ee18Sopenharmony_ci    JSThread *thread {nullptr};
82e509ee18Sopenharmony_ci};
83e509ee18Sopenharmony_ci
84e509ee18Sopenharmony_ciHWTEST_F_L0(DebuggerImplTest, NotifyScriptParsed__001)
85e509ee18Sopenharmony_ci{
86e509ee18Sopenharmony_ci    std::string outStrForCallbackCheck = "";
87e509ee18Sopenharmony_ci    std::function<void(const void*, const std::string &)> callback =
88e509ee18Sopenharmony_ci        [&outStrForCallbackCheck]([[maybe_unused]] const void *ptr, const std::string &inStrOfReply) {
89e509ee18Sopenharmony_ci            outStrForCallbackCheck = inStrOfReply;};
90e509ee18Sopenharmony_ci    ProtocolChannel *protocolChannel = new ProtocolHandler(callback, ecmaVm);
91e509ee18Sopenharmony_ci    auto runtimeImpl = std::make_unique<RuntimeImpl>(ecmaVm, protocolChannel);
92e509ee18Sopenharmony_ci    auto debuggerImpl = std::make_unique<DebuggerImpl>(ecmaVm, protocolChannel, runtimeImpl.get());
93e509ee18Sopenharmony_ci
94e509ee18Sopenharmony_ci    // DebuggerImpl::NotifyScriptParsed -- fileName.substr(0, DATA_APP_PATH.length()) != DATA_APP_PATH
95e509ee18Sopenharmony_ci    std::string strFilename = "filename";
96e509ee18Sopenharmony_ci    EXPECT_FALSE(debuggerImpl->NotifyScriptParsed(strFilename, ""));
97e509ee18Sopenharmony_ci
98e509ee18Sopenharmony_ci    // DebuggerImpl::NotifyScriptParsed -- fileName.substr(0, DATA_APP_PATH.length()) != DATA_APP_PATH
99e509ee18Sopenharmony_ci    strFilename = "/filename";
100e509ee18Sopenharmony_ci    EXPECT_FALSE(debuggerImpl->NotifyScriptParsed(strFilename, ""));
101e509ee18Sopenharmony_ci
102e509ee18Sopenharmony_ci    if (protocolChannel) {
103e509ee18Sopenharmony_ci        delete protocolChannel;
104e509ee18Sopenharmony_ci        protocolChannel = nullptr;
105e509ee18Sopenharmony_ci    }
106e509ee18Sopenharmony_ci}
107e509ee18Sopenharmony_ci
108e509ee18Sopenharmony_ciHWTEST_F_L0(DebuggerImplTest, NotifyScriptParsed__002)
109e509ee18Sopenharmony_ci{
110e509ee18Sopenharmony_ci    std::string outStrForCallbackCheck = "";
111e509ee18Sopenharmony_ci    std::function<void(const void*, const std::string &)> callback =
112e509ee18Sopenharmony_ci        [&outStrForCallbackCheck]([[maybe_unused]] const void *ptr, const std::string &inStrOfReply) {
113e509ee18Sopenharmony_ci            outStrForCallbackCheck = inStrOfReply;};
114e509ee18Sopenharmony_ci    ProtocolChannel *protocolChannel = new ProtocolHandler(callback, ecmaVm);
115e509ee18Sopenharmony_ci    auto runtimeImpl = std::make_unique<RuntimeImpl>(ecmaVm, protocolChannel);
116e509ee18Sopenharmony_ci    auto debuggerImpl = std::make_unique<DebuggerImpl>(ecmaVm, protocolChannel, runtimeImpl.get());
117e509ee18Sopenharmony_ci    ecmaVm->GetJsDebuggerManager()->SetIsDebugApp(true);
118e509ee18Sopenharmony_ci    ecmaVm->GetJsDebuggerManager()->SetDebugMode(true);
119e509ee18Sopenharmony_ci    // DebuggerImpl::NotifyScriptParsed -- fileName.substr(0, DATA_APP_PATH.length()) != DATA_APP_PATH
120e509ee18Sopenharmony_ci    std::string strFilename = "";
121e509ee18Sopenharmony_ci    EXPECT_FALSE(debuggerImpl->NotifyScriptParsed(strFilename, ""));
122e509ee18Sopenharmony_ci    ecmaVm->GetJsDebuggerManager()->SetIsDebugApp(false);
123e509ee18Sopenharmony_ci    ecmaVm->GetJsDebuggerManager()->SetDebugMode(false);
124e509ee18Sopenharmony_ci    if (protocolChannel) {
125e509ee18Sopenharmony_ci        delete protocolChannel;
126e509ee18Sopenharmony_ci        protocolChannel = nullptr;
127e509ee18Sopenharmony_ci    }
128e509ee18Sopenharmony_ci}
129e509ee18Sopenharmony_ci
130e509ee18Sopenharmony_ciHWTEST_F_L0(DebuggerImplTest, GenerateCallFrames__001)
131e509ee18Sopenharmony_ci{
132e509ee18Sopenharmony_ci}
133e509ee18Sopenharmony_ci
134e509ee18Sopenharmony_ciHWTEST_F_L0(DebuggerImplTest, Dispatcher_Dispatch_Enable__001)
135e509ee18Sopenharmony_ci{
136e509ee18Sopenharmony_ci    std::string outStrForCallbackCheck = "";
137e509ee18Sopenharmony_ci    std::function<void(const void*, const std::string &)> callback =
138e509ee18Sopenharmony_ci        [&outStrForCallbackCheck]([[maybe_unused]] const void *ptr, const std::string &inStrOfReply) {
139e509ee18Sopenharmony_ci            outStrForCallbackCheck = inStrOfReply;};
140e509ee18Sopenharmony_ci    ProtocolChannel *protocolChannel = new ProtocolHandler(callback, ecmaVm);
141e509ee18Sopenharmony_ci    auto runtimeImpl = std::make_unique<RuntimeImpl>(ecmaVm, protocolChannel);
142e509ee18Sopenharmony_ci    auto debuggerImpl = std::make_unique<DebuggerImpl>(ecmaVm, protocolChannel, runtimeImpl.get());
143e509ee18Sopenharmony_ci    auto dispatcherImpl = std::make_unique<DebuggerImpl::DispatcherImpl>(protocolChannel, std::move(debuggerImpl));
144e509ee18Sopenharmony_ci
145e509ee18Sopenharmony_ci    // DebuggerImpl::DispatcherImpl::Enable -- params == nullptr
146e509ee18Sopenharmony_ci    std::string msg = std::string() +
147e509ee18Sopenharmony_ci        R"({
148e509ee18Sopenharmony_ci            "id":0,
149e509ee18Sopenharmony_ci            "method":"Debugger.enable",
150e509ee18Sopenharmony_ci            "params":{
151e509ee18Sopenharmony_ci                "maxScriptsCacheSize":"NotIntValue"
152e509ee18Sopenharmony_ci            }
153e509ee18Sopenharmony_ci        })";
154e509ee18Sopenharmony_ci    DispatchRequest request(msg);
155e509ee18Sopenharmony_ci    dispatcherImpl->Dispatch(request);
156e509ee18Sopenharmony_ci
157e509ee18Sopenharmony_ci    EXPECT_STREQ(outStrForCallbackCheck.c_str(), R"({"id":0,"result":{"code":1,"message":"wrong params"}})");
158e509ee18Sopenharmony_ci    if (protocolChannel) {
159e509ee18Sopenharmony_ci        delete protocolChannel;
160e509ee18Sopenharmony_ci        protocolChannel = nullptr;
161e509ee18Sopenharmony_ci    }
162e509ee18Sopenharmony_ci}
163e509ee18Sopenharmony_ci
164e509ee18Sopenharmony_ciHWTEST_F_L0(DebuggerImplTest, Dispatcher_Dispatch_Enable__002)
165e509ee18Sopenharmony_ci{
166e509ee18Sopenharmony_ci    std::string outStrForCallbackCheck = "";
167e509ee18Sopenharmony_ci    std::function<void(const void*, const std::string &)> callback =
168e509ee18Sopenharmony_ci        [&outStrForCallbackCheck]([[maybe_unused]] const void *ptr, const std::string &inStrOfReply) {
169e509ee18Sopenharmony_ci            outStrForCallbackCheck = inStrOfReply;};
170e509ee18Sopenharmony_ci    ProtocolChannel *protocolChannel = new ProtocolHandler(callback, ecmaVm);
171e509ee18Sopenharmony_ci    auto runtimeImpl = std::make_unique<RuntimeImpl>(ecmaVm, protocolChannel);
172e509ee18Sopenharmony_ci    auto debuggerImpl = std::make_unique<DebuggerImpl>(ecmaVm, protocolChannel, runtimeImpl.get());
173e509ee18Sopenharmony_ci    auto dispatcherImpl = std::make_unique<DebuggerImpl::DispatcherImpl>(protocolChannel, std::move(debuggerImpl));
174e509ee18Sopenharmony_ci    EXPECT_FALSE(ecmaVm->GetJsDebuggerManager()->IsDebugMode());
175e509ee18Sopenharmony_ci
176e509ee18Sopenharmony_ci    std::string msg = std::string() +
177e509ee18Sopenharmony_ci        R"({
178e509ee18Sopenharmony_ci            "id":0,
179e509ee18Sopenharmony_ci            "method":"Debugger.enable",
180e509ee18Sopenharmony_ci            "params":{
181e509ee18Sopenharmony_ci                "maxScriptsCacheSize":1024
182e509ee18Sopenharmony_ci            }
183e509ee18Sopenharmony_ci        })";
184e509ee18Sopenharmony_ci    DispatchRequest request(msg);
185e509ee18Sopenharmony_ci    dispatcherImpl->Dispatch(request);
186e509ee18Sopenharmony_ci
187e509ee18Sopenharmony_ci    bool condition = outStrForCallbackCheck.find("protocols") != std::string::npos &&
188e509ee18Sopenharmony_ci        outStrForCallbackCheck.find("debuggerId") != std::string::npos;
189e509ee18Sopenharmony_ci    EXPECT_TRUE(condition);
190e509ee18Sopenharmony_ci    EXPECT_TRUE(ecmaVm->GetJsDebuggerManager()->IsDebugMode());
191e509ee18Sopenharmony_ci    if (protocolChannel) {
192e509ee18Sopenharmony_ci        delete protocolChannel;
193e509ee18Sopenharmony_ci        protocolChannel = nullptr;
194e509ee18Sopenharmony_ci    }
195e509ee18Sopenharmony_ci}
196e509ee18Sopenharmony_ci
197e509ee18Sopenharmony_ciHWTEST_F_L0(DebuggerImplTest, Dispatcher_Dispatch_Disable__001)
198e509ee18Sopenharmony_ci{
199e509ee18Sopenharmony_ci    std::string outStrForCallbackCheck = "";
200e509ee18Sopenharmony_ci    std::function<void(const void*, const std::string &)> callback =
201e509ee18Sopenharmony_ci        [&outStrForCallbackCheck]([[maybe_unused]] const void *ptr, const std::string &inStrOfReply) {
202e509ee18Sopenharmony_ci            outStrForCallbackCheck = inStrOfReply;};
203e509ee18Sopenharmony_ci    ProtocolChannel *protocolChannel = new ProtocolHandler(callback, ecmaVm);
204e509ee18Sopenharmony_ci    auto runtimeImpl = std::make_unique<RuntimeImpl>(ecmaVm, protocolChannel);
205e509ee18Sopenharmony_ci    auto debuggerImpl = std::make_unique<DebuggerImpl>(ecmaVm, protocolChannel, runtimeImpl.get());
206e509ee18Sopenharmony_ci    auto dispatcherImpl = std::make_unique<DebuggerImpl::DispatcherImpl>(protocolChannel, std::move(debuggerImpl));
207e509ee18Sopenharmony_ci    ecmaVm->GetJsDebuggerManager()->SetDebugMode(true);
208e509ee18Sopenharmony_ci
209e509ee18Sopenharmony_ci    std::string msg = std::string() +
210e509ee18Sopenharmony_ci        R"({
211e509ee18Sopenharmony_ci            "id":0,
212e509ee18Sopenharmony_ci            "method":"Debugger.disable"
213e509ee18Sopenharmony_ci        })";
214e509ee18Sopenharmony_ci    DispatchRequest request(msg);
215e509ee18Sopenharmony_ci
216e509ee18Sopenharmony_ci    dispatcherImpl->Dispatch(request);
217e509ee18Sopenharmony_ci    EXPECT_STREQ(outStrForCallbackCheck.c_str(), R"({"id":0,"result":{}})");
218e509ee18Sopenharmony_ci    EXPECT_FALSE(ecmaVm->GetJsDebuggerManager()->IsDebugMode());
219e509ee18Sopenharmony_ci    if (protocolChannel) {
220e509ee18Sopenharmony_ci        delete protocolChannel;
221e509ee18Sopenharmony_ci        protocolChannel = nullptr;
222e509ee18Sopenharmony_ci    }
223e509ee18Sopenharmony_ci}
224e509ee18Sopenharmony_ci
225e509ee18Sopenharmony_ciHWTEST_F_L0(DebuggerImplTest, Dispatcher_Dispatch_EvaluateOnCallFrame__001)
226e509ee18Sopenharmony_ci{
227e509ee18Sopenharmony_ci    std::string outStrForCallbackCheck = "";
228e509ee18Sopenharmony_ci    std::function<void(const void*, const std::string &)> callback =
229e509ee18Sopenharmony_ci        [&outStrForCallbackCheck]([[maybe_unused]] const void *ptr, const std::string &inStrOfReply) {
230e509ee18Sopenharmony_ci            outStrForCallbackCheck = inStrOfReply;};
231e509ee18Sopenharmony_ci    ProtocolChannel *protocolChannel = new ProtocolHandler(callback, ecmaVm);
232e509ee18Sopenharmony_ci    auto runtimeImpl = std::make_unique<RuntimeImpl>(ecmaVm, protocolChannel);
233e509ee18Sopenharmony_ci    auto debuggerImpl = std::make_unique<DebuggerImpl>(ecmaVm, protocolChannel, runtimeImpl.get());
234e509ee18Sopenharmony_ci    auto dispatcherImpl = std::make_unique<DebuggerImpl::DispatcherImpl>(protocolChannel, std::move(debuggerImpl));
235e509ee18Sopenharmony_ci
236e509ee18Sopenharmony_ci    // DebuggerImpl::DispatcherImpl::EvaluateOnCallFrame -- params == nullptr
237e509ee18Sopenharmony_ci    std::string msg = std::string() +
238e509ee18Sopenharmony_ci        R"({
239e509ee18Sopenharmony_ci            "id":0,
240e509ee18Sopenharmony_ci            "method":"Debugger.evaluateOnCallFrame",
241e509ee18Sopenharmony_ci            "params":{}
242e509ee18Sopenharmony_ci        })";
243e509ee18Sopenharmony_ci    DispatchRequest request(msg);
244e509ee18Sopenharmony_ci
245e509ee18Sopenharmony_ci    dispatcherImpl->Dispatch(request);
246e509ee18Sopenharmony_ci    EXPECT_STREQ(outStrForCallbackCheck.c_str(), R"({"id":0,"result":{"code":1,"message":"wrong params"}})");
247e509ee18Sopenharmony_ci    if (protocolChannel) {
248e509ee18Sopenharmony_ci        delete protocolChannel;
249e509ee18Sopenharmony_ci        protocolChannel = nullptr;
250e509ee18Sopenharmony_ci    }
251e509ee18Sopenharmony_ci}
252e509ee18Sopenharmony_ci
253e509ee18Sopenharmony_ciHWTEST_F_L0(DebuggerImplTest, Dispatcher_Dispatch_EvaluateOnCallFrame__002)
254e509ee18Sopenharmony_ci{
255e509ee18Sopenharmony_ci    std::string outStrForCallbackCheck = "";
256e509ee18Sopenharmony_ci    std::function<void(const void*, const std::string &)> callback =
257e509ee18Sopenharmony_ci        [&outStrForCallbackCheck]([[maybe_unused]] const void *ptr, const std::string &inStrOfReply) {
258e509ee18Sopenharmony_ci            outStrForCallbackCheck = inStrOfReply;};
259e509ee18Sopenharmony_ci    ProtocolChannel *protocolChannel = new ProtocolHandler(callback, ecmaVm);
260e509ee18Sopenharmony_ci    auto runtimeImpl = std::make_unique<RuntimeImpl>(ecmaVm, protocolChannel);
261e509ee18Sopenharmony_ci    auto debuggerImpl = std::make_unique<DebuggerImpl>(ecmaVm, protocolChannel, runtimeImpl.get());
262e509ee18Sopenharmony_ci    auto dispatcherImpl = std::make_unique<DebuggerImpl::DispatcherImpl>(protocolChannel, std::move(debuggerImpl));
263e509ee18Sopenharmony_ci
264e509ee18Sopenharmony_ci    // DebuggerImpl::EvaluateOnCallFrame -- callFrameId < 0
265e509ee18Sopenharmony_ci    std::string msg = std::string() +
266e509ee18Sopenharmony_ci        R"({
267e509ee18Sopenharmony_ci            "id":0,
268e509ee18Sopenharmony_ci            "method":"Debugger.evaluateOnCallFrame",
269e509ee18Sopenharmony_ci            "params":{
270e509ee18Sopenharmony_ci                "callFrameId":"-1",
271e509ee18Sopenharmony_ci                "expression":"the expression"
272e509ee18Sopenharmony_ci            }
273e509ee18Sopenharmony_ci        })";
274e509ee18Sopenharmony_ci    DispatchRequest request(msg);
275e509ee18Sopenharmony_ci
276e509ee18Sopenharmony_ci    dispatcherImpl->Dispatch(request);
277e509ee18Sopenharmony_ci    EXPECT_STREQ(outStrForCallbackCheck.c_str(), R"({"id":0,"result":{"code":1,"message":"Invalid callFrameId."}})");
278e509ee18Sopenharmony_ci    if (protocolChannel) {
279e509ee18Sopenharmony_ci        delete protocolChannel;
280e509ee18Sopenharmony_ci        protocolChannel = nullptr;
281e509ee18Sopenharmony_ci    }
282e509ee18Sopenharmony_ci}
283e509ee18Sopenharmony_ci
284e509ee18Sopenharmony_ciHWTEST_F_L0(DebuggerImplTest, Dispatcher_Dispatch_EvaluateOnCallFrame__003)
285e509ee18Sopenharmony_ci{
286e509ee18Sopenharmony_ci    std::string outStrForCallbackCheck = "";
287e509ee18Sopenharmony_ci    std::function<void(const void*, const std::string &)> callback =
288e509ee18Sopenharmony_ci        [&outStrForCallbackCheck]([[maybe_unused]] const void *ptr, const std::string &inStrOfReply) {
289e509ee18Sopenharmony_ci            outStrForCallbackCheck = inStrOfReply;};
290e509ee18Sopenharmony_ci    ProtocolChannel *protocolChannel = new ProtocolHandler(callback, ecmaVm);
291e509ee18Sopenharmony_ci    auto runtimeImpl = std::make_unique<RuntimeImpl>(ecmaVm, protocolChannel);
292e509ee18Sopenharmony_ci    auto debuggerImpl = std::make_unique<DebuggerImpl>(ecmaVm, protocolChannel, runtimeImpl.get());
293e509ee18Sopenharmony_ci    auto dispatcherImpl = std::make_unique<DebuggerImpl::DispatcherImpl>(protocolChannel, std::move(debuggerImpl));
294e509ee18Sopenharmony_ci
295e509ee18Sopenharmony_ci    // DebuggerImpl::EvaluateOnCallFrame -- callFrameId >= static_cast<CallFrameId>(callFrameHandlers_.size())
296e509ee18Sopenharmony_ci    std::string msg = std::string() +
297e509ee18Sopenharmony_ci        R"({
298e509ee18Sopenharmony_ci            "id":0,
299e509ee18Sopenharmony_ci            "method":"Debugger.evaluateOnCallFrame",
300e509ee18Sopenharmony_ci            "params":{
301e509ee18Sopenharmony_ci                "callFrameId":"0",
302e509ee18Sopenharmony_ci                "expression":"the expression"
303e509ee18Sopenharmony_ci            }
304e509ee18Sopenharmony_ci        })";
305e509ee18Sopenharmony_ci    DispatchRequest request(msg);
306e509ee18Sopenharmony_ci
307e509ee18Sopenharmony_ci    dispatcherImpl->Dispatch(request);
308e509ee18Sopenharmony_ci    EXPECT_STREQ(outStrForCallbackCheck.c_str(), R"({"id":0,"result":{"code":1,"message":"Invalid callFrameId."}})");
309e509ee18Sopenharmony_ci    if (protocolChannel) {
310e509ee18Sopenharmony_ci        delete protocolChannel;
311e509ee18Sopenharmony_ci        protocolChannel = nullptr;
312e509ee18Sopenharmony_ci    }
313e509ee18Sopenharmony_ci}
314e509ee18Sopenharmony_ci
315e509ee18Sopenharmony_ciHWTEST_F_L0(DebuggerImplTest, Dispatcher_Dispatch_GetPossibleBreakpoints__001)
316e509ee18Sopenharmony_ci{
317e509ee18Sopenharmony_ci    std::string outStrForCallbackCheck = "";
318e509ee18Sopenharmony_ci    std::function<void(const void*, const std::string &)> callback =
319e509ee18Sopenharmony_ci        [&outStrForCallbackCheck]([[maybe_unused]] const void *ptr, const std::string &inStrOfReply) {
320e509ee18Sopenharmony_ci            outStrForCallbackCheck = inStrOfReply;};
321e509ee18Sopenharmony_ci    ProtocolChannel *protocolChannel = new ProtocolHandler(callback, ecmaVm);
322e509ee18Sopenharmony_ci    auto runtimeImpl = std::make_unique<RuntimeImpl>(ecmaVm, protocolChannel);
323e509ee18Sopenharmony_ci    auto debuggerImpl = std::make_unique<DebuggerImpl>(ecmaVm, protocolChannel, runtimeImpl.get());
324e509ee18Sopenharmony_ci    auto dispatcherImpl = std::make_unique<DebuggerImpl::DispatcherImpl>(protocolChannel, std::move(debuggerImpl));
325e509ee18Sopenharmony_ci
326e509ee18Sopenharmony_ci    // DebuggerImpl::DispatcherImpl::GetPossibleBreakpoints -- params == nullptr
327e509ee18Sopenharmony_ci    std::string msg = std::string() +
328e509ee18Sopenharmony_ci        R"({
329e509ee18Sopenharmony_ci            "id":0,
330e509ee18Sopenharmony_ci            "method":"Debugger.getPossibleBreakpoints",
331e509ee18Sopenharmony_ci            "params":{}
332e509ee18Sopenharmony_ci        })";
333e509ee18Sopenharmony_ci    DispatchRequest request(msg);
334e509ee18Sopenharmony_ci
335e509ee18Sopenharmony_ci    dispatcherImpl->Dispatch(request);
336e509ee18Sopenharmony_ci    EXPECT_STREQ(outStrForCallbackCheck.c_str(), R"({"id":0,"result":{"code":1,"message":"wrong params"}})");
337e509ee18Sopenharmony_ci    if (protocolChannel) {
338e509ee18Sopenharmony_ci        delete protocolChannel;
339e509ee18Sopenharmony_ci        protocolChannel = nullptr;
340e509ee18Sopenharmony_ci    }
341e509ee18Sopenharmony_ci}
342e509ee18Sopenharmony_ci
343e509ee18Sopenharmony_ciHWTEST_F_L0(DebuggerImplTest, Dispatcher_Dispatch_GetPossibleBreakpoints__002)
344e509ee18Sopenharmony_ci{
345e509ee18Sopenharmony_ci    std::string outStrForCallbackCheck = "";
346e509ee18Sopenharmony_ci    std::function<void(const void*, const std::string &)> callback =
347e509ee18Sopenharmony_ci        [&outStrForCallbackCheck]([[maybe_unused]] const void *ptr, const std::string &inStrOfReply) {
348e509ee18Sopenharmony_ci            outStrForCallbackCheck = inStrOfReply;};
349e509ee18Sopenharmony_ci    ProtocolChannel *protocolChannel = new ProtocolHandler(callback, ecmaVm);
350e509ee18Sopenharmony_ci    auto runtimeImpl = std::make_unique<RuntimeImpl>(ecmaVm, protocolChannel);
351e509ee18Sopenharmony_ci    auto debuggerImpl = std::make_unique<DebuggerImpl>(ecmaVm, protocolChannel, runtimeImpl.get());
352e509ee18Sopenharmony_ci    auto dispatcherImpl = std::make_unique<DebuggerImpl::DispatcherImpl>(protocolChannel, std::move(debuggerImpl));
353e509ee18Sopenharmony_ci
354e509ee18Sopenharmony_ci    // DebuggerImpl::GetPossibleBreakpoints -- iter == scripts_.end()
355e509ee18Sopenharmony_ci    std::string msg = std::string() +
356e509ee18Sopenharmony_ci        R"({
357e509ee18Sopenharmony_ci            "id":0,
358e509ee18Sopenharmony_ci            "method":"Debugger.getPossibleBreakpoints",
359e509ee18Sopenharmony_ci            "params":{
360e509ee18Sopenharmony_ci                "start":{
361e509ee18Sopenharmony_ci                    "scriptId":"0",
362e509ee18Sopenharmony_ci                    "lineNumber":1,
363e509ee18Sopenharmony_ci                    "columnNumber":0
364e509ee18Sopenharmony_ci                },
365e509ee18Sopenharmony_ci                "end":{
366e509ee18Sopenharmony_ci                    "scriptId":"0",
367e509ee18Sopenharmony_ci                    "lineNumber":1,
368e509ee18Sopenharmony_ci                    "columnNumber":0
369e509ee18Sopenharmony_ci                },
370e509ee18Sopenharmony_ci                "restrictToFunction":true
371e509ee18Sopenharmony_ci            }
372e509ee18Sopenharmony_ci        })";
373e509ee18Sopenharmony_ci    DispatchRequest request(msg);
374e509ee18Sopenharmony_ci
375e509ee18Sopenharmony_ci    dispatcherImpl->Dispatch(request);
376e509ee18Sopenharmony_ci    EXPECT_STREQ(outStrForCallbackCheck.c_str(), R"({"id":0,"result":{"code":1,"message":"Unknown file name."}})");
377e509ee18Sopenharmony_ci    if (protocolChannel) {
378e509ee18Sopenharmony_ci        delete protocolChannel;
379e509ee18Sopenharmony_ci        protocolChannel = nullptr;
380e509ee18Sopenharmony_ci    }
381e509ee18Sopenharmony_ci}
382e509ee18Sopenharmony_ci
383e509ee18Sopenharmony_ciHWTEST_F_L0(DebuggerImplTest, Dispatcher_Dispatch_GetScriptSource__001)
384e509ee18Sopenharmony_ci{
385e509ee18Sopenharmony_ci    std::string outStrForCallbackCheck = "";
386e509ee18Sopenharmony_ci    std::function<void(const void*, const std::string &)> callback =
387e509ee18Sopenharmony_ci        [&outStrForCallbackCheck]([[maybe_unused]] const void *ptr, const std::string &inStrOfReply) {
388e509ee18Sopenharmony_ci            outStrForCallbackCheck = inStrOfReply;};
389e509ee18Sopenharmony_ci    ProtocolChannel *protocolChannel = new ProtocolHandler(callback, ecmaVm);
390e509ee18Sopenharmony_ci    auto runtimeImpl = std::make_unique<RuntimeImpl>(ecmaVm, protocolChannel);
391e509ee18Sopenharmony_ci    auto debuggerImpl = std::make_unique<DebuggerImpl>(ecmaVm, protocolChannel, runtimeImpl.get());
392e509ee18Sopenharmony_ci    auto dispatcherImpl = std::make_unique<DebuggerImpl::DispatcherImpl>(protocolChannel, std::move(debuggerImpl));
393e509ee18Sopenharmony_ci
394e509ee18Sopenharmony_ci    // DebuggerImpl::DispatcherImpl::GetScriptSource -- params == nullptr
395e509ee18Sopenharmony_ci    std::string msg = std::string() +
396e509ee18Sopenharmony_ci        R"({
397e509ee18Sopenharmony_ci            "id":0,
398e509ee18Sopenharmony_ci            "method":"Debugger.getScriptSource",
399e509ee18Sopenharmony_ci            "params":{}
400e509ee18Sopenharmony_ci        })";
401e509ee18Sopenharmony_ci    DispatchRequest request(msg);
402e509ee18Sopenharmony_ci
403e509ee18Sopenharmony_ci    dispatcherImpl->Dispatch(request);
404e509ee18Sopenharmony_ci    EXPECT_STREQ(outStrForCallbackCheck.c_str(), R"({"id":0,"result":{"code":1,"message":"wrong params"}})");
405e509ee18Sopenharmony_ci    if (protocolChannel) {
406e509ee18Sopenharmony_ci        delete protocolChannel;
407e509ee18Sopenharmony_ci        protocolChannel = nullptr;
408e509ee18Sopenharmony_ci    }
409e509ee18Sopenharmony_ci}
410e509ee18Sopenharmony_ci
411e509ee18Sopenharmony_ciHWTEST_F_L0(DebuggerImplTest, Dispatcher_Dispatch_GetScriptSource__002)
412e509ee18Sopenharmony_ci{
413e509ee18Sopenharmony_ci    std::string outStrForCallbackCheck = "";
414e509ee18Sopenharmony_ci    std::function<void(const void*, const std::string &)> callback =
415e509ee18Sopenharmony_ci        [&outStrForCallbackCheck]([[maybe_unused]] const void *ptr, const std::string &inStrOfReply) {
416e509ee18Sopenharmony_ci            outStrForCallbackCheck = inStrOfReply;};
417e509ee18Sopenharmony_ci    ProtocolChannel *protocolChannel = new ProtocolHandler(callback, ecmaVm);
418e509ee18Sopenharmony_ci    auto runtimeImpl = std::make_unique<RuntimeImpl>(ecmaVm, protocolChannel);
419e509ee18Sopenharmony_ci    auto debuggerImpl = std::make_unique<DebuggerImpl>(ecmaVm, protocolChannel, runtimeImpl.get());
420e509ee18Sopenharmony_ci    auto dispatcherImpl = std::make_unique<DebuggerImpl::DispatcherImpl>(protocolChannel, std::move(debuggerImpl));
421e509ee18Sopenharmony_ci
422e509ee18Sopenharmony_ci    // DebuggerImpl::GetScriptSource -- iter == scripts_.end()
423e509ee18Sopenharmony_ci    std::string msg = std::string() +
424e509ee18Sopenharmony_ci        R"({
425e509ee18Sopenharmony_ci            "id":0,
426e509ee18Sopenharmony_ci            "method":"Debugger.getScriptSource",
427e509ee18Sopenharmony_ci            "params":{
428e509ee18Sopenharmony_ci                "scriptId":"0"
429e509ee18Sopenharmony_ci            }
430e509ee18Sopenharmony_ci        })";
431e509ee18Sopenharmony_ci    DispatchRequest request(msg);
432e509ee18Sopenharmony_ci
433e509ee18Sopenharmony_ci    dispatcherImpl->Dispatch(request);
434e509ee18Sopenharmony_ci    EXPECT_STREQ(outStrForCallbackCheck.c_str(), R"({"id":0,"result":{"code":1,"message":"unknown script id: 0"}})");
435e509ee18Sopenharmony_ci    if (protocolChannel) {
436e509ee18Sopenharmony_ci        delete protocolChannel;
437e509ee18Sopenharmony_ci        protocolChannel = nullptr;
438e509ee18Sopenharmony_ci    }
439e509ee18Sopenharmony_ci}
440e509ee18Sopenharmony_ci
441e509ee18Sopenharmony_ciHWTEST_F_L0(DebuggerImplTest, Dispatcher_Dispatch_Pause__001)
442e509ee18Sopenharmony_ci{
443e509ee18Sopenharmony_ci    std::string outStrForCallbackCheck = "";
444e509ee18Sopenharmony_ci    std::function<void(const void*, const std::string &)> callback =
445e509ee18Sopenharmony_ci        [&outStrForCallbackCheck]([[maybe_unused]] const void *ptr, const std::string &inStrOfReply) {
446e509ee18Sopenharmony_ci            outStrForCallbackCheck = inStrOfReply;};
447e509ee18Sopenharmony_ci    ProtocolChannel *protocolChannel = new ProtocolHandler(callback, ecmaVm);
448e509ee18Sopenharmony_ci    auto runtimeImpl = std::make_unique<RuntimeImpl>(ecmaVm, protocolChannel);
449e509ee18Sopenharmony_ci    auto debuggerImpl = std::make_unique<DebuggerImpl>(ecmaVm, protocolChannel, runtimeImpl.get());
450e509ee18Sopenharmony_ci    auto dispatcherImpl = std::make_unique<DebuggerImpl::DispatcherImpl>(protocolChannel, std::move(debuggerImpl));
451e509ee18Sopenharmony_ci
452e509ee18Sopenharmony_ci    // DDebuggerImpl::DispatcherImpl::GetScriptSource -- params == nullptr
453e509ee18Sopenharmony_ci    std::string msg = std::string() +
454e509ee18Sopenharmony_ci        R"({
455e509ee18Sopenharmony_ci            "id":0,
456e509ee18Sopenharmony_ci            "method":"Debugger.pause"
457e509ee18Sopenharmony_ci        })";
458e509ee18Sopenharmony_ci    DispatchRequest request(msg);
459e509ee18Sopenharmony_ci
460e509ee18Sopenharmony_ci    dispatcherImpl->Dispatch(request);
461e509ee18Sopenharmony_ci    EXPECT_STREQ(outStrForCallbackCheck.c_str(), R"({"id":0,"result":{}})");
462e509ee18Sopenharmony_ci    if (protocolChannel) {
463e509ee18Sopenharmony_ci        delete protocolChannel;
464e509ee18Sopenharmony_ci        protocolChannel = nullptr;
465e509ee18Sopenharmony_ci    }
466e509ee18Sopenharmony_ci}
467e509ee18Sopenharmony_ci
468e509ee18Sopenharmony_ciHWTEST_F_L0(DebuggerImplTest, Dispatcher_Dispatch_RemoveBreakpoint__001)
469e509ee18Sopenharmony_ci{
470e509ee18Sopenharmony_ci    std::string outStrForCallbackCheck = "";
471e509ee18Sopenharmony_ci    std::function<void(const void*, const std::string &)> callback =
472e509ee18Sopenharmony_ci        [&outStrForCallbackCheck]([[maybe_unused]] const void *ptr, const std::string &inStrOfReply) {
473e509ee18Sopenharmony_ci            outStrForCallbackCheck = inStrOfReply;};
474e509ee18Sopenharmony_ci    ProtocolChannel *protocolChannel = new ProtocolHandler(callback, ecmaVm);
475e509ee18Sopenharmony_ci    auto runtimeImpl = std::make_unique<RuntimeImpl>(ecmaVm, protocolChannel);
476e509ee18Sopenharmony_ci    auto debuggerImpl = std::make_unique<DebuggerImpl>(ecmaVm, protocolChannel, runtimeImpl.get());
477e509ee18Sopenharmony_ci    auto dispatcherImpl = std::make_unique<DebuggerImpl::DispatcherImpl>(protocolChannel, std::move(debuggerImpl));
478e509ee18Sopenharmony_ci
479e509ee18Sopenharmony_ci    // DDebuggerImpl::DispatcherImpl::RemoveBreakpoint -- params == nullptr
480e509ee18Sopenharmony_ci    std::string msg = std::string() +
481e509ee18Sopenharmony_ci        R"({
482e509ee18Sopenharmony_ci            "id":0,
483e509ee18Sopenharmony_ci            "method":"Debugger.removeBreakpoint",
484e509ee18Sopenharmony_ci            "params":{}
485e509ee18Sopenharmony_ci        })";
486e509ee18Sopenharmony_ci    DispatchRequest request(msg);
487e509ee18Sopenharmony_ci
488e509ee18Sopenharmony_ci    dispatcherImpl->Dispatch(request);
489e509ee18Sopenharmony_ci    EXPECT_STREQ(outStrForCallbackCheck.c_str(), R"({"id":0,"result":{"code":1,"message":"wrong params"}})");
490e509ee18Sopenharmony_ci    if (protocolChannel) {
491e509ee18Sopenharmony_ci        delete protocolChannel;
492e509ee18Sopenharmony_ci        protocolChannel = nullptr;
493e509ee18Sopenharmony_ci    }
494e509ee18Sopenharmony_ci}
495e509ee18Sopenharmony_ci
496e509ee18Sopenharmony_ciHWTEST_F_L0(DebuggerImplTest, Dispatcher_Dispatch_RemoveBreakpoint__002)
497e509ee18Sopenharmony_ci{
498e509ee18Sopenharmony_ci    std::string outStrForCallbackCheck = "";
499e509ee18Sopenharmony_ci    std::function<void(const void*, const std::string &)> callback =
500e509ee18Sopenharmony_ci        [&outStrForCallbackCheck]([[maybe_unused]] const void *ptr, const std::string &inStrOfReply) {
501e509ee18Sopenharmony_ci            outStrForCallbackCheck = inStrOfReply;};
502e509ee18Sopenharmony_ci    ProtocolChannel *protocolChannel = new ProtocolHandler(callback, ecmaVm);
503e509ee18Sopenharmony_ci    auto runtimeImpl = std::make_unique<RuntimeImpl>(ecmaVm, protocolChannel);
504e509ee18Sopenharmony_ci    auto debuggerImpl = std::make_unique<DebuggerImpl>(ecmaVm, protocolChannel, runtimeImpl.get());
505e509ee18Sopenharmony_ci    auto dispatcherImpl = std::make_unique<DebuggerImpl::DispatcherImpl>(protocolChannel, std::move(debuggerImpl));
506e509ee18Sopenharmony_ci
507e509ee18Sopenharmony_ci    // DDebuggerImpl::RemoveBreakpoint -- !BreakpointDetails::ParseBreakpointId(id, &metaData)
508e509ee18Sopenharmony_ci    std::string msg = std::string() +
509e509ee18Sopenharmony_ci        R"({
510e509ee18Sopenharmony_ci            "id":0,
511e509ee18Sopenharmony_ci            "method":"Debugger.removeBreakpoint",
512e509ee18Sopenharmony_ci            "params":{
513e509ee18Sopenharmony_ci                "breakpointId":"id:0:0"
514e509ee18Sopenharmony_ci            }
515e509ee18Sopenharmony_ci        })";
516e509ee18Sopenharmony_ci    DispatchRequest request(msg);
517e509ee18Sopenharmony_ci
518e509ee18Sopenharmony_ci    dispatcherImpl->Dispatch(request);
519e509ee18Sopenharmony_ci    EXPECT_STREQ(outStrForCallbackCheck.c_str(),
520e509ee18Sopenharmony_ci        R"({"id":0,"result":{"code":1,"message":"Parse breakpoint id failed"}})");
521e509ee18Sopenharmony_ci    if (protocolChannel) {
522e509ee18Sopenharmony_ci        delete protocolChannel;
523e509ee18Sopenharmony_ci        protocolChannel = nullptr;
524e509ee18Sopenharmony_ci    }
525e509ee18Sopenharmony_ci}
526e509ee18Sopenharmony_ci
527e509ee18Sopenharmony_ciHWTEST_F_L0(DebuggerImplTest, Dispatcher_Dispatch_RemoveBreakpoint__003)
528e509ee18Sopenharmony_ci{
529e509ee18Sopenharmony_ci    std::string outStrForCallbackCheck = "";
530e509ee18Sopenharmony_ci    std::function<void(const void*, const std::string &)> callback =
531e509ee18Sopenharmony_ci        [&outStrForCallbackCheck]([[maybe_unused]] const void *ptr, const std::string &inStrOfReply) {
532e509ee18Sopenharmony_ci            outStrForCallbackCheck = inStrOfReply;};
533e509ee18Sopenharmony_ci    ProtocolChannel *protocolChannel = new ProtocolHandler(callback, ecmaVm);
534e509ee18Sopenharmony_ci    auto runtimeImpl = std::make_unique<RuntimeImpl>(ecmaVm, protocolChannel);
535e509ee18Sopenharmony_ci    auto debuggerImpl = std::make_unique<DebuggerImpl>(ecmaVm, protocolChannel, runtimeImpl.get());
536e509ee18Sopenharmony_ci    auto dispatcherImpl = std::make_unique<DebuggerImpl::DispatcherImpl>(protocolChannel, std::move(debuggerImpl));
537e509ee18Sopenharmony_ci
538e509ee18Sopenharmony_ci    // DDebuggerImpl::RemoveBreakpoint -- !MatchScripts(scriptFunc, metaData.url_, ScriptMatchType::URL)
539e509ee18Sopenharmony_ci    std::string msg = std::string() +
540e509ee18Sopenharmony_ci        R"({
541e509ee18Sopenharmony_ci            "id":0,
542e509ee18Sopenharmony_ci            "method":"Debugger.removeBreakpoint",
543e509ee18Sopenharmony_ci            "params":{
544e509ee18Sopenharmony_ci                "breakpointId":"id:0:0:url"
545e509ee18Sopenharmony_ci            }
546e509ee18Sopenharmony_ci        })";
547e509ee18Sopenharmony_ci    DispatchRequest request(msg);
548e509ee18Sopenharmony_ci
549e509ee18Sopenharmony_ci    dispatcherImpl->Dispatch(request);
550e509ee18Sopenharmony_ci    EXPECT_STREQ(outStrForCallbackCheck.c_str(),
551e509ee18Sopenharmony_ci        R"({"id":0,"result":{"code":1,"message":"Unknown file name."}})");
552e509ee18Sopenharmony_ci    if (protocolChannel) {
553e509ee18Sopenharmony_ci        delete protocolChannel;
554e509ee18Sopenharmony_ci        protocolChannel = nullptr;
555e509ee18Sopenharmony_ci    }
556e509ee18Sopenharmony_ci}
557e509ee18Sopenharmony_ci
558e509ee18Sopenharmony_ciHWTEST_F_L0(DebuggerImplTest, Dispatcher_Dispatch_RemoveBreakpointsByUrl__001)
559e509ee18Sopenharmony_ci{
560e509ee18Sopenharmony_ci    std::string outStrForCallbackCheck = "";
561e509ee18Sopenharmony_ci    std::function<void(const void*, const std::string &)> callback =
562e509ee18Sopenharmony_ci        [&outStrForCallbackCheck]([[maybe_unused]] const void *ptr, const std::string &inStrOfReply) {
563e509ee18Sopenharmony_ci            outStrForCallbackCheck = inStrOfReply;};
564e509ee18Sopenharmony_ci    ProtocolChannel *protocolChannel = new ProtocolHandler(callback, ecmaVm);
565e509ee18Sopenharmony_ci    auto runtimeImpl = std::make_unique<RuntimeImpl>(ecmaVm, protocolChannel);
566e509ee18Sopenharmony_ci    auto debuggerImpl = std::make_unique<DebuggerImpl>(ecmaVm, protocolChannel, runtimeImpl.get());
567e509ee18Sopenharmony_ci    auto dispatcherImpl = std::make_unique<DebuggerImpl::DispatcherImpl>(protocolChannel, std::move(debuggerImpl));
568e509ee18Sopenharmony_ci
569e509ee18Sopenharmony_ci    std::string msg = std::string() +
570e509ee18Sopenharmony_ci        R"({
571e509ee18Sopenharmony_ci            "id":0,
572e509ee18Sopenharmony_ci            "method":"Debugger.removeBreakpointsByUrl",
573e509ee18Sopenharmony_ci            "params":{}
574e509ee18Sopenharmony_ci        })";
575e509ee18Sopenharmony_ci    DispatchRequest request(msg);
576e509ee18Sopenharmony_ci
577e509ee18Sopenharmony_ci    dispatcherImpl->Dispatch(request);
578e509ee18Sopenharmony_ci    EXPECT_STREQ(outStrForCallbackCheck.c_str(), R"({"id":0,"result":{"code":1,"message":"wrong params"}})");
579e509ee18Sopenharmony_ci    if (protocolChannel) {
580e509ee18Sopenharmony_ci        delete protocolChannel;
581e509ee18Sopenharmony_ci        protocolChannel = nullptr;
582e509ee18Sopenharmony_ci    }
583e509ee18Sopenharmony_ci}
584e509ee18Sopenharmony_ci
585e509ee18Sopenharmony_ciHWTEST_F_L0(DebuggerImplTest, Dispatcher_Dispatch_RemoveBreakpointsByUrl__002)
586e509ee18Sopenharmony_ci{
587e509ee18Sopenharmony_ci    std::string outStrForCallbackCheck = "";
588e509ee18Sopenharmony_ci    std::function<void(const void*, const std::string &)> callback =
589e509ee18Sopenharmony_ci        [&outStrForCallbackCheck]([[maybe_unused]] const void *ptr, const std::string &inStrOfReply) {
590e509ee18Sopenharmony_ci            outStrForCallbackCheck = inStrOfReply;};
591e509ee18Sopenharmony_ci    ProtocolChannel *protocolChannel = new ProtocolHandler(callback, ecmaVm);
592e509ee18Sopenharmony_ci    auto runtimeImpl = std::make_unique<RuntimeImpl>(ecmaVm, protocolChannel);
593e509ee18Sopenharmony_ci    auto debuggerImpl = std::make_unique<DebuggerImpl>(ecmaVm, protocolChannel, runtimeImpl.get());
594e509ee18Sopenharmony_ci    auto dispatcherImpl = std::make_unique<DebuggerImpl::DispatcherImpl>(protocolChannel, std::move(debuggerImpl));
595e509ee18Sopenharmony_ci
596e509ee18Sopenharmony_ci    std::string msg = std::string() +
597e509ee18Sopenharmony_ci        R"({
598e509ee18Sopenharmony_ci            "id":0,
599e509ee18Sopenharmony_ci            "method":"Debugger.removeBreakpointsByUrl",
600e509ee18Sopenharmony_ci            "params":{
601e509ee18Sopenharmony_ci                "url":"1"
602e509ee18Sopenharmony_ci            }
603e509ee18Sopenharmony_ci        })";
604e509ee18Sopenharmony_ci    DispatchRequest request(msg);
605e509ee18Sopenharmony_ci
606e509ee18Sopenharmony_ci    dispatcherImpl->Dispatch(request);
607e509ee18Sopenharmony_ci    EXPECT_STREQ(outStrForCallbackCheck.c_str(), R"({"id":0,"result":{"code":1,"message":"Unknown url"}})");
608e509ee18Sopenharmony_ci    if (protocolChannel) {
609e509ee18Sopenharmony_ci        delete protocolChannel;
610e509ee18Sopenharmony_ci        protocolChannel = nullptr;
611e509ee18Sopenharmony_ci    }
612e509ee18Sopenharmony_ci}
613e509ee18Sopenharmony_ci
614e509ee18Sopenharmony_ciHWTEST_F_L0(DebuggerImplTest, Dispatcher_Dispatch_Resume__001)
615e509ee18Sopenharmony_ci{
616e509ee18Sopenharmony_ci    std::string outStrForCallbackCheck = "";
617e509ee18Sopenharmony_ci    std::function<void(const void*, const std::string &)> callback =
618e509ee18Sopenharmony_ci        [&outStrForCallbackCheck]([[maybe_unused]] const void *ptr, const std::string &inStrOfReply) {
619e509ee18Sopenharmony_ci            outStrForCallbackCheck = inStrOfReply;};
620e509ee18Sopenharmony_ci    ProtocolChannel *protocolChannel = new ProtocolHandler(callback, ecmaVm);
621e509ee18Sopenharmony_ci    auto runtimeImpl = std::make_unique<RuntimeImpl>(ecmaVm, protocolChannel);
622e509ee18Sopenharmony_ci    auto debuggerImpl = std::make_unique<DebuggerImpl>(ecmaVm, protocolChannel, runtimeImpl.get());
623e509ee18Sopenharmony_ci    debuggerImpl->SetDebuggerState(DebuggerState::PAUSED);
624e509ee18Sopenharmony_ci    auto dispatcherImpl = std::make_unique<DebuggerImpl::DispatcherImpl>(protocolChannel, std::move(debuggerImpl));
625e509ee18Sopenharmony_ci
626e509ee18Sopenharmony_ci    // DebuggerImpl::DispatcherImpl::Resume -- params == nullptr
627e509ee18Sopenharmony_ci    std::string msg = std::string() +
628e509ee18Sopenharmony_ci        R"({
629e509ee18Sopenharmony_ci            "id":0,
630e509ee18Sopenharmony_ci            "method":"Debugger.resume",
631e509ee18Sopenharmony_ci            "params":{
632e509ee18Sopenharmony_ci                "terminateOnResume":"NotBool"
633e509ee18Sopenharmony_ci            }
634e509ee18Sopenharmony_ci        })";
635e509ee18Sopenharmony_ci    DispatchRequest request(msg);
636e509ee18Sopenharmony_ci
637e509ee18Sopenharmony_ci    dispatcherImpl->Dispatch(request);
638e509ee18Sopenharmony_ci    EXPECT_STREQ(outStrForCallbackCheck.c_str(), R"({"id":0,"result":{"code":1,"message":"wrong params"}})");
639e509ee18Sopenharmony_ci    if (protocolChannel) {
640e509ee18Sopenharmony_ci        delete protocolChannel;
641e509ee18Sopenharmony_ci        protocolChannel = nullptr;
642e509ee18Sopenharmony_ci    }
643e509ee18Sopenharmony_ci}
644e509ee18Sopenharmony_ci
645e509ee18Sopenharmony_ciHWTEST_F_L0(DebuggerImplTest, Dispatcher_Dispatch_Resume__002)
646e509ee18Sopenharmony_ci{
647e509ee18Sopenharmony_ci    std::string outStrForCallbackCheck = "";
648e509ee18Sopenharmony_ci    std::function<void(const void*, const std::string &)> callback =
649e509ee18Sopenharmony_ci        [&outStrForCallbackCheck]([[maybe_unused]] const void *ptr, const std::string &inStrOfReply) {
650e509ee18Sopenharmony_ci            outStrForCallbackCheck = inStrOfReply;};
651e509ee18Sopenharmony_ci    ProtocolChannel *protocolChannel = new ProtocolHandler(callback, ecmaVm);
652e509ee18Sopenharmony_ci    auto runtimeImpl = std::make_unique<RuntimeImpl>(ecmaVm, protocolChannel);
653e509ee18Sopenharmony_ci    auto debuggerImpl = std::make_unique<DebuggerImpl>(ecmaVm, protocolChannel, runtimeImpl.get());
654e509ee18Sopenharmony_ci    debuggerImpl->SetDebuggerState(DebuggerState::PAUSED);
655e509ee18Sopenharmony_ci    auto dispatcherImpl = std::make_unique<DebuggerImpl::DispatcherImpl>(protocolChannel, std::move(debuggerImpl));
656e509ee18Sopenharmony_ci
657e509ee18Sopenharmony_ci    std::string msg = std::string() +
658e509ee18Sopenharmony_ci        R"({
659e509ee18Sopenharmony_ci            "id":0,
660e509ee18Sopenharmony_ci            "method":"Debugger.resume",
661e509ee18Sopenharmony_ci            "params":{
662e509ee18Sopenharmony_ci                "terminateOnResume":true
663e509ee18Sopenharmony_ci            }
664e509ee18Sopenharmony_ci        })";
665e509ee18Sopenharmony_ci    DispatchRequest request(msg);
666e509ee18Sopenharmony_ci
667e509ee18Sopenharmony_ci    dispatcherImpl->Dispatch(request);
668e509ee18Sopenharmony_ci    EXPECT_STREQ(outStrForCallbackCheck.c_str(), R"({"id":0,"result":{}})");
669e509ee18Sopenharmony_ci    if (protocolChannel) {
670e509ee18Sopenharmony_ci        delete protocolChannel;
671e509ee18Sopenharmony_ci        protocolChannel = nullptr;
672e509ee18Sopenharmony_ci    }
673e509ee18Sopenharmony_ci}
674e509ee18Sopenharmony_ci
675e509ee18Sopenharmony_ciHWTEST_F_L0(DebuggerImplTest, Dispatcher_Dispatch_SetAsyncCallStackDepth__001)
676e509ee18Sopenharmony_ci{
677e509ee18Sopenharmony_ci    std::string outStrForCallbackCheck = "";
678e509ee18Sopenharmony_ci    std::function<void(const void*, const std::string &)> callback =
679e509ee18Sopenharmony_ci        [&outStrForCallbackCheck]([[maybe_unused]] const void *ptr, const std::string &inStrOfReply) {
680e509ee18Sopenharmony_ci            outStrForCallbackCheck = inStrOfReply;};
681e509ee18Sopenharmony_ci    ProtocolChannel *protocolChannel = new ProtocolHandler(callback, ecmaVm);
682e509ee18Sopenharmony_ci    auto runtimeImpl = std::make_unique<RuntimeImpl>(ecmaVm, protocolChannel);
683e509ee18Sopenharmony_ci    auto debuggerImpl = std::make_unique<DebuggerImpl>(ecmaVm, protocolChannel, runtimeImpl.get());
684e509ee18Sopenharmony_ci    auto dispatcherImpl = std::make_unique<DebuggerImpl::DispatcherImpl>(protocolChannel, std::move(debuggerImpl));
685e509ee18Sopenharmony_ci
686e509ee18Sopenharmony_ci    std::string msg = std::string() +
687e509ee18Sopenharmony_ci        R"({
688e509ee18Sopenharmony_ci            "id":0,
689e509ee18Sopenharmony_ci            "method":"Debugger.setAsyncCallStackDepth"
690e509ee18Sopenharmony_ci        })";
691e509ee18Sopenharmony_ci    DispatchRequest request(msg);
692e509ee18Sopenharmony_ci
693e509ee18Sopenharmony_ci    dispatcherImpl->Dispatch(request);
694e509ee18Sopenharmony_ci    EXPECT_STREQ(outStrForCallbackCheck.c_str(),
695e509ee18Sopenharmony_ci        R"({"id":0,"result":{"code":1,"message":"SetAsyncCallStackDepth not support now"}})");
696e509ee18Sopenharmony_ci    if (protocolChannel) {
697e509ee18Sopenharmony_ci        delete protocolChannel;
698e509ee18Sopenharmony_ci        protocolChannel = nullptr;
699e509ee18Sopenharmony_ci    }
700e509ee18Sopenharmony_ci}
701e509ee18Sopenharmony_ci
702e509ee18Sopenharmony_ciHWTEST_F_L0(DebuggerImplTest, Dispatcher_Dispatch_SetBreakpointByUrl__001)
703e509ee18Sopenharmony_ci{
704e509ee18Sopenharmony_ci    std::string outStrForCallbackCheck = "";
705e509ee18Sopenharmony_ci    std::function<void(const void*, const std::string &)> callback =
706e509ee18Sopenharmony_ci        [&outStrForCallbackCheck]([[maybe_unused]] const void *ptr, const std::string &inStrOfReply) {
707e509ee18Sopenharmony_ci            outStrForCallbackCheck = inStrOfReply;};
708e509ee18Sopenharmony_ci    ProtocolChannel *protocolChannel = new ProtocolHandler(callback, ecmaVm);
709e509ee18Sopenharmony_ci    auto runtimeImpl = std::make_unique<RuntimeImpl>(ecmaVm, protocolChannel);
710e509ee18Sopenharmony_ci    auto debuggerImpl = std::make_unique<DebuggerImpl>(ecmaVm, protocolChannel, runtimeImpl.get());
711e509ee18Sopenharmony_ci    auto dispatcherImpl = std::make_unique<DebuggerImpl::DispatcherImpl>(protocolChannel, std::move(debuggerImpl));
712e509ee18Sopenharmony_ci
713e509ee18Sopenharmony_ci    // DebuggerImpl::DispatcherImpl::SetBreakpointByUrl -- params == nullptr
714e509ee18Sopenharmony_ci    std::string msg = std::string() +
715e509ee18Sopenharmony_ci        R"({
716e509ee18Sopenharmony_ci            "id":0,
717e509ee18Sopenharmony_ci            "method":"Debugger.setBreakpointByUrl",
718e509ee18Sopenharmony_ci            "params":{}
719e509ee18Sopenharmony_ci        })";
720e509ee18Sopenharmony_ci    DispatchRequest request(msg);
721e509ee18Sopenharmony_ci
722e509ee18Sopenharmony_ci    dispatcherImpl->Dispatch(request);
723e509ee18Sopenharmony_ci    EXPECT_STREQ(outStrForCallbackCheck.c_str(), R"({"id":0,"result":{"code":1,"message":"wrong params"}})");
724e509ee18Sopenharmony_ci    if (protocolChannel) {
725e509ee18Sopenharmony_ci        delete protocolChannel;
726e509ee18Sopenharmony_ci        protocolChannel = nullptr;
727e509ee18Sopenharmony_ci    }
728e509ee18Sopenharmony_ci}
729e509ee18Sopenharmony_ci
730e509ee18Sopenharmony_ciHWTEST_F_L0(DebuggerImplTest, Dispatcher_Dispatch_SetBreakpointByUrl__002)
731e509ee18Sopenharmony_ci{
732e509ee18Sopenharmony_ci    std::string outStrForCallbackCheck = "";
733e509ee18Sopenharmony_ci    std::function<void(const void*, const std::string &)> callback =
734e509ee18Sopenharmony_ci        [&outStrForCallbackCheck]([[maybe_unused]] const void *ptr, const std::string &inStrOfReply) {
735e509ee18Sopenharmony_ci            outStrForCallbackCheck = inStrOfReply;};
736e509ee18Sopenharmony_ci    ProtocolChannel *protocolChannel = new ProtocolHandler(callback, ecmaVm);
737e509ee18Sopenharmony_ci    auto runtimeImpl = std::make_unique<RuntimeImpl>(ecmaVm, protocolChannel);
738e509ee18Sopenharmony_ci    auto debuggerImpl = std::make_unique<DebuggerImpl>(ecmaVm, protocolChannel, runtimeImpl.get());
739e509ee18Sopenharmony_ci    auto dispatcherImpl = std::make_unique<DebuggerImpl::DispatcherImpl>(protocolChannel, std::move(debuggerImpl));
740e509ee18Sopenharmony_ci    ecmaVm->GetJsDebuggerManager()->SetDebugMode(true);
741e509ee18Sopenharmony_ci
742e509ee18Sopenharmony_ci    // DebuggerImpl::SetBreakpointByUrl -- extractor == nullptr
743e509ee18Sopenharmony_ci    std::string msg = std::string() +
744e509ee18Sopenharmony_ci        R"({
745e509ee18Sopenharmony_ci            "id":0,
746e509ee18Sopenharmony_ci            "method":"Debugger.setBreakpointByUrl",
747e509ee18Sopenharmony_ci            "params":{
748e509ee18Sopenharmony_ci                "lineNumber":0,
749e509ee18Sopenharmony_ci                "url":"url_str",
750e509ee18Sopenharmony_ci                "urlRegex":"urlRegex_str",
751e509ee18Sopenharmony_ci                "scriptHash":"scriptHash_str",
752e509ee18Sopenharmony_ci                "columnNumber":0,
753e509ee18Sopenharmony_ci                "condition":"condition_str"
754e509ee18Sopenharmony_ci            }
755e509ee18Sopenharmony_ci        })";
756e509ee18Sopenharmony_ci    DispatchRequest request(msg);
757e509ee18Sopenharmony_ci
758e509ee18Sopenharmony_ci    dispatcherImpl->Dispatch(request);
759e509ee18Sopenharmony_ci    EXPECT_STREQ(outStrForCallbackCheck.c_str(), R"({"id":0,"result":{"code":1,"message":"Unknown file name."}})");
760e509ee18Sopenharmony_ci    if (protocolChannel) {
761e509ee18Sopenharmony_ci        delete protocolChannel;
762e509ee18Sopenharmony_ci        protocolChannel = nullptr;
763e509ee18Sopenharmony_ci    }
764e509ee18Sopenharmony_ci}
765e509ee18Sopenharmony_ci
766e509ee18Sopenharmony_ciHWTEST_F_L0(DebuggerImplTest, Dispatcher_Dispatch_SetPauseOnExceptions__001)
767e509ee18Sopenharmony_ci{
768e509ee18Sopenharmony_ci    std::string outStrForCallbackCheck = "";
769e509ee18Sopenharmony_ci    std::function<void(const void*, const std::string &)> callback =
770e509ee18Sopenharmony_ci        [&outStrForCallbackCheck]([[maybe_unused]] const void *ptr, const std::string &inStrOfReply) {
771e509ee18Sopenharmony_ci            outStrForCallbackCheck = inStrOfReply;};
772e509ee18Sopenharmony_ci    ProtocolChannel *protocolChannel = new ProtocolHandler(callback, ecmaVm);
773e509ee18Sopenharmony_ci    auto runtimeImpl = std::make_unique<RuntimeImpl>(ecmaVm, protocolChannel);
774e509ee18Sopenharmony_ci    auto debuggerImpl = std::make_unique<DebuggerImpl>(ecmaVm, protocolChannel, runtimeImpl.get());
775e509ee18Sopenharmony_ci    auto dispatcherImpl = std::make_unique<DebuggerImpl::DispatcherImpl>(protocolChannel, std::move(debuggerImpl));
776e509ee18Sopenharmony_ci
777e509ee18Sopenharmony_ci    // DebuggerImpl::DispatcherImpl::SetPauseOnExceptions -- params == nullptr
778e509ee18Sopenharmony_ci    std::string msg = std::string() +
779e509ee18Sopenharmony_ci        R"({
780e509ee18Sopenharmony_ci            "id":0,
781e509ee18Sopenharmony_ci            "method":"Debugger.setPauseOnExceptions",
782e509ee18Sopenharmony_ci            "params":{}
783e509ee18Sopenharmony_ci        })";
784e509ee18Sopenharmony_ci    DispatchRequest request(msg);
785e509ee18Sopenharmony_ci
786e509ee18Sopenharmony_ci    dispatcherImpl->Dispatch(request);
787e509ee18Sopenharmony_ci    EXPECT_STREQ(outStrForCallbackCheck.c_str(), R"({"id":0,"result":{"code":1,"message":"wrong params"}})");
788e509ee18Sopenharmony_ci    if (protocolChannel) {
789e509ee18Sopenharmony_ci        delete protocolChannel;
790e509ee18Sopenharmony_ci        protocolChannel = nullptr;
791e509ee18Sopenharmony_ci    }
792e509ee18Sopenharmony_ci}
793e509ee18Sopenharmony_ci
794e509ee18Sopenharmony_ciHWTEST_F_L0(DebuggerImplTest, Dispatcher_Dispatch_SetPauseOnExceptions__002)
795e509ee18Sopenharmony_ci{
796e509ee18Sopenharmony_ci    std::string outStrForCallbackCheck = "";
797e509ee18Sopenharmony_ci    std::function<void(const void*, const std::string &)> callback =
798e509ee18Sopenharmony_ci        [&outStrForCallbackCheck]([[maybe_unused]] const void *ptr, const std::string &inStrOfReply) {
799e509ee18Sopenharmony_ci            outStrForCallbackCheck = inStrOfReply;};
800e509ee18Sopenharmony_ci    ProtocolChannel *protocolChannel = new ProtocolHandler(callback, ecmaVm);
801e509ee18Sopenharmony_ci    auto runtimeImpl = std::make_unique<RuntimeImpl>(ecmaVm, protocolChannel);
802e509ee18Sopenharmony_ci    auto debuggerImpl = std::make_unique<DebuggerImpl>(ecmaVm, protocolChannel, runtimeImpl.get());
803e509ee18Sopenharmony_ci    auto dispatcherImpl = std::make_unique<DebuggerImpl::DispatcherImpl>(protocolChannel, std::move(debuggerImpl));
804e509ee18Sopenharmony_ci
805e509ee18Sopenharmony_ci    std::string msg = std::string() +
806e509ee18Sopenharmony_ci        R"({
807e509ee18Sopenharmony_ci            "id":0,
808e509ee18Sopenharmony_ci            "method":"Debugger.setPauseOnExceptions",
809e509ee18Sopenharmony_ci            "params":{
810e509ee18Sopenharmony_ci                "state":"all"
811e509ee18Sopenharmony_ci            }
812e509ee18Sopenharmony_ci        })";
813e509ee18Sopenharmony_ci    DispatchRequest request(msg);
814e509ee18Sopenharmony_ci
815e509ee18Sopenharmony_ci    dispatcherImpl->Dispatch(request);
816e509ee18Sopenharmony_ci    EXPECT_STREQ(outStrForCallbackCheck.c_str(), R"({"id":0,"result":{}})");
817e509ee18Sopenharmony_ci    if (protocolChannel) {
818e509ee18Sopenharmony_ci        delete protocolChannel;
819e509ee18Sopenharmony_ci        protocolChannel = nullptr;
820e509ee18Sopenharmony_ci    }
821e509ee18Sopenharmony_ci}
822e509ee18Sopenharmony_ci
823e509ee18Sopenharmony_ciHWTEST_F_L0(DebuggerImplTest, Dispatcher_Dispatch_StepInto__001)
824e509ee18Sopenharmony_ci{
825e509ee18Sopenharmony_ci    std::string outStrForCallbackCheck = "";
826e509ee18Sopenharmony_ci    std::function<void(const void*, const std::string &)> callback =
827e509ee18Sopenharmony_ci        [&outStrForCallbackCheck]([[maybe_unused]] const void *ptr, const std::string &inStrOfReply) {
828e509ee18Sopenharmony_ci            outStrForCallbackCheck = inStrOfReply;};
829e509ee18Sopenharmony_ci    ProtocolChannel *protocolChannel = new ProtocolHandler(callback, ecmaVm);
830e509ee18Sopenharmony_ci    auto runtimeImpl = std::make_unique<RuntimeImpl>(ecmaVm, protocolChannel);
831e509ee18Sopenharmony_ci    auto debuggerImpl = std::make_unique<DebuggerImpl>(ecmaVm, protocolChannel, runtimeImpl.get());
832e509ee18Sopenharmony_ci    auto dispatcherImpl = std::make_unique<DebuggerImpl::DispatcherImpl>(protocolChannel, std::move(debuggerImpl));
833e509ee18Sopenharmony_ci
834e509ee18Sopenharmony_ci    // DebuggerImpl::DispatcherImpl::StepInto -- params == nullptr
835e509ee18Sopenharmony_ci    std::string msg = std::string() +
836e509ee18Sopenharmony_ci        R"({
837e509ee18Sopenharmony_ci            "id":0,
838e509ee18Sopenharmony_ci            "method":"Debugger.stepInto",
839e509ee18Sopenharmony_ci            "params":{
840e509ee18Sopenharmony_ci                "breakOnAsyncCall":"Str"
841e509ee18Sopenharmony_ci            }
842e509ee18Sopenharmony_ci        })";
843e509ee18Sopenharmony_ci    DispatchRequest request(msg);
844e509ee18Sopenharmony_ci
845e509ee18Sopenharmony_ci    dispatcherImpl->Dispatch(request);
846e509ee18Sopenharmony_ci    EXPECT_STREQ(outStrForCallbackCheck.c_str(), R"({"id":0,"result":{"code":1,"message":"wrong params"}})");
847e509ee18Sopenharmony_ci    if (protocolChannel) {
848e509ee18Sopenharmony_ci        delete protocolChannel;
849e509ee18Sopenharmony_ci        protocolChannel = nullptr;
850e509ee18Sopenharmony_ci    }
851e509ee18Sopenharmony_ci}
852e509ee18Sopenharmony_ci
853e509ee18Sopenharmony_ciHWTEST_F_L0(DebuggerImplTest, Dispatcher_Dispatch_SetMixedDebugEnabled__001)
854e509ee18Sopenharmony_ci{
855e509ee18Sopenharmony_ci    std::string outStrForCallbackCheck = "";
856e509ee18Sopenharmony_ci    std::function<void(const void*, const std::string &)> callback =
857e509ee18Sopenharmony_ci        [&outStrForCallbackCheck]([[maybe_unused]] const void *ptr, const std::string &inStrOfReply) {
858e509ee18Sopenharmony_ci            outStrForCallbackCheck = inStrOfReply;};
859e509ee18Sopenharmony_ci    ProtocolChannel *protocolChannel = new ProtocolHandler(callback, ecmaVm);
860e509ee18Sopenharmony_ci    auto runtimeImpl = std::make_unique<RuntimeImpl>(ecmaVm, protocolChannel);
861e509ee18Sopenharmony_ci    auto debuggerImpl = std::make_unique<DebuggerImpl>(ecmaVm, protocolChannel, runtimeImpl.get());
862e509ee18Sopenharmony_ci    auto dispatcherImpl = std::make_unique<DebuggerImpl::DispatcherImpl>(protocolChannel, std::move(debuggerImpl));
863e509ee18Sopenharmony_ci
864e509ee18Sopenharmony_ci    // DebuggerImpl::DispatcherImpl::SetMixedDebugEnabled -- Params == nullptr
865e509ee18Sopenharmony_ci    std::string msg = std::string() +
866e509ee18Sopenharmony_ci        R"({
867e509ee18Sopenharmony_ci            "id":0,
868e509ee18Sopenharmony_ci            "method":"Debugger.setMixedDebugEnabled",
869e509ee18Sopenharmony_ci            "params":{
870e509ee18Sopenharmony_ci                "enabled":"NotBoolValue"
871e509ee18Sopenharmony_ci            }
872e509ee18Sopenharmony_ci        })";
873e509ee18Sopenharmony_ci    DispatchRequest request(msg);
874e509ee18Sopenharmony_ci
875e509ee18Sopenharmony_ci    dispatcherImpl->Dispatch(request);
876e509ee18Sopenharmony_ci    EXPECT_STREQ(outStrForCallbackCheck.c_str(), R"({"id":0,"result":{"code":1,"message":"wrong params"}})");
877e509ee18Sopenharmony_ci    if (protocolChannel) {
878e509ee18Sopenharmony_ci        delete protocolChannel;
879e509ee18Sopenharmony_ci        protocolChannel = nullptr;
880e509ee18Sopenharmony_ci    }
881e509ee18Sopenharmony_ci}
882e509ee18Sopenharmony_ci
883e509ee18Sopenharmony_ciHWTEST_F_L0(DebuggerImplTest, Dispatcher_Dispatch_SetMixedDebugEnabled__002)
884e509ee18Sopenharmony_ci{
885e509ee18Sopenharmony_ci    std::string outStrForCallbackCheck = "";
886e509ee18Sopenharmony_ci    std::function<void(const void*, const std::string &)> callback =
887e509ee18Sopenharmony_ci        [&outStrForCallbackCheck]([[maybe_unused]] const void *ptr, const std::string &inStrOfReply) {
888e509ee18Sopenharmony_ci            outStrForCallbackCheck = inStrOfReply;};
889e509ee18Sopenharmony_ci    ProtocolChannel *protocolChannel = new ProtocolHandler(callback, ecmaVm);
890e509ee18Sopenharmony_ci    auto runtimeImpl = std::make_unique<RuntimeImpl>(ecmaVm, protocolChannel);
891e509ee18Sopenharmony_ci    auto debuggerImpl = std::make_unique<DebuggerImpl>(ecmaVm, protocolChannel, runtimeImpl.get());
892e509ee18Sopenharmony_ci    auto dispatcherImpl = std::make_unique<DebuggerImpl::DispatcherImpl>(protocolChannel, std::move(debuggerImpl));
893e509ee18Sopenharmony_ci    EXPECT_FALSE(ecmaVm->GetJsDebuggerManager()->IsMixedDebugEnabled());
894e509ee18Sopenharmony_ci
895e509ee18Sopenharmony_ci    std::string msg = std::string() +
896e509ee18Sopenharmony_ci        R"({
897e509ee18Sopenharmony_ci            "id":0,
898e509ee18Sopenharmony_ci            "method":"Debugger.setMixedDebugEnabled",
899e509ee18Sopenharmony_ci            "params":{
900e509ee18Sopenharmony_ci                "enabled":true,
901e509ee18Sopenharmony_ci                "mixedStackEnabled":true
902e509ee18Sopenharmony_ci            }
903e509ee18Sopenharmony_ci        })";
904e509ee18Sopenharmony_ci    DispatchRequest request(msg);
905e509ee18Sopenharmony_ci
906e509ee18Sopenharmony_ci    dispatcherImpl->Dispatch(request);
907e509ee18Sopenharmony_ci    EXPECT_TRUE(ecmaVm->GetJsDebuggerManager()->IsMixedDebugEnabled());
908e509ee18Sopenharmony_ci    EXPECT_STREQ(outStrForCallbackCheck.c_str(), R"({"id":0,"result":{}})");
909e509ee18Sopenharmony_ci    if (protocolChannel) {
910e509ee18Sopenharmony_ci        delete protocolChannel;
911e509ee18Sopenharmony_ci        protocolChannel = nullptr;
912e509ee18Sopenharmony_ci    }
913e509ee18Sopenharmony_ci}
914e509ee18Sopenharmony_ci
915e509ee18Sopenharmony_ciHWTEST_F_L0(DebuggerImplTest, Dispatcher_Dispatch_SetBlackboxPatterns__001)
916e509ee18Sopenharmony_ci{
917e509ee18Sopenharmony_ci    std::string outStrForCallbackCheck = "";
918e509ee18Sopenharmony_ci    std::function<void(const void*, const std::string &)> callback =
919e509ee18Sopenharmony_ci        [&outStrForCallbackCheck]([[maybe_unused]] const void *ptr, const std::string &inStrOfReply) {
920e509ee18Sopenharmony_ci            outStrForCallbackCheck = inStrOfReply;};
921e509ee18Sopenharmony_ci    ProtocolChannel *protocolChannel = new ProtocolHandler(callback, ecmaVm);
922e509ee18Sopenharmony_ci    auto runtimeImpl = std::make_unique<RuntimeImpl>(ecmaVm, protocolChannel);
923e509ee18Sopenharmony_ci    auto debuggerImpl = std::make_unique<DebuggerImpl>(ecmaVm, protocolChannel, runtimeImpl.get());
924e509ee18Sopenharmony_ci    auto dispatcherImpl = std::make_unique<DebuggerImpl::DispatcherImpl>(protocolChannel, std::move(debuggerImpl));
925e509ee18Sopenharmony_ci
926e509ee18Sopenharmony_ci    std::string msg = std::string() +
927e509ee18Sopenharmony_ci        R"({
928e509ee18Sopenharmony_ci            "id":0,
929e509ee18Sopenharmony_ci            "method":"Debugger.setBlackboxPatterns"
930e509ee18Sopenharmony_ci        })";
931e509ee18Sopenharmony_ci    DispatchRequest request(msg);
932e509ee18Sopenharmony_ci
933e509ee18Sopenharmony_ci    dispatcherImpl->Dispatch(request);
934e509ee18Sopenharmony_ci    EXPECT_STREQ(outStrForCallbackCheck.c_str(),
935e509ee18Sopenharmony_ci        R"({"id":0,"result":{"code":1,"message":"SetBlackboxPatterns not support now"}})");
936e509ee18Sopenharmony_ci    if (protocolChannel) {
937e509ee18Sopenharmony_ci        delete protocolChannel;
938e509ee18Sopenharmony_ci        protocolChannel = nullptr;
939e509ee18Sopenharmony_ci    }
940e509ee18Sopenharmony_ci}
941e509ee18Sopenharmony_ci
942e509ee18Sopenharmony_ciHWTEST_F_L0(DebuggerImplTest, Dispatcher_Dispatch_ReplyNativeCalling__001)
943e509ee18Sopenharmony_ci{
944e509ee18Sopenharmony_ci    std::string outStrForCallbackCheck = "";
945e509ee18Sopenharmony_ci    std::function<void(const void*, const std::string &)> callback =
946e509ee18Sopenharmony_ci        [&outStrForCallbackCheck]([[maybe_unused]] const void *ptr, const std::string &inStrOfReply) {
947e509ee18Sopenharmony_ci            outStrForCallbackCheck = inStrOfReply;};
948e509ee18Sopenharmony_ci    ProtocolChannel *protocolChannel = new ProtocolHandler(callback, ecmaVm);
949e509ee18Sopenharmony_ci    auto runtimeImpl = std::make_unique<RuntimeImpl>(ecmaVm, protocolChannel);
950e509ee18Sopenharmony_ci    auto debuggerImpl = std::make_unique<DebuggerImpl>(ecmaVm, protocolChannel, runtimeImpl.get());
951e509ee18Sopenharmony_ci    auto dispatcherImpl = std::make_unique<DebuggerImpl::DispatcherImpl>(protocolChannel, std::move(debuggerImpl));
952e509ee18Sopenharmony_ci
953e509ee18Sopenharmony_ci    // DebuggerImpl::DispatcherImpl::ReplyNativeCalling -- params == nullptr
954e509ee18Sopenharmony_ci    std::string msg = std::string() +
955e509ee18Sopenharmony_ci        R"({
956e509ee18Sopenharmony_ci            "id":0,
957e509ee18Sopenharmony_ci            "method":"Debugger.replyNativeCalling",
958e509ee18Sopenharmony_ci            "params":{
959e509ee18Sopenharmony_ci                "userCode":"NotBoolValue"
960e509ee18Sopenharmony_ci            }
961e509ee18Sopenharmony_ci        })";
962e509ee18Sopenharmony_ci    DispatchRequest request(msg);
963e509ee18Sopenharmony_ci
964e509ee18Sopenharmony_ci    dispatcherImpl->Dispatch(request);
965e509ee18Sopenharmony_ci    EXPECT_STREQ(outStrForCallbackCheck.c_str(), R"({"id":0,"result":{"code":1,"message":"wrong params"}})");
966e509ee18Sopenharmony_ci    if (protocolChannel) {
967e509ee18Sopenharmony_ci        delete protocolChannel;
968e509ee18Sopenharmony_ci        protocolChannel = nullptr;
969e509ee18Sopenharmony_ci    }
970e509ee18Sopenharmony_ci}
971e509ee18Sopenharmony_ci
972e509ee18Sopenharmony_ciHWTEST_F_L0(DebuggerImplTest, Dispatcher_Dispatch_ReplyNativeCalling__002)
973e509ee18Sopenharmony_ci{
974e509ee18Sopenharmony_ci    std::string outStrForCallbackCheck = "";
975e509ee18Sopenharmony_ci    std::function<void(const void*, const std::string &)> callback =
976e509ee18Sopenharmony_ci        [&outStrForCallbackCheck]([[maybe_unused]] const void *ptr, const std::string &inStrOfReply) {
977e509ee18Sopenharmony_ci            outStrForCallbackCheck = inStrOfReply;};
978e509ee18Sopenharmony_ci    ProtocolChannel *protocolChannel = new ProtocolHandler(callback, ecmaVm);
979e509ee18Sopenharmony_ci    auto runtimeImpl = std::make_unique<RuntimeImpl>(ecmaVm, protocolChannel);
980e509ee18Sopenharmony_ci    auto debuggerImpl = std::make_unique<DebuggerImpl>(ecmaVm, protocolChannel, runtimeImpl.get());
981e509ee18Sopenharmony_ci    auto dispatcherImpl = std::make_unique<DebuggerImpl::DispatcherImpl>(protocolChannel, std::move(debuggerImpl));
982e509ee18Sopenharmony_ci
983e509ee18Sopenharmony_ci    std::string msg = std::string() +
984e509ee18Sopenharmony_ci        R"({
985e509ee18Sopenharmony_ci            "id":0,
986e509ee18Sopenharmony_ci            "method":"Debugger.replyNativeCalling",
987e509ee18Sopenharmony_ci            "params":{
988e509ee18Sopenharmony_ci                "userCode":true
989e509ee18Sopenharmony_ci            }
990e509ee18Sopenharmony_ci        })";
991e509ee18Sopenharmony_ci    DispatchRequest request(msg);
992e509ee18Sopenharmony_ci
993e509ee18Sopenharmony_ci    dispatcherImpl->Dispatch(request);
994e509ee18Sopenharmony_ci    EXPECT_STREQ(outStrForCallbackCheck.c_str(), R"({"id":0,"result":{}})");
995e509ee18Sopenharmony_ci    if (protocolChannel) {
996e509ee18Sopenharmony_ci        delete protocolChannel;
997e509ee18Sopenharmony_ci        protocolChannel = nullptr;
998e509ee18Sopenharmony_ci    }
999e509ee18Sopenharmony_ci}
1000e509ee18Sopenharmony_ci
1001e509ee18Sopenharmony_ciHWTEST_F_L0(DebuggerImplTest, Dispatcher_Dispatch_ContinueToLocation__001)
1002e509ee18Sopenharmony_ci{
1003e509ee18Sopenharmony_ci    std::string outStrForCallbackCheck = "";
1004e509ee18Sopenharmony_ci    std::function<void(const void*, const std::string &)> callback =
1005e509ee18Sopenharmony_ci        [&outStrForCallbackCheck]([[maybe_unused]] const void *ptr, const std::string &inStrOfReply) {
1006e509ee18Sopenharmony_ci            outStrForCallbackCheck = inStrOfReply;};
1007e509ee18Sopenharmony_ci    ProtocolChannel *protocolChannel = new ProtocolHandler(callback, ecmaVm);
1008e509ee18Sopenharmony_ci    auto runtimeImpl = std::make_unique<RuntimeImpl>(ecmaVm, protocolChannel);
1009e509ee18Sopenharmony_ci    auto debuggerImpl = std::make_unique<DebuggerImpl>(ecmaVm, protocolChannel, runtimeImpl.get());
1010e509ee18Sopenharmony_ci    auto dispatcherImpl = std::make_unique<DebuggerImpl::DispatcherImpl>(protocolChannel, std::move(debuggerImpl));
1011e509ee18Sopenharmony_ci
1012e509ee18Sopenharmony_ci    std::string msg = std::string() +
1013e509ee18Sopenharmony_ci        R"({
1014e509ee18Sopenharmony_ci            "id":0,
1015e509ee18Sopenharmony_ci            "method":"Debugger.continueToLocation",
1016e509ee18Sopenharmony_ci            "params":{}
1017e509ee18Sopenharmony_ci        })";
1018e509ee18Sopenharmony_ci    DispatchRequest request(msg);
1019e509ee18Sopenharmony_ci
1020e509ee18Sopenharmony_ci    dispatcherImpl->Dispatch(request);
1021e509ee18Sopenharmony_ci    EXPECT_STREQ(outStrForCallbackCheck.c_str(), R"({"id":0,"result":{"code":1,"message":"wrong params"}})");
1022e509ee18Sopenharmony_ci    if (protocolChannel) {
1023e509ee18Sopenharmony_ci        delete protocolChannel;
1024e509ee18Sopenharmony_ci        protocolChannel = nullptr;
1025e509ee18Sopenharmony_ci    }
1026e509ee18Sopenharmony_ci}
1027e509ee18Sopenharmony_ci
1028e509ee18Sopenharmony_ciHWTEST_F_L0(DebuggerImplTest, Dispatcher_Dispatch_ContinueToLocation__002)
1029e509ee18Sopenharmony_ci{
1030e509ee18Sopenharmony_ci    std::string outStrForCallbackCheck = "";
1031e509ee18Sopenharmony_ci    std::function<void(const void*, const std::string &)> callback =
1032e509ee18Sopenharmony_ci        [&outStrForCallbackCheck]([[maybe_unused]] const void *ptr, const std::string &inStrOfReply) {
1033e509ee18Sopenharmony_ci            outStrForCallbackCheck = inStrOfReply;};
1034e509ee18Sopenharmony_ci    ProtocolChannel *protocolChannel = new ProtocolHandler(callback, ecmaVm);
1035e509ee18Sopenharmony_ci    auto runtimeImpl = std::make_unique<RuntimeImpl>(ecmaVm, protocolChannel);
1036e509ee18Sopenharmony_ci    auto debuggerImpl = std::make_unique<DebuggerImpl>(ecmaVm, protocolChannel, runtimeImpl.get());
1037e509ee18Sopenharmony_ci    auto dispatcherImpl = std::make_unique<DebuggerImpl::DispatcherImpl>(protocolChannel, std::move(debuggerImpl));
1038e509ee18Sopenharmony_ci
1039e509ee18Sopenharmony_ci    std::string msg = std::string() +
1040e509ee18Sopenharmony_ci        R"({
1041e509ee18Sopenharmony_ci            "id":0,
1042e509ee18Sopenharmony_ci            "method":"Debugger.continueToLocation",
1043e509ee18Sopenharmony_ci            "params":{
1044e509ee18Sopenharmony_ci                "location":{
1045e509ee18Sopenharmony_ci                    "scriptId":"2",
1046e509ee18Sopenharmony_ci                    "lineNumber":3,
1047e509ee18Sopenharmony_ci                    "columnNumber":20
1048e509ee18Sopenharmony_ci                },
1049e509ee18Sopenharmony_ci                "targetCallFrames":"testTargetCallFrames"
1050e509ee18Sopenharmony_ci            }
1051e509ee18Sopenharmony_ci        })";
1052e509ee18Sopenharmony_ci    DispatchRequest request(msg);
1053e509ee18Sopenharmony_ci
1054e509ee18Sopenharmony_ci    dispatcherImpl->Dispatch(request);
1055e509ee18Sopenharmony_ci    EXPECT_STREQ(outStrForCallbackCheck.c_str(), R"({"id":0,"result":{}})");
1056e509ee18Sopenharmony_ci    if (protocolChannel) {
1057e509ee18Sopenharmony_ci        delete protocolChannel;
1058e509ee18Sopenharmony_ci        protocolChannel = nullptr;
1059e509ee18Sopenharmony_ci    }
1060e509ee18Sopenharmony_ci}
1061e509ee18Sopenharmony_ci
1062e509ee18Sopenharmony_ciHWTEST_F_L0(DebuggerImplTest, Dispatcher_Dispatch_SetBreakpointsActive__001)
1063e509ee18Sopenharmony_ci{
1064e509ee18Sopenharmony_ci    std::string outStrForCallbackCheck = "";
1065e509ee18Sopenharmony_ci    std::function<void(const void*, const std::string &)> callback =
1066e509ee18Sopenharmony_ci        [&outStrForCallbackCheck]([[maybe_unused]] const void *ptr, const std::string &inStrOfReply) {
1067e509ee18Sopenharmony_ci            outStrForCallbackCheck = inStrOfReply;};
1068e509ee18Sopenharmony_ci    ProtocolChannel *protocolChannel = new ProtocolHandler(callback, ecmaVm);
1069e509ee18Sopenharmony_ci    auto runtimeImpl = std::make_unique<RuntimeImpl>(ecmaVm, protocolChannel);
1070e509ee18Sopenharmony_ci    auto debuggerImpl = std::make_unique<DebuggerImpl>(ecmaVm, protocolChannel, runtimeImpl.get());
1071e509ee18Sopenharmony_ci    auto dispatcherImpl = std::make_unique<DebuggerImpl::DispatcherImpl>(protocolChannel, std::move(debuggerImpl));
1072e509ee18Sopenharmony_ci
1073e509ee18Sopenharmony_ci    std::string msg = std::string() +
1074e509ee18Sopenharmony_ci        R"({
1075e509ee18Sopenharmony_ci            "id":0,
1076e509ee18Sopenharmony_ci            "method":"Debugger.setBreakpointsActive",
1077e509ee18Sopenharmony_ci            "params":{}
1078e509ee18Sopenharmony_ci        })";
1079e509ee18Sopenharmony_ci    DispatchRequest request(msg);
1080e509ee18Sopenharmony_ci
1081e509ee18Sopenharmony_ci    dispatcherImpl->Dispatch(request);
1082e509ee18Sopenharmony_ci    EXPECT_STREQ(outStrForCallbackCheck.c_str(), R"({"id":0,"result":{"code":1,"message":"wrong params"}})");
1083e509ee18Sopenharmony_ci    if (protocolChannel) {
1084e509ee18Sopenharmony_ci        delete protocolChannel;
1085e509ee18Sopenharmony_ci        protocolChannel = nullptr;
1086e509ee18Sopenharmony_ci    }
1087e509ee18Sopenharmony_ci}
1088e509ee18Sopenharmony_ci
1089e509ee18Sopenharmony_ciHWTEST_F_L0(DebuggerImplTest, Dispatcher_Dispatch_SetBreakpointsActive__002)
1090e509ee18Sopenharmony_ci{
1091e509ee18Sopenharmony_ci    std::string outStrForCallbackCheck = "";
1092e509ee18Sopenharmony_ci    std::function<void(const void*, const std::string &)> callback =
1093e509ee18Sopenharmony_ci        [&outStrForCallbackCheck]([[maybe_unused]] const void *ptr, const std::string &inStrOfReply) {
1094e509ee18Sopenharmony_ci            outStrForCallbackCheck = inStrOfReply;};
1095e509ee18Sopenharmony_ci    ProtocolChannel *protocolChannel = new ProtocolHandler(callback, ecmaVm);
1096e509ee18Sopenharmony_ci    auto runtimeImpl = std::make_unique<RuntimeImpl>(ecmaVm, protocolChannel);
1097e509ee18Sopenharmony_ci    auto debuggerImpl = std::make_unique<DebuggerImpl>(ecmaVm, protocolChannel, runtimeImpl.get());
1098e509ee18Sopenharmony_ci    auto dispatcherImpl = std::make_unique<DebuggerImpl::DispatcherImpl>(protocolChannel, std::move(debuggerImpl));
1099e509ee18Sopenharmony_ci
1100e509ee18Sopenharmony_ci    std::string msg = std::string() +
1101e509ee18Sopenharmony_ci        R"({
1102e509ee18Sopenharmony_ci            "id":0,
1103e509ee18Sopenharmony_ci            "method":"Debugger.setBreakpointsActive",
1104e509ee18Sopenharmony_ci            "params":{
1105e509ee18Sopenharmony_ci                "active":true
1106e509ee18Sopenharmony_ci            }
1107e509ee18Sopenharmony_ci        })";
1108e509ee18Sopenharmony_ci    DispatchRequest request(msg);
1109e509ee18Sopenharmony_ci
1110e509ee18Sopenharmony_ci    dispatcherImpl->Dispatch(request);
1111e509ee18Sopenharmony_ci    EXPECT_STREQ(outStrForCallbackCheck.c_str(), R"({"id":0,"result":{}})");
1112e509ee18Sopenharmony_ci    if (protocolChannel) {
1113e509ee18Sopenharmony_ci        delete protocolChannel;
1114e509ee18Sopenharmony_ci        protocolChannel = nullptr;
1115e509ee18Sopenharmony_ci    }
1116e509ee18Sopenharmony_ci}
1117e509ee18Sopenharmony_ci
1118e509ee18Sopenharmony_ciHWTEST_F_L0(DebuggerImplTest, Dispatcher_Dispatch_SetSkipAllPauses__001)
1119e509ee18Sopenharmony_ci{
1120e509ee18Sopenharmony_ci    std::string outStrForCallbackCheck = "";
1121e509ee18Sopenharmony_ci    std::function<void(const void*, const std::string &)> callback =
1122e509ee18Sopenharmony_ci        [&outStrForCallbackCheck]([[maybe_unused]] const void *ptr, const std::string &inStrOfReply) {
1123e509ee18Sopenharmony_ci            outStrForCallbackCheck = inStrOfReply;};
1124e509ee18Sopenharmony_ci    ProtocolChannel *protocolChannel = new ProtocolHandler(callback, ecmaVm);
1125e509ee18Sopenharmony_ci    auto runtimeImpl = std::make_unique<RuntimeImpl>(ecmaVm, protocolChannel);
1126e509ee18Sopenharmony_ci    auto debuggerImpl = std::make_unique<DebuggerImpl>(ecmaVm, protocolChannel, runtimeImpl.get());
1127e509ee18Sopenharmony_ci    auto dispatcherImpl = std::make_unique<DebuggerImpl::DispatcherImpl>(protocolChannel, std::move(debuggerImpl));
1128e509ee18Sopenharmony_ci
1129e509ee18Sopenharmony_ci    std::string msg = std::string() +
1130e509ee18Sopenharmony_ci        R"({
1131e509ee18Sopenharmony_ci            "id":0,
1132e509ee18Sopenharmony_ci            "method":"Debugger.setSkipAllPauses",
1133e509ee18Sopenharmony_ci            "params":{}
1134e509ee18Sopenharmony_ci        })";
1135e509ee18Sopenharmony_ci    DispatchRequest request(msg);
1136e509ee18Sopenharmony_ci
1137e509ee18Sopenharmony_ci    dispatcherImpl->Dispatch(request);
1138e509ee18Sopenharmony_ci    EXPECT_STREQ(outStrForCallbackCheck.c_str(), R"({"id":0,"result":{"code":1,"message":"wrong params"}})");
1139e509ee18Sopenharmony_ci    if (protocolChannel) {
1140e509ee18Sopenharmony_ci        delete protocolChannel;
1141e509ee18Sopenharmony_ci        protocolChannel = nullptr;
1142e509ee18Sopenharmony_ci    }
1143e509ee18Sopenharmony_ci}
1144e509ee18Sopenharmony_ci
1145e509ee18Sopenharmony_ciHWTEST_F_L0(DebuggerImplTest, Dispatcher_Dispatch_SetSkipAllPauses__002)
1146e509ee18Sopenharmony_ci{
1147e509ee18Sopenharmony_ci    std::string outStrForCallbackCheck = "";
1148e509ee18Sopenharmony_ci    std::function<void(const void*, const std::string &)> callback =
1149e509ee18Sopenharmony_ci        [&outStrForCallbackCheck]([[maybe_unused]] const void *ptr, const std::string &inStrOfReply) {
1150e509ee18Sopenharmony_ci            outStrForCallbackCheck = inStrOfReply;};
1151e509ee18Sopenharmony_ci    ProtocolChannel *protocolChannel = new ProtocolHandler(callback, ecmaVm);
1152e509ee18Sopenharmony_ci    auto runtimeImpl = std::make_unique<RuntimeImpl>(ecmaVm, protocolChannel);
1153e509ee18Sopenharmony_ci    auto debuggerImpl = std::make_unique<DebuggerImpl>(ecmaVm, protocolChannel, runtimeImpl.get());
1154e509ee18Sopenharmony_ci    auto dispatcherImpl = std::make_unique<DebuggerImpl::DispatcherImpl>(protocolChannel, std::move(debuggerImpl));
1155e509ee18Sopenharmony_ci
1156e509ee18Sopenharmony_ci    std::string msg = std::string() +
1157e509ee18Sopenharmony_ci        R"({
1158e509ee18Sopenharmony_ci            "id":0,
1159e509ee18Sopenharmony_ci            "method":"Debugger.setSkipAllPauses",
1160e509ee18Sopenharmony_ci            "params":{
1161e509ee18Sopenharmony_ci                "skip":true
1162e509ee18Sopenharmony_ci            }
1163e509ee18Sopenharmony_ci        })";
1164e509ee18Sopenharmony_ci    DispatchRequest request(msg);
1165e509ee18Sopenharmony_ci
1166e509ee18Sopenharmony_ci    dispatcherImpl->Dispatch(request);
1167e509ee18Sopenharmony_ci    EXPECT_STREQ(outStrForCallbackCheck.c_str(), R"({"id":0,"result":{}})");
1168e509ee18Sopenharmony_ci    if (protocolChannel) {
1169e509ee18Sopenharmony_ci        delete protocolChannel;
1170e509ee18Sopenharmony_ci        protocolChannel = nullptr;
1171e509ee18Sopenharmony_ci    }
1172e509ee18Sopenharmony_ci}
1173e509ee18Sopenharmony_ci
1174e509ee18Sopenharmony_ciHWTEST_F_L0(DebuggerImplTest, Dispatcher_Dispatch_GetPossibleAndSetBreakpoint__001)
1175e509ee18Sopenharmony_ci{
1176e509ee18Sopenharmony_ci    std::string outStrForCallbackCheck = "";
1177e509ee18Sopenharmony_ci    std::function<void(const void*, const std::string &)> callback =
1178e509ee18Sopenharmony_ci        [&outStrForCallbackCheck]([[maybe_unused]] const void *ptr, const std::string &inStrOfReply) {
1179e509ee18Sopenharmony_ci            outStrForCallbackCheck = inStrOfReply;};
1180e509ee18Sopenharmony_ci    ProtocolChannel *protocolChannel = new ProtocolHandler(callback, ecmaVm);
1181e509ee18Sopenharmony_ci    auto runtimeImpl = std::make_unique<RuntimeImpl>(ecmaVm, protocolChannel);
1182e509ee18Sopenharmony_ci    auto debuggerImpl = std::make_unique<DebuggerImpl>(ecmaVm, protocolChannel, runtimeImpl.get());
1183e509ee18Sopenharmony_ci    ecmaVm->GetJsDebuggerManager()->SetDebugMode(true);
1184e509ee18Sopenharmony_ci    auto dispatcherImpl = std::make_unique<DebuggerImpl::DispatcherImpl>(protocolChannel, std::move(debuggerImpl));
1185e509ee18Sopenharmony_ci
1186e509ee18Sopenharmony_ci    std::string msg = std::string() +
1187e509ee18Sopenharmony_ci        R"({
1188e509ee18Sopenharmony_ci            "id":0,
1189e509ee18Sopenharmony_ci            "method":"Debugger.getPossibleAndSetBreakpointByUrl",
1190e509ee18Sopenharmony_ci            "params":{}
1191e509ee18Sopenharmony_ci        })";
1192e509ee18Sopenharmony_ci    DispatchRequest request(msg);
1193e509ee18Sopenharmony_ci
1194e509ee18Sopenharmony_ci    dispatcherImpl->Dispatch(request);
1195e509ee18Sopenharmony_ci    EXPECT_STREQ(outStrForCallbackCheck.c_str(),
1196e509ee18Sopenharmony_ci        R"({"id":0,"result":{"code":1,"message":"GetPossibleAndSetBreakpointByUrl: no pennding breakpoint exists"}})");
1197e509ee18Sopenharmony_ci    if (protocolChannel) {
1198e509ee18Sopenharmony_ci        delete protocolChannel;
1199e509ee18Sopenharmony_ci        protocolChannel = nullptr;
1200e509ee18Sopenharmony_ci    }
1201e509ee18Sopenharmony_ci}
1202e509ee18Sopenharmony_ci
1203e509ee18Sopenharmony_ciHWTEST_F_L0(DebuggerImplTest, Dispatcher_Dispatch_GetPossibleAndSetBreakpoint__002)
1204e509ee18Sopenharmony_ci{
1205e509ee18Sopenharmony_ci    std::string outStrForCallbackCheck = "";
1206e509ee18Sopenharmony_ci    std::function<void(const void*, const std::string &)> callback =
1207e509ee18Sopenharmony_ci        [&outStrForCallbackCheck]([[maybe_unused]] const void *ptr, const std::string &inStrOfReply) {
1208e509ee18Sopenharmony_ci            outStrForCallbackCheck = inStrOfReply;};
1209e509ee18Sopenharmony_ci    ProtocolChannel *protocolChannel = new ProtocolHandler(callback, ecmaVm);
1210e509ee18Sopenharmony_ci    auto runtimeImpl = std::make_unique<RuntimeImpl>(ecmaVm, protocolChannel);
1211e509ee18Sopenharmony_ci    auto debuggerImpl = std::make_unique<DebuggerImpl>(ecmaVm, protocolChannel, runtimeImpl.get());
1212e509ee18Sopenharmony_ci    ecmaVm->GetJsDebuggerManager()->SetDebugMode(true);
1213e509ee18Sopenharmony_ci    auto dispatcherImpl = std::make_unique<DebuggerImpl::DispatcherImpl>(protocolChannel, std::move(debuggerImpl));
1214e509ee18Sopenharmony_ci
1215e509ee18Sopenharmony_ci    std::string msg = std::string() +
1216e509ee18Sopenharmony_ci        R"({
1217e509ee18Sopenharmony_ci            "id":0,
1218e509ee18Sopenharmony_ci            "method":"Debugger.getPossibleAndSetBreakpointByUrl",
1219e509ee18Sopenharmony_ci            "params":{
1220e509ee18Sopenharmony_ci                "locations":[
1221e509ee18Sopenharmony_ci                    {
1222e509ee18Sopenharmony_ci                        "lineNumber":3,
1223e509ee18Sopenharmony_ci                        "columnNumber":20,
1224e509ee18Sopenharmony_ci                        "url":"Index.ets"
1225e509ee18Sopenharmony_ci                    }]
1226e509ee18Sopenharmony_ci            }
1227e509ee18Sopenharmony_ci        })";
1228e509ee18Sopenharmony_ci    DispatchRequest request(msg);
1229e509ee18Sopenharmony_ci
1230e509ee18Sopenharmony_ci    dispatcherImpl->Dispatch(request);
1231e509ee18Sopenharmony_ci    EXPECT_STREQ(outStrForCallbackCheck.c_str(),
1232e509ee18Sopenharmony_ci        R"({"id":0,"result":{"locations":[{"lineNumber":3,"columnNumber":20,"id":"invalid","scriptId":0}]}})");
1233e509ee18Sopenharmony_ci    if (protocolChannel) {
1234e509ee18Sopenharmony_ci        delete protocolChannel;
1235e509ee18Sopenharmony_ci        protocolChannel = nullptr;
1236e509ee18Sopenharmony_ci    }
1237e509ee18Sopenharmony_ci}
1238e509ee18Sopenharmony_ci
1239e509ee18Sopenharmony_ciHWTEST_F_L0(DebuggerImplTest, Dispatcher_Dispatch_DropFrame__001)
1240e509ee18Sopenharmony_ci{
1241e509ee18Sopenharmony_ci    std::string outStrForCallbackCheck = "";
1242e509ee18Sopenharmony_ci    std::function<void(const void*, const std::string &)> callback =
1243e509ee18Sopenharmony_ci        [&outStrForCallbackCheck]([[maybe_unused]] const void *ptr, const std::string &inStrOfReply) {
1244e509ee18Sopenharmony_ci            outStrForCallbackCheck = inStrOfReply;};
1245e509ee18Sopenharmony_ci    ProtocolChannel *protocolChannel = new ProtocolHandler(callback, ecmaVm);
1246e509ee18Sopenharmony_ci    auto runtimeImpl = std::make_unique<RuntimeImpl>(ecmaVm, protocolChannel);
1247e509ee18Sopenharmony_ci    auto debuggerImpl = std::make_unique<DebuggerImpl>(ecmaVm, protocolChannel, runtimeImpl.get());
1248e509ee18Sopenharmony_ci    debuggerImpl->SetDebuggerState(DebuggerState::PAUSED);
1249e509ee18Sopenharmony_ci    auto dispatcherImpl = std::make_unique<DebuggerImpl::DispatcherImpl>(protocolChannel, std::move(debuggerImpl));
1250e509ee18Sopenharmony_ci
1251e509ee18Sopenharmony_ci    std::string msg = std::string() +
1252e509ee18Sopenharmony_ci        R"({
1253e509ee18Sopenharmony_ci            "id":0,
1254e509ee18Sopenharmony_ci            "method":"Debugger.dropFrame",
1255e509ee18Sopenharmony_ci            "params":{
1256e509ee18Sopenharmony_ci                "droppedDepth":3
1257e509ee18Sopenharmony_ci            }
1258e509ee18Sopenharmony_ci        })";
1259e509ee18Sopenharmony_ci    DispatchRequest request(msg);
1260e509ee18Sopenharmony_ci
1261e509ee18Sopenharmony_ci    dispatcherImpl->Dispatch(request);
1262e509ee18Sopenharmony_ci    EXPECT_STREQ(outStrForCallbackCheck.c_str(),
1263e509ee18Sopenharmony_ci        R"({"id":0,"result":{"code":1,"message":"Not yet support dropping multiple frames"}})");
1264e509ee18Sopenharmony_ci    if (protocolChannel) {
1265e509ee18Sopenharmony_ci        delete protocolChannel;
1266e509ee18Sopenharmony_ci        protocolChannel = nullptr;
1267e509ee18Sopenharmony_ci    }
1268e509ee18Sopenharmony_ci}
1269e509ee18Sopenharmony_ci
1270e509ee18Sopenharmony_ciHWTEST_F_L0(DebuggerImplTest, DispatcherImplCallFunctionOn)
1271e509ee18Sopenharmony_ci{
1272e509ee18Sopenharmony_ci    std::string outStrForCallbackCheck = "";
1273e509ee18Sopenharmony_ci    std::function<void(const void*, const std::string &)> callback =
1274e509ee18Sopenharmony_ci        [&outStrForCallbackCheck]([[maybe_unused]] const void *ptr, const std::string &inStrOfReply) {
1275e509ee18Sopenharmony_ci            outStrForCallbackCheck = inStrOfReply;};
1276e509ee18Sopenharmony_ci    ProtocolChannel *protocolChannel = new ProtocolHandler(callback, ecmaVm);
1277e509ee18Sopenharmony_ci    auto runtimeImpl = std::make_unique<RuntimeImpl>(ecmaVm, protocolChannel);
1278e509ee18Sopenharmony_ci    auto debuggerImpl = std::make_unique<DebuggerImpl>(ecmaVm, protocolChannel, runtimeImpl.get());
1279e509ee18Sopenharmony_ci    auto dispatcherImpl = std::make_unique<DebuggerImpl::DispatcherImpl>(protocolChannel, std::move(debuggerImpl));
1280e509ee18Sopenharmony_ci
1281e509ee18Sopenharmony_ci    std::string msg = std::string() + R"({"id":0,"method":"Debugger.callFunctionOn","params":{
1282e509ee18Sopenharmony_ci        "callFrameId":"0", "functionDeclaration":0}})";
1283e509ee18Sopenharmony_ci    DispatchRequest request(msg);
1284e509ee18Sopenharmony_ci    dispatcherImpl->CallFunctionOn(request);
1285e509ee18Sopenharmony_ci    ASSERT_TRUE(outStrForCallbackCheck.find("wrong params") != std::string::npos);
1286e509ee18Sopenharmony_ci
1287e509ee18Sopenharmony_ci    msg = std::string() + R"({"id":0,"method":"Debugger.callFunctionOn","params":{
1288e509ee18Sopenharmony_ci        "callFrameId":"0", "functionDeclaration":"test"}})";
1289e509ee18Sopenharmony_ci    DispatchRequest request1(msg);
1290e509ee18Sopenharmony_ci    dispatcherImpl->CallFunctionOn(request1);
1291e509ee18Sopenharmony_ci    ASSERT_TRUE(outStrForCallbackCheck.find("Unsupport eval now") == std::string::npos);
1292e509ee18Sopenharmony_ci    if (protocolChannel != nullptr) {
1293e509ee18Sopenharmony_ci        delete protocolChannel;
1294e509ee18Sopenharmony_ci        protocolChannel = nullptr;
1295e509ee18Sopenharmony_ci    }
1296e509ee18Sopenharmony_ci}
1297e509ee18Sopenharmony_ci
1298e509ee18Sopenharmony_ciHWTEST_F_L0(DebuggerImplTest, Dispatcher_Dispatch_SmartStepInto__001)
1299e509ee18Sopenharmony_ci{
1300e509ee18Sopenharmony_ci    std::string outStrForCallbackCheck = "";
1301e509ee18Sopenharmony_ci    std::function<void(const void*, const std::string &)> callback =
1302e509ee18Sopenharmony_ci        [&outStrForCallbackCheck]([[maybe_unused]] const void *ptr, const std::string &inStrOfReply) {
1303e509ee18Sopenharmony_ci            outStrForCallbackCheck = inStrOfReply;};
1304e509ee18Sopenharmony_ci    ProtocolChannel *protocolChannel = new ProtocolHandler(callback, ecmaVm);
1305e509ee18Sopenharmony_ci    auto runtimeImpl = std::make_unique<RuntimeImpl>(ecmaVm, protocolChannel);
1306e509ee18Sopenharmony_ci    auto debuggerImpl = std::make_unique<DebuggerImpl>(ecmaVm, protocolChannel, runtimeImpl.get());
1307e509ee18Sopenharmony_ci    auto dispatcherImpl = std::make_unique<DebuggerImpl::DispatcherImpl>(protocolChannel, std::move(debuggerImpl));
1308e509ee18Sopenharmony_ci
1309e509ee18Sopenharmony_ci    std::string msg = std::string() +
1310e509ee18Sopenharmony_ci        R"({
1311e509ee18Sopenharmony_ci            "id":0,
1312e509ee18Sopenharmony_ci            "method":"Debugger.smartStepInto",
1313e509ee18Sopenharmony_ci            "params":{}
1314e509ee18Sopenharmony_ci        })";
1315e509ee18Sopenharmony_ci    DispatchRequest request(msg);
1316e509ee18Sopenharmony_ci
1317e509ee18Sopenharmony_ci    dispatcherImpl->Dispatch(request);
1318e509ee18Sopenharmony_ci    EXPECT_STREQ(outStrForCallbackCheck.c_str(),
1319e509ee18Sopenharmony_ci        R"({"id":0,"result":{"code":1,"message":"wrong params"}})");
1320e509ee18Sopenharmony_ci    if (protocolChannel) {
1321e509ee18Sopenharmony_ci        delete protocolChannel;
1322e509ee18Sopenharmony_ci        protocolChannel = nullptr;
1323e509ee18Sopenharmony_ci    }
1324e509ee18Sopenharmony_ci}
1325e509ee18Sopenharmony_ci
1326e509ee18Sopenharmony_ciHWTEST_F_L0(DebuggerImplTest, Dispatcher_Dispatch_SmartStepInto__002)
1327e509ee18Sopenharmony_ci{
1328e509ee18Sopenharmony_ci    std::string outStrForCallbackCheck = "";
1329e509ee18Sopenharmony_ci    std::function<void(const void*, const std::string &)> callback =
1330e509ee18Sopenharmony_ci        [&outStrForCallbackCheck]([[maybe_unused]] const void *ptr, const std::string &inStrOfReply) {
1331e509ee18Sopenharmony_ci            outStrForCallbackCheck = inStrOfReply;};
1332e509ee18Sopenharmony_ci    ProtocolChannel *protocolChannel = new ProtocolHandler(callback, ecmaVm);
1333e509ee18Sopenharmony_ci    auto runtimeImpl = std::make_unique<RuntimeImpl>(ecmaVm, protocolChannel);
1334e509ee18Sopenharmony_ci    auto debuggerImpl = std::make_unique<DebuggerImpl>(ecmaVm, protocolChannel, runtimeImpl.get());
1335e509ee18Sopenharmony_ci    auto dispatcherImpl = std::make_unique<DebuggerImpl::DispatcherImpl>(protocolChannel, std::move(debuggerImpl));
1336e509ee18Sopenharmony_ci
1337e509ee18Sopenharmony_ci    std::string msg = std::string() +
1338e509ee18Sopenharmony_ci        R"({
1339e509ee18Sopenharmony_ci            "id":0,
1340e509ee18Sopenharmony_ci            "method":"Debugger.smartStepInto",
1341e509ee18Sopenharmony_ci            "params":{
1342e509ee18Sopenharmony_ci                "lineNumber":0,
1343e509ee18Sopenharmony_ci                "url":"url_str",
1344e509ee18Sopenharmony_ci                "urlRegex":"urlRegex_str",
1345e509ee18Sopenharmony_ci                "scriptHash":"scriptHash_str",
1346e509ee18Sopenharmony_ci                "columnNumber":0,
1347e509ee18Sopenharmony_ci                "condition":"condition_str"
1348e509ee18Sopenharmony_ci            }
1349e509ee18Sopenharmony_ci        })";
1350e509ee18Sopenharmony_ci    DispatchRequest request(msg);
1351e509ee18Sopenharmony_ci
1352e509ee18Sopenharmony_ci    dispatcherImpl->Dispatch(request);
1353e509ee18Sopenharmony_ci    EXPECT_STREQ(outStrForCallbackCheck.c_str(),
1354e509ee18Sopenharmony_ci        R"({"id":0,"result":{"code":1,"message":"Can only perform operation while paused"}})");
1355e509ee18Sopenharmony_ci    if (protocolChannel) {
1356e509ee18Sopenharmony_ci        delete protocolChannel;
1357e509ee18Sopenharmony_ci        protocolChannel = nullptr;
1358e509ee18Sopenharmony_ci    }
1359e509ee18Sopenharmony_ci}
1360e509ee18Sopenharmony_ci
1361e509ee18Sopenharmony_ciHWTEST_F_L0(DebuggerImplTest, Dispatcher_Dispatch_SmartStepInto__003)
1362e509ee18Sopenharmony_ci{
1363e509ee18Sopenharmony_ci    std::string outStrForCallbackCheck = "";
1364e509ee18Sopenharmony_ci    std::function<void(const void*, const std::string &)> callback =
1365e509ee18Sopenharmony_ci        [&outStrForCallbackCheck]([[maybe_unused]] const void *ptr, const std::string &inStrOfReply) {
1366e509ee18Sopenharmony_ci            outStrForCallbackCheck = inStrOfReply;};
1367e509ee18Sopenharmony_ci    ProtocolChannel *protocolChannel = new ProtocolHandler(callback, ecmaVm);
1368e509ee18Sopenharmony_ci    auto runtimeImpl = std::make_unique<RuntimeImpl>(ecmaVm, protocolChannel);
1369e509ee18Sopenharmony_ci    auto debuggerImpl = std::make_unique<DebuggerImpl>(ecmaVm, protocolChannel, runtimeImpl.get());
1370e509ee18Sopenharmony_ci    debuggerImpl->SetDebuggerState(DebuggerState::PAUSED);
1371e509ee18Sopenharmony_ci    auto dispatcherImpl = std::make_unique<DebuggerImpl::DispatcherImpl>(protocolChannel, std::move(debuggerImpl));
1372e509ee18Sopenharmony_ci
1373e509ee18Sopenharmony_ci    std::string msg = std::string() +
1374e509ee18Sopenharmony_ci        R"({
1375e509ee18Sopenharmony_ci            "id":0,
1376e509ee18Sopenharmony_ci            "method":"Debugger.smartStepInto",
1377e509ee18Sopenharmony_ci            "params":{
1378e509ee18Sopenharmony_ci                "lineNumber":0,
1379e509ee18Sopenharmony_ci                "url":"url_str",
1380e509ee18Sopenharmony_ci                "urlRegex":"urlRegex_str",
1381e509ee18Sopenharmony_ci                "scriptHash":"scriptHash_str",
1382e509ee18Sopenharmony_ci                "columnNumber":0,
1383e509ee18Sopenharmony_ci                "condition":"condition_str"
1384e509ee18Sopenharmony_ci            }
1385e509ee18Sopenharmony_ci        })";
1386e509ee18Sopenharmony_ci    DispatchRequest request(msg);
1387e509ee18Sopenharmony_ci
1388e509ee18Sopenharmony_ci    dispatcherImpl->Dispatch(request);
1389e509ee18Sopenharmony_ci    EXPECT_STREQ(outStrForCallbackCheck.c_str(),
1390e509ee18Sopenharmony_ci        R"({"id":0,"result":{"code":1,"message":"SetBreakpointByUrl: debugger agent is not enabled"}})");
1391e509ee18Sopenharmony_ci    if (protocolChannel) {
1392e509ee18Sopenharmony_ci        delete protocolChannel;
1393e509ee18Sopenharmony_ci        protocolChannel = nullptr;
1394e509ee18Sopenharmony_ci    }
1395e509ee18Sopenharmony_ci}
1396e509ee18Sopenharmony_ci
1397e509ee18Sopenharmony_ciHWTEST_F_L0(DebuggerImplTest, Dispatcher_Dispatch_SetNativeRange__001)
1398e509ee18Sopenharmony_ci{
1399e509ee18Sopenharmony_ci    std::string outStrForCallbackCheck = "";
1400e509ee18Sopenharmony_ci    std::function<void(const void*, const std::string &)> callback =
1401e509ee18Sopenharmony_ci        [&outStrForCallbackCheck]([[maybe_unused]] const void *ptr, const std::string &inStrOfReply) {
1402e509ee18Sopenharmony_ci            outStrForCallbackCheck = inStrOfReply;};
1403e509ee18Sopenharmony_ci    ProtocolChannel *protocolChannel = new ProtocolHandler(callback, ecmaVm);
1404e509ee18Sopenharmony_ci    auto runtimeImpl = std::make_unique<RuntimeImpl>(ecmaVm, protocolChannel);
1405e509ee18Sopenharmony_ci    auto debuggerImpl = std::make_unique<DebuggerImpl>(ecmaVm, protocolChannel, runtimeImpl.get());
1406e509ee18Sopenharmony_ci    auto dispatcherImpl = std::make_unique<DebuggerImpl::DispatcherImpl>(protocolChannel, std::move(debuggerImpl));
1407e509ee18Sopenharmony_ci
1408e509ee18Sopenharmony_ci    std::string msg = std::string() +
1409e509ee18Sopenharmony_ci        R"({
1410e509ee18Sopenharmony_ci            "id":0,
1411e509ee18Sopenharmony_ci            "method":"Debugger.setNativeRange",
1412e509ee18Sopenharmony_ci            "params":{
1413e509ee18Sopenharmony_ci                "nativeRange":""
1414e509ee18Sopenharmony_ci            }
1415e509ee18Sopenharmony_ci        })";
1416e509ee18Sopenharmony_ci    DispatchRequest request(msg);
1417e509ee18Sopenharmony_ci
1418e509ee18Sopenharmony_ci    dispatcherImpl->Dispatch(request);
1419e509ee18Sopenharmony_ci    EXPECT_STREQ(outStrForCallbackCheck.c_str(),
1420e509ee18Sopenharmony_ci        R"({"id":0,"result":{"code":1,"message":"wrong params"}})");
1421e509ee18Sopenharmony_ci    if (protocolChannel) {
1422e509ee18Sopenharmony_ci        delete protocolChannel;
1423e509ee18Sopenharmony_ci        protocolChannel = nullptr;
1424e509ee18Sopenharmony_ci    }
1425e509ee18Sopenharmony_ci}
1426e509ee18Sopenharmony_ci
1427e509ee18Sopenharmony_ciHWTEST_F_L0(DebuggerImplTest, Dispatcher_Dispatch_SetNativeRange__002)
1428e509ee18Sopenharmony_ci{
1429e509ee18Sopenharmony_ci    std::string outStrForCallbackCheck = "";
1430e509ee18Sopenharmony_ci    std::function<void(const void*, const std::string &)> callback =
1431e509ee18Sopenharmony_ci        [&outStrForCallbackCheck]([[maybe_unused]] const void *ptr, const std::string &inStrOfReply) {
1432e509ee18Sopenharmony_ci            outStrForCallbackCheck = inStrOfReply;};
1433e509ee18Sopenharmony_ci    ProtocolChannel *protocolChannel = new ProtocolHandler(callback, ecmaVm);
1434e509ee18Sopenharmony_ci    auto runtimeImpl = std::make_unique<RuntimeImpl>(ecmaVm, protocolChannel);
1435e509ee18Sopenharmony_ci    auto debuggerImpl = std::make_unique<DebuggerImpl>(ecmaVm, protocolChannel, runtimeImpl.get());
1436e509ee18Sopenharmony_ci    auto dispatcherImpl = std::make_unique<DebuggerImpl::DispatcherImpl>(protocolChannel, std::move(debuggerImpl));
1437e509ee18Sopenharmony_ci
1438e509ee18Sopenharmony_ci    std::string msg = std::string() +
1439e509ee18Sopenharmony_ci        R"({
1440e509ee18Sopenharmony_ci            "id":0,
1441e509ee18Sopenharmony_ci            "method":"Debugger.setNativeRange",
1442e509ee18Sopenharmony_ci            "params":{}
1443e509ee18Sopenharmony_ci        })";
1444e509ee18Sopenharmony_ci    DispatchRequest request(msg);
1445e509ee18Sopenharmony_ci
1446e509ee18Sopenharmony_ci    dispatcherImpl->Dispatch(request);
1447e509ee18Sopenharmony_ci    EXPECT_STREQ(outStrForCallbackCheck.c_str(),
1448e509ee18Sopenharmony_ci        R"({"id":0,"result":{}})");
1449e509ee18Sopenharmony_ci    if (protocolChannel) {
1450e509ee18Sopenharmony_ci        delete protocolChannel;
1451e509ee18Sopenharmony_ci        protocolChannel = nullptr;
1452e509ee18Sopenharmony_ci    }
1453e509ee18Sopenharmony_ci}
1454e509ee18Sopenharmony_ci
1455e509ee18Sopenharmony_ciHWTEST_F_L0(DebuggerImplTest, Dispatcher_Dispatch_ResetSingleStepper__001)
1456e509ee18Sopenharmony_ci{
1457e509ee18Sopenharmony_ci    std::string outStrForCallbackCheck = "";
1458e509ee18Sopenharmony_ci    std::function<void(const void*, const std::string &)> callback =
1459e509ee18Sopenharmony_ci        [&outStrForCallbackCheck]([[maybe_unused]] const void *ptr, const std::string &inStrOfReply) {
1460e509ee18Sopenharmony_ci            outStrForCallbackCheck = inStrOfReply;};
1461e509ee18Sopenharmony_ci    ProtocolChannel *protocolChannel = new ProtocolHandler(callback, ecmaVm);
1462e509ee18Sopenharmony_ci    auto runtimeImpl = std::make_unique<RuntimeImpl>(ecmaVm, protocolChannel);
1463e509ee18Sopenharmony_ci    auto debuggerImpl = std::make_unique<DebuggerImpl>(ecmaVm, protocolChannel, runtimeImpl.get());
1464e509ee18Sopenharmony_ci    auto dispatcherImpl = std::make_unique<DebuggerImpl::DispatcherImpl>(protocolChannel, std::move(debuggerImpl));
1465e509ee18Sopenharmony_ci
1466e509ee18Sopenharmony_ci    std::string msg = std::string() +
1467e509ee18Sopenharmony_ci        R"({
1468e509ee18Sopenharmony_ci            "id":0,
1469e509ee18Sopenharmony_ci            "method":"Debugger.resetSingleStepper",
1470e509ee18Sopenharmony_ci            "params":{
1471e509ee18Sopenharmony_ci                "resetSingleStepper":"test"
1472e509ee18Sopenharmony_ci            }
1473e509ee18Sopenharmony_ci        })";
1474e509ee18Sopenharmony_ci    DispatchRequest request(msg);
1475e509ee18Sopenharmony_ci
1476e509ee18Sopenharmony_ci    dispatcherImpl->Dispatch(request);
1477e509ee18Sopenharmony_ci    EXPECT_STREQ(outStrForCallbackCheck.c_str(),
1478e509ee18Sopenharmony_ci        R"({"id":0,"result":{"code":1,"message":"wrong params"}})");
1479e509ee18Sopenharmony_ci    if (protocolChannel) {
1480e509ee18Sopenharmony_ci        delete protocolChannel;
1481e509ee18Sopenharmony_ci        protocolChannel = nullptr;
1482e509ee18Sopenharmony_ci    }
1483e509ee18Sopenharmony_ci}
1484e509ee18Sopenharmony_ci
1485e509ee18Sopenharmony_ciHWTEST_F_L0(DebuggerImplTest, Dispatcher_Dispatch_ResetSingleStepper__002)
1486e509ee18Sopenharmony_ci{
1487e509ee18Sopenharmony_ci    std::string outStrForCallbackCheck = "";
1488e509ee18Sopenharmony_ci    std::function<void(const void*, const std::string &)> callback =
1489e509ee18Sopenharmony_ci        [&outStrForCallbackCheck]([[maybe_unused]] const void *ptr, const std::string &inStrOfReply) {
1490e509ee18Sopenharmony_ci            outStrForCallbackCheck = inStrOfReply;};
1491e509ee18Sopenharmony_ci    ProtocolChannel *protocolChannel = new ProtocolHandler(callback, ecmaVm);
1492e509ee18Sopenharmony_ci    auto runtimeImpl = std::make_unique<RuntimeImpl>(ecmaVm, protocolChannel);
1493e509ee18Sopenharmony_ci    auto debuggerImpl = std::make_unique<DebuggerImpl>(ecmaVm, protocolChannel, runtimeImpl.get());
1494e509ee18Sopenharmony_ci    auto dispatcherImpl = std::make_unique<DebuggerImpl::DispatcherImpl>(protocolChannel, std::move(debuggerImpl));
1495e509ee18Sopenharmony_ci
1496e509ee18Sopenharmony_ci    std::string msg = std::string() +
1497e509ee18Sopenharmony_ci        R"({
1498e509ee18Sopenharmony_ci            "id":0,
1499e509ee18Sopenharmony_ci            "method":"Debugger.resetSingleStepper",
1500e509ee18Sopenharmony_ci            "params":{
1501e509ee18Sopenharmony_ci                "resetSingleStepper":true
1502e509ee18Sopenharmony_ci            }
1503e509ee18Sopenharmony_ci        })";
1504e509ee18Sopenharmony_ci    DispatchRequest request(msg);
1505e509ee18Sopenharmony_ci
1506e509ee18Sopenharmony_ci    dispatcherImpl->Dispatch(request);
1507e509ee18Sopenharmony_ci    EXPECT_STREQ(outStrForCallbackCheck.c_str(),
1508e509ee18Sopenharmony_ci        R"({"id":0,"result":{}})");
1509e509ee18Sopenharmony_ci    if (protocolChannel) {
1510e509ee18Sopenharmony_ci        delete protocolChannel;
1511e509ee18Sopenharmony_ci        protocolChannel = nullptr;
1512e509ee18Sopenharmony_ci    }
1513e509ee18Sopenharmony_ci}
1514e509ee18Sopenharmony_ci
1515e509ee18Sopenharmony_ciHWTEST_F_L0(DebuggerImplTest, Dispatcher_Dispatch_ClientDisconnect)
1516e509ee18Sopenharmony_ci{
1517e509ee18Sopenharmony_ci    std::string outStrForCallbackCheck = "";
1518e509ee18Sopenharmony_ci    std::function<void(const void*, const std::string &)> callback =
1519e509ee18Sopenharmony_ci        [&outStrForCallbackCheck]([[maybe_unused]] const void *ptr, const std::string &inStrOfReply) {
1520e509ee18Sopenharmony_ci            outStrForCallbackCheck = inStrOfReply;};
1521e509ee18Sopenharmony_ci    ProtocolChannel *protocolChannel = new ProtocolHandler(callback, ecmaVm);
1522e509ee18Sopenharmony_ci    auto runtimeImpl = std::make_unique<RuntimeImpl>(ecmaVm, protocolChannel);
1523e509ee18Sopenharmony_ci    auto debuggerImpl = std::make_unique<DebuggerImpl>(ecmaVm, protocolChannel, runtimeImpl.get());
1524e509ee18Sopenharmony_ci    auto dispatcherImpl = std::make_unique<DebuggerImpl::DispatcherImpl>(protocolChannel, std::move(debuggerImpl));
1525e509ee18Sopenharmony_ci
1526e509ee18Sopenharmony_ci    std::string msg = std::string() +
1527e509ee18Sopenharmony_ci        R"({
1528e509ee18Sopenharmony_ci            "id":0,
1529e509ee18Sopenharmony_ci            "method":"Debugger.clientDisconnect",
1530e509ee18Sopenharmony_ci            "params":{}
1531e509ee18Sopenharmony_ci        })";
1532e509ee18Sopenharmony_ci    DispatchRequest request(msg);
1533e509ee18Sopenharmony_ci
1534e509ee18Sopenharmony_ci    dispatcherImpl->Dispatch(request);
1535e509ee18Sopenharmony_ci    EXPECT_STREQ(outStrForCallbackCheck.c_str(), R"()");
1536e509ee18Sopenharmony_ci    if (protocolChannel) {
1537e509ee18Sopenharmony_ci        delete protocolChannel;
1538e509ee18Sopenharmony_ci        protocolChannel = nullptr;
1539e509ee18Sopenharmony_ci    }
1540e509ee18Sopenharmony_ci}
1541e509ee18Sopenharmony_ci
1542e509ee18Sopenharmony_ciHWTEST_F_L0(DebuggerImplTest, Dispatcher_Dispatch_CallFunctionOn__001)
1543e509ee18Sopenharmony_ci{
1544e509ee18Sopenharmony_ci    std::string outStrForCallbackCheck = "";
1545e509ee18Sopenharmony_ci    std::function<void(const void*, const std::string &)> callback =
1546e509ee18Sopenharmony_ci        [&outStrForCallbackCheck]([[maybe_unused]] const void *ptr, const std::string &inStrOfReply) {
1547e509ee18Sopenharmony_ci            outStrForCallbackCheck = inStrOfReply;};
1548e509ee18Sopenharmony_ci    ProtocolChannel *protocolChannel = new ProtocolHandler(callback, ecmaVm);
1549e509ee18Sopenharmony_ci    auto runtimeImpl = std::make_unique<RuntimeImpl>(ecmaVm, protocolChannel);
1550e509ee18Sopenharmony_ci    auto debuggerImpl = std::make_unique<DebuggerImpl>(ecmaVm, protocolChannel, runtimeImpl.get());
1551e509ee18Sopenharmony_ci    auto dispatcherImpl = std::make_unique<DebuggerImpl::DispatcherImpl>(protocolChannel, std::move(debuggerImpl));
1552e509ee18Sopenharmony_ci
1553e509ee18Sopenharmony_ci    std::string msg = std::string() +
1554e509ee18Sopenharmony_ci        R"({
1555e509ee18Sopenharmony_ci            "id":0,
1556e509ee18Sopenharmony_ci            "method":"Debugger.callFunctionOn",
1557e509ee18Sopenharmony_ci            "params":{
1558e509ee18Sopenharmony_ci                "callFrameId":"1",
1559e509ee18Sopenharmony_ci                "functionDeclaration":"test"
1560e509ee18Sopenharmony_ci            }
1561e509ee18Sopenharmony_ci        })";
1562e509ee18Sopenharmony_ci    DispatchRequest request(msg);
1563e509ee18Sopenharmony_ci
1564e509ee18Sopenharmony_ci    dispatcherImpl->Dispatch(request);
1565e509ee18Sopenharmony_ci    EXPECT_STREQ(outStrForCallbackCheck.c_str(),
1566e509ee18Sopenharmony_ci        R"({"id":0,"result":{"code":1,"message":"Invalid callFrameId."}})");
1567e509ee18Sopenharmony_ci    if (protocolChannel) {
1568e509ee18Sopenharmony_ci        delete protocolChannel;
1569e509ee18Sopenharmony_ci        protocolChannel = nullptr;
1570e509ee18Sopenharmony_ci    }
1571e509ee18Sopenharmony_ci}
1572e509ee18Sopenharmony_ci
1573e509ee18Sopenharmony_ciHWTEST_F_L0(DebuggerImplTest, Dispatcher_Dispatch_CallFunctionOn__002)
1574e509ee18Sopenharmony_ci{
1575e509ee18Sopenharmony_ci    std::string outStrForCallbackCheck = "";
1576e509ee18Sopenharmony_ci    std::function<void(const void*, const std::string &)> callback =
1577e509ee18Sopenharmony_ci        [&outStrForCallbackCheck]([[maybe_unused]] const void *ptr, const std::string &inStrOfReply) {
1578e509ee18Sopenharmony_ci            outStrForCallbackCheck = inStrOfReply;};
1579e509ee18Sopenharmony_ci    ProtocolChannel *protocolChannel = new ProtocolHandler(callback, ecmaVm);
1580e509ee18Sopenharmony_ci    auto runtimeImpl = std::make_unique<RuntimeImpl>(ecmaVm, protocolChannel);
1581e509ee18Sopenharmony_ci    auto debuggerImpl = std::make_unique<DebuggerImpl>(ecmaVm, protocolChannel, runtimeImpl.get());
1582e509ee18Sopenharmony_ci    auto dispatcherImpl = std::make_unique<DebuggerImpl::DispatcherImpl>(protocolChannel, std::move(debuggerImpl));
1583e509ee18Sopenharmony_ci
1584e509ee18Sopenharmony_ci    std::string msg = std::string() +
1585e509ee18Sopenharmony_ci        R"({
1586e509ee18Sopenharmony_ci            "id":0,
1587e509ee18Sopenharmony_ci            "method":"Debugger.callFunctionOn",
1588e509ee18Sopenharmony_ci            "params":{
1589e509ee18Sopenharmony_ci                "callFrameId":"0",
1590e509ee18Sopenharmony_ci                "functionDeclaration":0
1591e509ee18Sopenharmony_ci            }
1592e509ee18Sopenharmony_ci        })";
1593e509ee18Sopenharmony_ci    DispatchRequest request(msg);
1594e509ee18Sopenharmony_ci
1595e509ee18Sopenharmony_ci    dispatcherImpl->Dispatch(request);
1596e509ee18Sopenharmony_ci    EXPECT_STREQ(outStrForCallbackCheck.c_str(),
1597e509ee18Sopenharmony_ci        R"({"id":0,"result":{"code":1,"message":"wrong params"}})");
1598e509ee18Sopenharmony_ci    if (protocolChannel) {
1599e509ee18Sopenharmony_ci        delete protocolChannel;
1600e509ee18Sopenharmony_ci        protocolChannel = nullptr;
1601e509ee18Sopenharmony_ci    }
1602e509ee18Sopenharmony_ci}
1603e509ee18Sopenharmony_ci
1604e509ee18Sopenharmony_ciHWTEST_F_L0(DebuggerImplTest, NativeOutTest)
1605e509ee18Sopenharmony_ci{
1606e509ee18Sopenharmony_ci    std::string outStrForCallbackCheck = "";
1607e509ee18Sopenharmony_ci    std::function<void(const void*, const std::string &)> callback =
1608e509ee18Sopenharmony_ci        [&outStrForCallbackCheck]([[maybe_unused]] const void *ptr, const std::string &inStrOfReply) {
1609e509ee18Sopenharmony_ci            outStrForCallbackCheck = inStrOfReply;};
1610e509ee18Sopenharmony_ci    ProtocolChannel *protocolChannel = new ProtocolHandler(callback, ecmaVm);
1611e509ee18Sopenharmony_ci    auto runtimeImpl = std::make_unique<RuntimeImpl>(ecmaVm, protocolChannel);
1612e509ee18Sopenharmony_ci    auto debuggerImpl = std::make_unique<DebuggerImpl>(ecmaVm, protocolChannel, runtimeImpl.get());
1613e509ee18Sopenharmony_ci    std::unique_ptr<JSPtHooks> jspthooks = std::make_unique<JSPtHooks>(debuggerImpl.get());
1614e509ee18Sopenharmony_ci    bool result1 = jspthooks->NativeOut();
1615e509ee18Sopenharmony_ci    ASSERT_TRUE(!result1);
1616e509ee18Sopenharmony_ci    bool value = true;
1617e509ee18Sopenharmony_ci    debuggerImpl->SetNativeOutPause(value);
1618e509ee18Sopenharmony_ci    bool result2 = jspthooks->NativeOut();
1619e509ee18Sopenharmony_ci    ASSERT_TRUE(result2);
1620e509ee18Sopenharmony_ci    ASSERT_NE(jspthooks, nullptr);
1621e509ee18Sopenharmony_ci}
1622e509ee18Sopenharmony_ci
1623e509ee18Sopenharmony_ciHWTEST_F_L0(DebuggerImplTest, NotifyNativeReturn__001)
1624e509ee18Sopenharmony_ci{
1625e509ee18Sopenharmony_ci    std::string outStrForCallbackCheck = "";
1626e509ee18Sopenharmony_ci    std::function<void(const void*, const std::string &)> callback =
1627e509ee18Sopenharmony_ci        [&outStrForCallbackCheck]([[maybe_unused]] const void *ptr, const std::string &inStrOfReply) {
1628e509ee18Sopenharmony_ci            outStrForCallbackCheck = inStrOfReply;};
1629e509ee18Sopenharmony_ci    ProtocolChannel *protocolChannel = new ProtocolHandler(callback, ecmaVm);
1630e509ee18Sopenharmony_ci
1631e509ee18Sopenharmony_ci    auto runtimeImpl = std::make_unique<RuntimeImpl>(ecmaVm, protocolChannel);
1632e509ee18Sopenharmony_ci    auto debuggerImpl = std::make_unique<DebuggerImpl>(ecmaVm, protocolChannel, runtimeImpl.get());
1633e509ee18Sopenharmony_ci    std::unique_ptr<PtJson> json = PtJson::CreateObject();
1634e509ee18Sopenharmony_ci    json->Add("enabled", false);
1635e509ee18Sopenharmony_ci    json->Add("mixedStackEnabled", false);
1636e509ee18Sopenharmony_ci    std::unique_ptr<SetMixedDebugParams> params = SetMixedDebugParams::Create(*json);
1637e509ee18Sopenharmony_ci    debuggerImpl->SetMixedDebugEnabled(*params);
1638e509ee18Sopenharmony_ci    debuggerImpl->NotifyNativeReturn(nullptr);
1639e509ee18Sopenharmony_ci    auto debugger = std::make_unique<DebuggerImplFriendTest>(debuggerImpl);
1640e509ee18Sopenharmony_ci    ASSERT_TRUE(!debugger->GetMixStackEnabled());
1641e509ee18Sopenharmony_ci    if (protocolChannel) {
1642e509ee18Sopenharmony_ci        delete protocolChannel;
1643e509ee18Sopenharmony_ci        protocolChannel = nullptr;
1644e509ee18Sopenharmony_ci    }
1645e509ee18Sopenharmony_ci}
1646e509ee18Sopenharmony_ci
1647e509ee18Sopenharmony_ciHWTEST_F_L0(DebuggerImplTest, NotifyNativeReturn__002)
1648e509ee18Sopenharmony_ci{
1649e509ee18Sopenharmony_ci    std::string outStrForCallbackCheck = "";
1650e509ee18Sopenharmony_ci    std::function<void(const void*, const std::string &)> callback =
1651e509ee18Sopenharmony_ci        [&outStrForCallbackCheck]([[maybe_unused]] const void *ptr, const std::string &inStrOfReply) {
1652e509ee18Sopenharmony_ci            outStrForCallbackCheck = inStrOfReply;};
1653e509ee18Sopenharmony_ci    ProtocolChannel *protocolChannel = new ProtocolHandler(callback, ecmaVm);
1654e509ee18Sopenharmony_ci
1655e509ee18Sopenharmony_ci    auto runtimeImpl = std::make_unique<RuntimeImpl>(ecmaVm, protocolChannel);
1656e509ee18Sopenharmony_ci    auto debuggerImpl = std::make_unique<DebuggerImpl>(ecmaVm, protocolChannel, runtimeImpl.get());
1657e509ee18Sopenharmony_ci    std::unique_ptr<PtJson> json = PtJson::CreateObject();
1658e509ee18Sopenharmony_ci    json->Add("enabled", false);
1659e509ee18Sopenharmony_ci    json->Add("mixedStackEnabled", true);
1660e509ee18Sopenharmony_ci    std::unique_ptr<SetMixedDebugParams> params = SetMixedDebugParams::Create(*json);
1661e509ee18Sopenharmony_ci    debuggerImpl->SetMixedDebugEnabled(*params);
1662e509ee18Sopenharmony_ci    debuggerImpl->NotifyNativeReturn(nullptr);
1663e509ee18Sopenharmony_ci    auto debugger = std::make_unique<DebuggerImplFriendTest>(debuggerImpl);
1664e509ee18Sopenharmony_ci    ASSERT_TRUE(debugger->GetMixStackEnabled());
1665e509ee18Sopenharmony_ci    if (protocolChannel) {
1666e509ee18Sopenharmony_ci        delete protocolChannel;
1667e509ee18Sopenharmony_ci        protocolChannel = nullptr;
1668e509ee18Sopenharmony_ci    }
1669e509ee18Sopenharmony_ci}
1670e509ee18Sopenharmony_ci
1671e509ee18Sopenharmony_ciHWTEST_F_L0(DebuggerImplTest, NotifyReturnNative__001)
1672e509ee18Sopenharmony_ci{
1673e509ee18Sopenharmony_ci    std::string outStrForCallbackCheck = "";
1674e509ee18Sopenharmony_ci    std::function<void(const void*, const std::string &)> callback =
1675e509ee18Sopenharmony_ci        [&outStrForCallbackCheck]([[maybe_unused]] const void *ptr, const std::string &inStrOfReply) {
1676e509ee18Sopenharmony_ci            outStrForCallbackCheck = inStrOfReply;};
1677e509ee18Sopenharmony_ci    ProtocolChannel *protocolChannel = new ProtocolHandler(callback, ecmaVm);
1678e509ee18Sopenharmony_ci
1679e509ee18Sopenharmony_ci    auto runtimeImpl = std::make_unique<RuntimeImpl>(ecmaVm, protocolChannel);
1680e509ee18Sopenharmony_ci    auto debuggerImpl = std::make_unique<DebuggerImpl>(ecmaVm, protocolChannel, runtimeImpl.get());
1681e509ee18Sopenharmony_ci    std::unique_ptr<PtJson> json = PtJson::CreateObject();
1682e509ee18Sopenharmony_ci    json->Add("enabled", false);
1683e509ee18Sopenharmony_ci    json->Add("mixedStackEnabled", true);
1684e509ee18Sopenharmony_ci    std::unique_ptr<SetMixedDebugParams> params = SetMixedDebugParams::Create(*json);
1685e509ee18Sopenharmony_ci    debuggerImpl->SetMixedDebugEnabled(*params);
1686e509ee18Sopenharmony_ci    debuggerImpl->NotifyReturnNative();
1687e509ee18Sopenharmony_ci    auto debugger = std::make_unique<DebuggerImplFriendTest>(debuggerImpl);
1688e509ee18Sopenharmony_ci    ASSERT_TRUE(debugger->GetMixStackEnabled());
1689e509ee18Sopenharmony_ci    if (protocolChannel) {
1690e509ee18Sopenharmony_ci        delete protocolChannel;
1691e509ee18Sopenharmony_ci        protocolChannel = nullptr;
1692e509ee18Sopenharmony_ci    }
1693e509ee18Sopenharmony_ci}
1694e509ee18Sopenharmony_ci
1695e509ee18Sopenharmony_ciHWTEST_F_L0(DebuggerImplTest, NotifyReturnNative__002)
1696e509ee18Sopenharmony_ci{
1697e509ee18Sopenharmony_ci    std::string outStrForCallbackCheck = "";
1698e509ee18Sopenharmony_ci    std::function<void(const void*, const std::string &)> callback =
1699e509ee18Sopenharmony_ci        [&outStrForCallbackCheck]([[maybe_unused]] const void *ptr, const std::string &inStrOfReply) {
1700e509ee18Sopenharmony_ci            outStrForCallbackCheck = inStrOfReply;};
1701e509ee18Sopenharmony_ci    ProtocolChannel *protocolChannel = new ProtocolHandler(callback, ecmaVm);
1702e509ee18Sopenharmony_ci
1703e509ee18Sopenharmony_ci    auto runtimeImpl = std::make_unique<RuntimeImpl>(ecmaVm, protocolChannel);
1704e509ee18Sopenharmony_ci    auto debuggerImpl = std::make_unique<DebuggerImpl>(ecmaVm, protocolChannel, runtimeImpl.get());
1705e509ee18Sopenharmony_ci    std::unique_ptr<PtJson> json = PtJson::CreateObject();
1706e509ee18Sopenharmony_ci    json->Add("enabled", false);
1707e509ee18Sopenharmony_ci    json->Add("mixedStackEnabled", false);
1708e509ee18Sopenharmony_ci    std::unique_ptr<SetMixedDebugParams> params = SetMixedDebugParams::Create(*json);
1709e509ee18Sopenharmony_ci    debuggerImpl->SetMixedDebugEnabled(*params);
1710e509ee18Sopenharmony_ci    debuggerImpl->NotifyReturnNative();
1711e509ee18Sopenharmony_ci    auto debugger = std::make_unique<DebuggerImplFriendTest>(debuggerImpl);
1712e509ee18Sopenharmony_ci    ASSERT_TRUE(!debugger->GetMixStackEnabled());
1713e509ee18Sopenharmony_ci    if (protocolChannel) {
1714e509ee18Sopenharmony_ci        delete protocolChannel;
1715e509ee18Sopenharmony_ci        protocolChannel = nullptr;
1716e509ee18Sopenharmony_ci    }
1717e509ee18Sopenharmony_ci}
1718e509ee18Sopenharmony_ci
1719e509ee18Sopenharmony_ciHWTEST_F_L0(DebuggerImplTest, NotifyNativeCalling__001)
1720e509ee18Sopenharmony_ci{
1721e509ee18Sopenharmony_ci    std::string outStrForCallbackCheck = "";
1722e509ee18Sopenharmony_ci    std::function<void(const void*, const std::string &)> callback =
1723e509ee18Sopenharmony_ci        [&outStrForCallbackCheck]([[maybe_unused]] const void *ptr, const std::string &inStrOfReply) {
1724e509ee18Sopenharmony_ci            outStrForCallbackCheck = inStrOfReply;};
1725e509ee18Sopenharmony_ci    ProtocolChannel *protocolChannel = new ProtocolHandler(callback, ecmaVm);
1726e509ee18Sopenharmony_ci
1727e509ee18Sopenharmony_ci    auto runtimeImpl = std::make_unique<RuntimeImpl>(ecmaVm, protocolChannel);
1728e509ee18Sopenharmony_ci    auto debuggerImpl = std::make_unique<DebuggerImpl>(ecmaVm, protocolChannel, runtimeImpl.get());
1729e509ee18Sopenharmony_ci    std::unique_ptr<PtJson> json = PtJson::CreateObject();
1730e509ee18Sopenharmony_ci    json->Add("enabled", false);
1731e509ee18Sopenharmony_ci    json->Add("mixedStackEnabled", false);
1732e509ee18Sopenharmony_ci    std::unique_ptr<SetMixedDebugParams> params = SetMixedDebugParams::Create(*json);
1733e509ee18Sopenharmony_ci    debuggerImpl->SetMixedDebugEnabled(*params);
1734e509ee18Sopenharmony_ci    debuggerImpl->NotifyNativeCalling(nullptr);
1735e509ee18Sopenharmony_ci    auto debugger = std::make_unique<DebuggerImplFriendTest>(debuggerImpl);
1736e509ee18Sopenharmony_ci    ASSERT_TRUE(!debugger->GetMixStackEnabled());
1737e509ee18Sopenharmony_ci    if (protocolChannel) {
1738e509ee18Sopenharmony_ci        delete protocolChannel;
1739e509ee18Sopenharmony_ci        protocolChannel = nullptr;
1740e509ee18Sopenharmony_ci    }
1741e509ee18Sopenharmony_ci}
1742e509ee18Sopenharmony_ci
1743e509ee18Sopenharmony_ciHWTEST_F_L0(DebuggerImplTest, NotifyNativeCalling__002)
1744e509ee18Sopenharmony_ci{
1745e509ee18Sopenharmony_ci    std::string outStrForCallbackCheck = "";
1746e509ee18Sopenharmony_ci    std::function<void(const void*, const std::string &)> callback =
1747e509ee18Sopenharmony_ci        [&outStrForCallbackCheck]([[maybe_unused]] const void *ptr, const std::string &inStrOfReply) {
1748e509ee18Sopenharmony_ci            outStrForCallbackCheck = inStrOfReply;};
1749e509ee18Sopenharmony_ci    ProtocolChannel *protocolChannel = new ProtocolHandler(callback, ecmaVm);
1750e509ee18Sopenharmony_ci
1751e509ee18Sopenharmony_ci    auto runtimeImpl = std::make_unique<RuntimeImpl>(ecmaVm, protocolChannel);
1752e509ee18Sopenharmony_ci    auto debuggerImpl = std::make_unique<DebuggerImpl>(ecmaVm, protocolChannel, runtimeImpl.get());
1753e509ee18Sopenharmony_ci    std::unique_ptr<PtJson> json = PtJson::CreateObject();
1754e509ee18Sopenharmony_ci    json->Add("enabled", false);
1755e509ee18Sopenharmony_ci    json->Add("mixedStackEnabled", true);
1756e509ee18Sopenharmony_ci    std::unique_ptr<SetMixedDebugParams> params = SetMixedDebugParams::Create(*json);
1757e509ee18Sopenharmony_ci    debuggerImpl->SetMixedDebugEnabled(*params);
1758e509ee18Sopenharmony_ci    debuggerImpl->NotifyNativeCalling(nullptr);
1759e509ee18Sopenharmony_ci    auto debugger = std::make_unique<DebuggerImplFriendTest>(debuggerImpl);
1760e509ee18Sopenharmony_ci    ASSERT_TRUE(debugger->GetMixStackEnabled());
1761e509ee18Sopenharmony_ci    if (protocolChannel) {
1762e509ee18Sopenharmony_ci        delete protocolChannel;
1763e509ee18Sopenharmony_ci        protocolChannel = nullptr;
1764e509ee18Sopenharmony_ci    }
1765e509ee18Sopenharmony_ci}
1766e509ee18Sopenharmony_ci
1767e509ee18Sopenharmony_ciHWTEST_F_L0(DebuggerImplTest, CheckAndGenerateCondFunc__001)
1768e509ee18Sopenharmony_ci{
1769e509ee18Sopenharmony_ci    std::string outStrForCallbackCheck = "";
1770e509ee18Sopenharmony_ci    std::function<void(const void*, const std::string &)> callback =
1771e509ee18Sopenharmony_ci        [&outStrForCallbackCheck]([[maybe_unused]] const void *ptr, const std::string &inStrOfReply) {
1772e509ee18Sopenharmony_ci            outStrForCallbackCheck = inStrOfReply;};
1773e509ee18Sopenharmony_ci    ProtocolChannel *protocolChannel = new ProtocolHandler(callback, ecmaVm);
1774e509ee18Sopenharmony_ci    auto runtimeImpl = std::make_unique<RuntimeImpl>(ecmaVm, protocolChannel);
1775e509ee18Sopenharmony_ci    auto debuggerImpl = std::make_unique<DebuggerImpl>(ecmaVm, protocolChannel, runtimeImpl.get());
1776e509ee18Sopenharmony_ci    auto debugger = std::make_unique<DebuggerImplFriendTest>(debuggerImpl);
1777e509ee18Sopenharmony_ci    std::vector<uint8_t> dest;
1778e509ee18Sopenharmony_ci    debugger->CheckAndGenerateCondFunc("");
1779e509ee18Sopenharmony_ci    ASSERT_TRUE(!debugger->DecodeAndCheckBase64("", dest));
1780e509ee18Sopenharmony_ci    std::string msg = "UEFOREEAAAAAAAAADAACAEgBAAAAAAAAAAAAAAIAAAA8AAAAAQAA";
1781e509ee18Sopenharmony_ci    msg += "AEQBAAAAAAARAAAAAEAAABEAAAAkQAAAMQAAAB8AAAASAEAAAIAAABsAAAAAgAAAHQAAAD//////////";
1782e509ee18Sopenharmony_ci    debugger->CheckAndGenerateCondFunc(msg);
1783e509ee18Sopenharmony_ci    ASSERT_TRUE(debugger->DecodeAndCheckBase64(msg, dest));
1784e509ee18Sopenharmony_ci}
1785e509ee18Sopenharmony_ci
1786e509ee18Sopenharmony_ciHWTEST_F_L0(DebuggerImplTest, ConvertToLocal__001)
1787e509ee18Sopenharmony_ci{
1788e509ee18Sopenharmony_ci    std::string outStrForCallbackCheck = "";
1789e509ee18Sopenharmony_ci    std::function<void(const void*, const std::string &)> callback =
1790e509ee18Sopenharmony_ci        [&outStrForCallbackCheck]([[maybe_unused]] const void *ptr, const std::string &inStrOfReply) {
1791e509ee18Sopenharmony_ci            outStrForCallbackCheck = inStrOfReply;};
1792e509ee18Sopenharmony_ci    ProtocolChannel *protocolChannel = new ProtocolHandler(callback, ecmaVm);
1793e509ee18Sopenharmony_ci    auto runtimeImpl = std::make_unique<RuntimeImpl>(ecmaVm, protocolChannel);
1794e509ee18Sopenharmony_ci    auto debuggerImpl = std::make_unique<DebuggerImpl>(ecmaVm, protocolChannel, runtimeImpl.get());
1795e509ee18Sopenharmony_ci    auto debugger = std::make_unique<DebuggerImplFriendTest>(debuggerImpl);
1796e509ee18Sopenharmony_ci    Local<JSValueRef> taggedValue = debugger->ConvertToLocal("");
1797e509ee18Sopenharmony_ci    ASSERT_TRUE(!taggedValue.IsEmpty());
1798e509ee18Sopenharmony_ci    taggedValue = debugger->ConvertToLocal("false");
1799e509ee18Sopenharmony_ci    ASSERT_TRUE(!taggedValue.IsEmpty());
1800e509ee18Sopenharmony_ci    taggedValue = debugger->ConvertToLocal("true");
1801e509ee18Sopenharmony_ci    ASSERT_TRUE(!taggedValue.IsEmpty());
1802e509ee18Sopenharmony_ci    taggedValue = debugger->ConvertToLocal("undefined");
1803e509ee18Sopenharmony_ci    ASSERT_TRUE(!taggedValue.IsEmpty());
1804e509ee18Sopenharmony_ci    taggedValue = debugger->ConvertToLocal("\"test\"");
1805e509ee18Sopenharmony_ci    ASSERT_TRUE(!taggedValue.IsEmpty());
1806e509ee18Sopenharmony_ci    taggedValue = debugger->ConvertToLocal("test");
1807e509ee18Sopenharmony_ci    ASSERT_TRUE(taggedValue.IsEmpty());
1808e509ee18Sopenharmony_ci    taggedValue = debugger->ConvertToLocal("1");
1809e509ee18Sopenharmony_ci    ASSERT_TRUE(!taggedValue.IsEmpty());
1810e509ee18Sopenharmony_ci}
1811e509ee18Sopenharmony_ci}  // namespace panda::test
1812