1/*
2 * Copyright (c) 2023 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 <csignal>
17
18#include "ecmascript/ecma_vm.h"
19#include "ecmascript/napi/include/jsnapi.h"
20#include "ecmascript/tests/test_helper.h"
21#include "tooling/test/client_utils/test_list.h"
22#include "tooling/test/client_utils/test_util.h"
23
24namespace panda::ecmascript::tooling::test {
25using panda::test::TestHelper;
26static int g_port = 9003;  // 9003: socket port
27class DebuggerCIntClientTest : public testing::TestWithParam<const char *> {
28public:
29    static void SetUpTestCase()
30    {
31        GTEST_LOG_(INFO) << "SetUpTestCase";
32        if (signal(SIGPIPE, SIG_IGN) == SIG_ERR) {
33            GTEST_LOG_(ERROR) << "Reset SIGPIPE failed.";
34        }
35    }
36
37    static void TearDownTestCase()
38    {
39        GTEST_LOG_(INFO) << "TearDownCase";
40    }
41
42    void SetUp() override
43    {
44        g_port += 1;
45        SetCurrentTestName(GetParam());
46        TestHelper::CreateEcmaVMWithScope(instance, thread, scope, false, true);
47        TestUtil::ForkSocketClient(g_port, GetParam());
48        JSNApi::DebugOption debugOption = {DEBUGGER_LIBRARY, true, g_port};
49        JSNApi::StartDebugger(instance, debugOption);
50        if (instance->GetJsDebuggerManager() != nullptr) {
51            instance->GetJsDebuggerManager()->DisableObjectHashDisplay();
52        }
53    }
54
55    void TearDown() override
56    {
57        std::this_thread::sleep_for(std::chrono::microseconds(500000)); // 500000: 500ms
58        JSNApi::StopDebugger(instance);
59        TestHelper::DestroyEcmaVMWithScope(instance, scope);
60    }
61
62    EcmaVM *instance {nullptr};
63    EcmaHandleScope *scope {nullptr};
64    JSThread *thread {nullptr};
65};
66
67HWTEST_P_L0(DebuggerCIntClientTest, DebuggerSuite)
68{
69    std::string testName = GetCurrentTestName();
70    std::cout << "Running " << testName << std::endl;
71    ASSERT_NE(instance, nullptr);
72    auto [pandaFile, entryPoint] = GetTestEntryPoint(testName);
73    auto res = JSNApi::Execute(instance, pandaFile.c_str(), entryPoint.c_str());
74    ASSERT_TRUE(res);
75}
76
77INSTANTIATE_TEST_SUITE_P(DebuggerCIntClientAbcTest, DebuggerCIntClientTest, testing::ValuesIn(GetTestList()));
78}  // namespace panda::ecmascript::tooling::test
79