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 "ecmascript/ecma_vm.h"
17#include "ecmascript/napi/include/jsnapi.h"
18#include "ecmascript/tests/test_helper.h"
19#include "tooling/test/utils/test_list.h"
20#include "ecmascript/debugger/js_debugger.h"
21
22namespace panda::ecmascript::tooling::test {
23using panda::test::TestHelper;
24
25class DebuggerCInterpTest : public testing::TestWithParam<const char *> {
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        SetCurrentTestName(GetParam());
40        TestHelper::CreateEcmaVMWithScope(instance, thread, scope, false, true);
41        JSNApi::DebugOption debugOption = {DEBUGGER_TEST_LIBRARY, true, -1};
42        JSNApi::StartDebugger(instance, debugOption);
43        if (instance->GetJsDebuggerManager() != nullptr) {
44            instance->GetJsDebuggerManager()->DisableObjectHashDisplay();
45        }
46    }
47
48    void TearDown() override
49    {
50        JSNApi::StopDebugger(instance);
51        TestHelper::DestroyEcmaVMWithScope(instance, scope);
52    }
53
54    EcmaVM *instance {nullptr};
55    EcmaHandleScope *scope {nullptr};
56    JSThread *thread {nullptr};
57};
58
59HWTEST_P_L0(DebuggerCInterpTest, DebuggerSuite)
60{
61    std::string testName = GetCurrentTestName();
62    std::cout << "Running " << testName << std::endl;
63    ASSERT_NE(instance, nullptr);
64    auto [pandaFile, entryPoint] = GetTestEntryPoint(testName);
65    auto res = JSNApi::Execute(instance, pandaFile.c_str(), entryPoint.c_str());
66    ASSERT_TRUE(res);
67}
68
69INSTANTIATE_TEST_SUITE_P(DebugAbcTest, DebuggerCInterpTest, testing::ValuesIn(GetTestList()));
70}  // namespace panda::ecmascript::tooling::test
71