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