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 "ecmascript/tests/test_helper.h" 17e509ee18Sopenharmony_ci#include "ecmascript/ecma_vm.h" 18e509ee18Sopenharmony_ci#include "debugger_service.h" 19e509ee18Sopenharmony_ci#include "protocol_handler.h" 20e509ee18Sopenharmony_ci#include "ecmascript/debugger/js_debugger_manager.h" 21e509ee18Sopenharmony_ciusing namespace panda::ecmascript; 22e509ee18Sopenharmony_ciusing namespace panda::ecmascript::tooling; 23e509ee18Sopenharmony_ci 24e509ee18Sopenharmony_cinamespace panda::test { 25e509ee18Sopenharmony_ciclass DebuggerServiceTest : public testing::Test { 26e509ee18Sopenharmony_cipublic: 27e509ee18Sopenharmony_ci static void SetUpTestCase() 28e509ee18Sopenharmony_ci { 29e509ee18Sopenharmony_ci GTEST_LOG_(INFO) << "SetUpTestCase"; 30e509ee18Sopenharmony_ci } 31e509ee18Sopenharmony_ci 32e509ee18Sopenharmony_ci static void TearDownTestCase() 33e509ee18Sopenharmony_ci { 34e509ee18Sopenharmony_ci GTEST_LOG_(INFO) << "TearDownCase"; 35e509ee18Sopenharmony_ci } 36e509ee18Sopenharmony_ci 37e509ee18Sopenharmony_ci void SetUp() override 38e509ee18Sopenharmony_ci { 39e509ee18Sopenharmony_ci TestHelper::CreateEcmaVMWithScope(ecmaVm, thread, scope); 40e509ee18Sopenharmony_ci } 41e509ee18Sopenharmony_ci 42e509ee18Sopenharmony_ci void TearDown() override 43e509ee18Sopenharmony_ci { 44e509ee18Sopenharmony_ci TestHelper::DestroyEcmaVMWithScope(ecmaVm, scope); 45e509ee18Sopenharmony_ci } 46e509ee18Sopenharmony_ci 47e509ee18Sopenharmony_ciprotected: 48e509ee18Sopenharmony_ci EcmaVM *ecmaVm {nullptr}; 49e509ee18Sopenharmony_ci EcmaHandleScope *scope {nullptr}; 50e509ee18Sopenharmony_ci JSThread *thread {nullptr}; 51e509ee18Sopenharmony_ci}; 52e509ee18Sopenharmony_ci 53e509ee18Sopenharmony_ciHWTEST_F_L0(DebuggerServiceTest, InitializeDebuggerTest) 54e509ee18Sopenharmony_ci{ 55e509ee18Sopenharmony_ci ProtocolHandler *handler = ecmaVm->GetJsDebuggerManager()->GetDebuggerHandler(); 56e509ee18Sopenharmony_ci ASSERT_TRUE(handler == nullptr); 57e509ee18Sopenharmony_ci InitializeDebugger(ecmaVm, nullptr); 58e509ee18Sopenharmony_ci handler = ecmaVm->GetJsDebuggerManager()->GetDebuggerHandler(); 59e509ee18Sopenharmony_ci ASSERT_TRUE(handler != nullptr); 60e509ee18Sopenharmony_ci InitializeDebugger(ecmaVm, nullptr); 61e509ee18Sopenharmony_ci ASSERT_TRUE(handler != nullptr); 62e509ee18Sopenharmony_ci EcmaVM *vm = nullptr; 63e509ee18Sopenharmony_ci InitializeDebugger(vm, nullptr); 64e509ee18Sopenharmony_ci ASSERT_TRUE(handler != nullptr); 65e509ee18Sopenharmony_ci} 66e509ee18Sopenharmony_ci 67e509ee18Sopenharmony_ciHWTEST_F_L0(DebuggerServiceTest, UninitializeDebuggerTest) 68e509ee18Sopenharmony_ci{ 69e509ee18Sopenharmony_ci UninitializeDebugger(ecmaVm); 70e509ee18Sopenharmony_ci InitializeDebugger(ecmaVm, nullptr); 71e509ee18Sopenharmony_ci ProtocolHandler *handler = ecmaVm->GetJsDebuggerManager()->GetDebuggerHandler(); 72e509ee18Sopenharmony_ci ASSERT_TRUE(handler != nullptr); 73e509ee18Sopenharmony_ci UninitializeDebugger(ecmaVm); 74e509ee18Sopenharmony_ci handler = ecmaVm->GetJsDebuggerManager()->GetDebuggerHandler(); 75e509ee18Sopenharmony_ci ASSERT_TRUE(handler == nullptr); 76e509ee18Sopenharmony_ci EcmaVM *vm = nullptr; 77e509ee18Sopenharmony_ci UninitializeDebugger(vm); 78e509ee18Sopenharmony_ci ASSERT_TRUE(handler == nullptr); 79e509ee18Sopenharmony_ci} 80e509ee18Sopenharmony_ci 81e509ee18Sopenharmony_ciHWTEST_F_L0(DebuggerServiceTest, OnMessageTest) 82e509ee18Sopenharmony_ci{ 83e509ee18Sopenharmony_ci ProtocolHandler *handler = ecmaVm->GetJsDebuggerManager()->GetDebuggerHandler(); 84e509ee18Sopenharmony_ci OnMessage(ecmaVm, ""); 85e509ee18Sopenharmony_ci ASSERT_TRUE(handler == nullptr); 86e509ee18Sopenharmony_ci std::string result = ""; 87e509ee18Sopenharmony_ci std::function<void(const void*, const std::string &)> callback = 88e509ee18Sopenharmony_ci [&result]([[maybe_unused]] const void *ptr, const std::string &temp) { result = temp; }; 89e509ee18Sopenharmony_ci InitializeDebugger(ecmaVm, callback); 90e509ee18Sopenharmony_ci std::string msg = std::string() + R"({"id":0,"method":"Tracing.Test","params":{}})"; 91e509ee18Sopenharmony_ci OnMessage(ecmaVm, msg + ""); 92e509ee18Sopenharmony_ci ProcessMessage(ecmaVm); 93e509ee18Sopenharmony_ci ASSERT_TRUE(result.find("Unknown method: Test") != std::string::npos); 94e509ee18Sopenharmony_ci EcmaVM *vm = nullptr; 95e509ee18Sopenharmony_ci OnMessage(vm, ""); 96e509ee18Sopenharmony_ci ASSERT_TRUE(result.find("Unknown method: Test") != std::string::npos); 97e509ee18Sopenharmony_ci} 98e509ee18Sopenharmony_ci 99e509ee18Sopenharmony_ciHWTEST_F_L0(DebuggerServiceTest, WaitForDebuggerTest) 100e509ee18Sopenharmony_ci{ 101e509ee18Sopenharmony_ci ProtocolHandler *handler = ecmaVm->GetJsDebuggerManager()->GetDebuggerHandler(); 102e509ee18Sopenharmony_ci WaitForDebugger(ecmaVm); 103e509ee18Sopenharmony_ci ASSERT_TRUE(handler == nullptr); 104e509ee18Sopenharmony_ci} 105e509ee18Sopenharmony_ci 106e509ee18Sopenharmony_ciHWTEST_F_L0(DebuggerServiceTest, ProcessMessageTest) 107e509ee18Sopenharmony_ci{ 108e509ee18Sopenharmony_ci ProtocolHandler *handler = ecmaVm->GetJsDebuggerManager()->GetDebuggerHandler(); 109e509ee18Sopenharmony_ci ProcessMessage(ecmaVm); 110e509ee18Sopenharmony_ci ASSERT_TRUE(handler == nullptr); 111e509ee18Sopenharmony_ci std::string result = ""; 112e509ee18Sopenharmony_ci std::function<void(const void*, const std::string &)> callback = 113e509ee18Sopenharmony_ci [&result]([[maybe_unused]] const void *ptr, const std::string &temp) { result = temp; }; 114e509ee18Sopenharmony_ci InitializeDebugger(ecmaVm, callback); 115e509ee18Sopenharmony_ci std::string msg = std::string() + R"({"id":0,"method":"Tracing.end","params":{}})"; 116e509ee18Sopenharmony_ci OnMessage(ecmaVm, msg + ""); 117e509ee18Sopenharmony_ci ProcessMessage(ecmaVm); 118e509ee18Sopenharmony_ci ASSERT_TRUE(result.find("\"id\":0,") != std::string::npos); 119e509ee18Sopenharmony_ci EcmaVM *vm = nullptr; 120e509ee18Sopenharmony_ci ProcessMessage(vm); 121e509ee18Sopenharmony_ci ASSERT_TRUE(result.find("Stop is failure") != std::string::npos); 122e509ee18Sopenharmony_ci} 123e509ee18Sopenharmony_ci 124e509ee18Sopenharmony_ciHWTEST_F_L0(DebuggerServiceTest, GetDispatchStatusTest) 125e509ee18Sopenharmony_ci{ 126e509ee18Sopenharmony_ci ProtocolHandler::DispatchStatus status = ProtocolHandler::DispatchStatus(GetDispatchStatus(ecmaVm)); 127e509ee18Sopenharmony_ci ASSERT_TRUE(status == ProtocolHandler::DispatchStatus::UNKNOWN); 128e509ee18Sopenharmony_ci std::string result = ""; 129e509ee18Sopenharmony_ci std::function<void(const void*, const std::string &)> callback = 130e509ee18Sopenharmony_ci [&result]([[maybe_unused]] const void *ptr, const std::string &temp) { result = temp; }; 131e509ee18Sopenharmony_ci InitializeDebugger(ecmaVm, callback); 132e509ee18Sopenharmony_ci status = ProtocolHandler::DispatchStatus(GetDispatchStatus(ecmaVm)); 133e509ee18Sopenharmony_ci ASSERT_TRUE(status == ProtocolHandler::DispatchStatus::DISPATCHED); 134e509ee18Sopenharmony_ci EcmaVM *vm = nullptr; 135e509ee18Sopenharmony_ci int32_t GetDispatchStatusTest = GetDispatchStatus(vm); 136e509ee18Sopenharmony_ci ASSERT_TRUE(GetDispatchStatusTest == 0); 137e509ee18Sopenharmony_ci} 138e509ee18Sopenharmony_ci} // namespace panda::test