1/* 2 * Copyright (c) 2022 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16#include "ecmascript/tests/test_helper.h" 17#include "ecmascript/ecma_vm.h" 18#include "debugger_service.h" 19#include "protocol_handler.h" 20#include "ecmascript/debugger/js_debugger_manager.h" 21using namespace panda::ecmascript; 22using namespace panda::ecmascript::tooling; 23 24namespace panda::test { 25class DebuggerServiceTest : public testing::Test { 26public: 27 static void SetUpTestCase() 28 { 29 GTEST_LOG_(INFO) << "SetUpTestCase"; 30 } 31 32 static void TearDownTestCase() 33 { 34 GTEST_LOG_(INFO) << "TearDownCase"; 35 } 36 37 void SetUp() override 38 { 39 TestHelper::CreateEcmaVMWithScope(ecmaVm, thread, scope); 40 } 41 42 void TearDown() override 43 { 44 TestHelper::DestroyEcmaVMWithScope(ecmaVm, scope); 45 } 46 47protected: 48 EcmaVM *ecmaVm {nullptr}; 49 EcmaHandleScope *scope {nullptr}; 50 JSThread *thread {nullptr}; 51}; 52 53HWTEST_F_L0(DebuggerServiceTest, InitializeDebuggerTest) 54{ 55 ProtocolHandler *handler = ecmaVm->GetJsDebuggerManager()->GetDebuggerHandler(); 56 ASSERT_TRUE(handler == nullptr); 57 InitializeDebugger(ecmaVm, nullptr); 58 handler = ecmaVm->GetJsDebuggerManager()->GetDebuggerHandler(); 59 ASSERT_TRUE(handler != nullptr); 60 InitializeDebugger(ecmaVm, nullptr); 61 ASSERT_TRUE(handler != nullptr); 62 EcmaVM *vm = nullptr; 63 InitializeDebugger(vm, nullptr); 64 ASSERT_TRUE(handler != nullptr); 65} 66 67HWTEST_F_L0(DebuggerServiceTest, UninitializeDebuggerTest) 68{ 69 UninitializeDebugger(ecmaVm); 70 InitializeDebugger(ecmaVm, nullptr); 71 ProtocolHandler *handler = ecmaVm->GetJsDebuggerManager()->GetDebuggerHandler(); 72 ASSERT_TRUE(handler != nullptr); 73 UninitializeDebugger(ecmaVm); 74 handler = ecmaVm->GetJsDebuggerManager()->GetDebuggerHandler(); 75 ASSERT_TRUE(handler == nullptr); 76 EcmaVM *vm = nullptr; 77 UninitializeDebugger(vm); 78 ASSERT_TRUE(handler == nullptr); 79} 80 81HWTEST_F_L0(DebuggerServiceTest, OnMessageTest) 82{ 83 ProtocolHandler *handler = ecmaVm->GetJsDebuggerManager()->GetDebuggerHandler(); 84 OnMessage(ecmaVm, ""); 85 ASSERT_TRUE(handler == nullptr); 86 std::string result = ""; 87 std::function<void(const void*, const std::string &)> callback = 88 [&result]([[maybe_unused]] const void *ptr, const std::string &temp) { result = temp; }; 89 InitializeDebugger(ecmaVm, callback); 90 std::string msg = std::string() + R"({"id":0,"method":"Tracing.Test","params":{}})"; 91 OnMessage(ecmaVm, msg + ""); 92 ProcessMessage(ecmaVm); 93 ASSERT_TRUE(result.find("Unknown method: Test") != std::string::npos); 94 EcmaVM *vm = nullptr; 95 OnMessage(vm, ""); 96 ASSERT_TRUE(result.find("Unknown method: Test") != std::string::npos); 97} 98 99HWTEST_F_L0(DebuggerServiceTest, WaitForDebuggerTest) 100{ 101 ProtocolHandler *handler = ecmaVm->GetJsDebuggerManager()->GetDebuggerHandler(); 102 WaitForDebugger(ecmaVm); 103 ASSERT_TRUE(handler == nullptr); 104} 105 106HWTEST_F_L0(DebuggerServiceTest, ProcessMessageTest) 107{ 108 ProtocolHandler *handler = ecmaVm->GetJsDebuggerManager()->GetDebuggerHandler(); 109 ProcessMessage(ecmaVm); 110 ASSERT_TRUE(handler == nullptr); 111 std::string result = ""; 112 std::function<void(const void*, const std::string &)> callback = 113 [&result]([[maybe_unused]] const void *ptr, const std::string &temp) { result = temp; }; 114 InitializeDebugger(ecmaVm, callback); 115 std::string msg = std::string() + R"({"id":0,"method":"Tracing.end","params":{}})"; 116 OnMessage(ecmaVm, msg + ""); 117 ProcessMessage(ecmaVm); 118 ASSERT_TRUE(result.find("\"id\":0,") != std::string::npos); 119 EcmaVM *vm = nullptr; 120 ProcessMessage(vm); 121 ASSERT_TRUE(result.find("Stop is failure") != std::string::npos); 122} 123 124HWTEST_F_L0(DebuggerServiceTest, GetDispatchStatusTest) 125{ 126 ProtocolHandler::DispatchStatus status = ProtocolHandler::DispatchStatus(GetDispatchStatus(ecmaVm)); 127 ASSERT_TRUE(status == ProtocolHandler::DispatchStatus::UNKNOWN); 128 std::string result = ""; 129 std::function<void(const void*, const std::string &)> callback = 130 [&result]([[maybe_unused]] const void *ptr, const std::string &temp) { result = temp; }; 131 InitializeDebugger(ecmaVm, callback); 132 status = ProtocolHandler::DispatchStatus(GetDispatchStatus(ecmaVm)); 133 ASSERT_TRUE(status == ProtocolHandler::DispatchStatus::DISPATCHED); 134 EcmaVM *vm = nullptr; 135 int32_t GetDispatchStatusTest = GetDispatchStatus(vm); 136 ASSERT_TRUE(GetDispatchStatusTest == 0); 137} 138} // namespace panda::test