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 "tooling/base/pt_params.h"
17e509ee18Sopenharmony_ci#include "ecmascript/tests/test_helper.h"
18e509ee18Sopenharmony_ci#include "protocol_handler.h"
19e509ee18Sopenharmony_ci
20e509ee18Sopenharmony_ciusing namespace panda::ecmascript;
21e509ee18Sopenharmony_ciusing namespace panda::ecmascript::tooling;
22e509ee18Sopenharmony_ci
23e509ee18Sopenharmony_cinamespace panda::test {
24e509ee18Sopenharmony_ciclass PtParamsTest : public testing::Test {
25e509ee18Sopenharmony_cipublic:
26e509ee18Sopenharmony_ci    static void SetUpTestCase()
27e509ee18Sopenharmony_ci    {
28e509ee18Sopenharmony_ci        GTEST_LOG_(INFO) << "SetUpTestCase";
29e509ee18Sopenharmony_ci    }
30e509ee18Sopenharmony_ci
31e509ee18Sopenharmony_ci    static void TearDownTestCase()
32e509ee18Sopenharmony_ci    {
33e509ee18Sopenharmony_ci        GTEST_LOG_(INFO) << "TearDownCase";
34e509ee18Sopenharmony_ci    }
35e509ee18Sopenharmony_ci
36e509ee18Sopenharmony_ci    void SetUp() override
37e509ee18Sopenharmony_ci    {
38e509ee18Sopenharmony_ci        TestHelper::CreateEcmaVMWithScope(ecmaVm, thread, scope);
39e509ee18Sopenharmony_ci    }
40e509ee18Sopenharmony_ci
41e509ee18Sopenharmony_ci    void TearDown() override
42e509ee18Sopenharmony_ci    {
43e509ee18Sopenharmony_ci        TestHelper::DestroyEcmaVMWithScope(ecmaVm, scope);
44e509ee18Sopenharmony_ci    }
45e509ee18Sopenharmony_ci
46e509ee18Sopenharmony_ciprotected:
47e509ee18Sopenharmony_ci    EcmaVM *ecmaVm {nullptr};
48e509ee18Sopenharmony_ci    EcmaHandleScope *scope {nullptr};
49e509ee18Sopenharmony_ci    JSThread *thread {nullptr};
50e509ee18Sopenharmony_ci};
51e509ee18Sopenharmony_ci
52e509ee18Sopenharmony_ciHWTEST_F_L0(PtParamsTest, EnableParamsCreateTest)
53e509ee18Sopenharmony_ci{
54e509ee18Sopenharmony_ci    std::unique_ptr<PtJson> ptJson = PtJson::CreateObject();
55e509ee18Sopenharmony_ci    std::string attribute = "test";
56e509ee18Sopenharmony_ci    ptJson->Add("maxScriptsCacheSize", attribute.c_str());
57e509ee18Sopenharmony_ci    std::unique_ptr<EnableParams> result = EnableParams::Create(*ptJson);
58e509ee18Sopenharmony_ci    ASSERT_TRUE(result == nullptr);
59e509ee18Sopenharmony_ci}
60e509ee18Sopenharmony_ci
61e509ee18Sopenharmony_ciHWTEST_F_L0(PtParamsTest, EvaluateOnCallFrameParamsCreateTest)
62e509ee18Sopenharmony_ci{
63e509ee18Sopenharmony_ci    std::unique_ptr<PtJson> ptJson = PtJson::CreateObject();
64e509ee18Sopenharmony_ci    std::string attribute = "test";
65e509ee18Sopenharmony_ci    ptJson->Add("objectGroup", 0);
66e509ee18Sopenharmony_ci    ptJson->Add("includeCommandLineAPI", attribute.c_str());
67e509ee18Sopenharmony_ci    ptJson->Add("silent", attribute.c_str());
68e509ee18Sopenharmony_ci    ptJson->Add("returnByValue", attribute.c_str());
69e509ee18Sopenharmony_ci    ptJson->Add("generatePreview", attribute.c_str());
70e509ee18Sopenharmony_ci    ptJson->Add("throwOnSideEffect", attribute.c_str());
71e509ee18Sopenharmony_ci    std::unique_ptr<EvaluateOnCallFrameParams> result = EvaluateOnCallFrameParams::Create(*ptJson);
72e509ee18Sopenharmony_ci    ASSERT_TRUE(result == nullptr);
73e509ee18Sopenharmony_ci}
74e509ee18Sopenharmony_ci
75e509ee18Sopenharmony_ciHWTEST_F_L0(PtParamsTest, GetPossibleBreakpointsParamsCreateTest)
76e509ee18Sopenharmony_ci{
77e509ee18Sopenharmony_ci    std::unique_ptr<PtJson> ptJson = PtJson::CreateObject();
78e509ee18Sopenharmony_ci    std::unique_ptr<PtJson>  start = PtJson::CreateObject();
79e509ee18Sopenharmony_ci    std::unique_ptr<PtJson> ptJson1 = PtJson::CreateObject();
80e509ee18Sopenharmony_ci    std::unique_ptr<PtJson>  end = PtJson::CreateObject();
81e509ee18Sopenharmony_ci    std::string attribute = "test";
82e509ee18Sopenharmony_ci    ptJson->Add("start", start);
83e509ee18Sopenharmony_ci    ptJson->Add("end", end);
84e509ee18Sopenharmony_ci    std::unique_ptr<GetPossibleBreakpointsParams> result = GetPossibleBreakpointsParams::Create(*ptJson);
85e509ee18Sopenharmony_ci    ASSERT_TRUE(result == nullptr);
86e509ee18Sopenharmony_ci    ptJson1->Add("end", attribute.c_str());
87e509ee18Sopenharmony_ci    ptJson1->Add("restrictToFunction", attribute.c_str());
88e509ee18Sopenharmony_ci    std::unique_ptr<GetPossibleBreakpointsParams> result1 = GetPossibleBreakpointsParams::Create(*ptJson1);
89e509ee18Sopenharmony_ci    ASSERT_TRUE(result1 == nullptr);
90e509ee18Sopenharmony_ci}
91e509ee18Sopenharmony_ci
92e509ee18Sopenharmony_ciHWTEST_F_L0(PtParamsTest, ResumeParamsCreateTest)
93e509ee18Sopenharmony_ci{
94e509ee18Sopenharmony_ci    std::unique_ptr<PtJson> ptJson = PtJson::CreateObject();
95e509ee18Sopenharmony_ci    std::unique_ptr<PtJson> ptJson1 = PtJson::CreateObject();
96e509ee18Sopenharmony_ci    std::string attribute = "test";
97e509ee18Sopenharmony_ci    ptJson->Add("terminateOnResume", attribute.c_str());
98e509ee18Sopenharmony_ci    std::unique_ptr<ResumeParams> result = ResumeParams::Create(*ptJson);
99e509ee18Sopenharmony_ci    ASSERT_TRUE(result == nullptr);
100e509ee18Sopenharmony_ci    std::unique_ptr<ResumeParams> result1 = ResumeParams::Create(*ptJson1);
101e509ee18Sopenharmony_ci    ASSERT_TRUE(result == nullptr);
102e509ee18Sopenharmony_ci}
103e509ee18Sopenharmony_ci
104e509ee18Sopenharmony_ciHWTEST_F_L0(PtParamsTest, SetBlackboxPatternsParamsCreateTest)
105e509ee18Sopenharmony_ci{
106e509ee18Sopenharmony_ci    std::unique_ptr<PtJson> ptJson = PtJson::CreateObject();
107e509ee18Sopenharmony_ci    std::unique_ptr<PtJson> array = PtJson::CreateArray();
108e509ee18Sopenharmony_ci    std::string attribute = "test";
109e509ee18Sopenharmony_ci    array->Push(128);
110e509ee18Sopenharmony_ci    array->Push(true);
111e509ee18Sopenharmony_ci    array->Push(attribute.c_str());
112e509ee18Sopenharmony_ci    ptJson->Add("patterns", array);
113e509ee18Sopenharmony_ci    std::unique_ptr<SetBlackboxPatternsParams> result = SetBlackboxPatternsParams::Create(*ptJson);
114e509ee18Sopenharmony_ci    ASSERT_TRUE(result == nullptr);
115e509ee18Sopenharmony_ci}
116e509ee18Sopenharmony_ci
117e509ee18Sopenharmony_ciHWTEST_F_L0(PtParamsTest, StepIntoParamsCreateTest)
118e509ee18Sopenharmony_ci{
119e509ee18Sopenharmony_ci    std::unique_ptr<PtJson> ptJson = PtJson::CreateObject();
120e509ee18Sopenharmony_ci    std::unique_ptr<PtJson> ptJson1 = PtJson::CreateObject();
121e509ee18Sopenharmony_ci    std::unique_ptr<PtJson> array = PtJson::CreateArray();
122e509ee18Sopenharmony_ci    std::unique_ptr<PtJson> scriptId = PtJson::CreateObject();
123e509ee18Sopenharmony_ci    std::unique_ptr<PtJson> end = PtJson::CreateObject();
124e509ee18Sopenharmony_ci    std::string attribute = "test";
125e509ee18Sopenharmony_ci    scriptId->Add("scriptId", 123);
126e509ee18Sopenharmony_ci    end->Add("end", 123);
127e509ee18Sopenharmony_ci    array->Push(scriptId);
128e509ee18Sopenharmony_ci    array->Push(end);
129e509ee18Sopenharmony_ci    ptJson->Add("skipList", array);
130e509ee18Sopenharmony_ci    std::unique_ptr<StepIntoParams> result = StepIntoParams::Create(*ptJson);
131e509ee18Sopenharmony_ci    ASSERT_TRUE(result == nullptr);
132e509ee18Sopenharmony_ci    std::unique_ptr<StepIntoParams> result1 = StepIntoParams::Create(*ptJson1);
133e509ee18Sopenharmony_ci    ASSERT_TRUE(result1 != nullptr);
134e509ee18Sopenharmony_ci}
135e509ee18Sopenharmony_ci
136e509ee18Sopenharmony_ciHWTEST_F_L0(PtParamsTest, StepOverParamsCreateTest)
137e509ee18Sopenharmony_ci{
138e509ee18Sopenharmony_ci    std::unique_ptr<PtJson> ptJson = PtJson::CreateObject();
139e509ee18Sopenharmony_ci    std::unique_ptr<PtJson> ptJson1 = PtJson::CreateObject();
140e509ee18Sopenharmony_ci    std::unique_ptr<PtJson> array = PtJson::CreateArray();
141e509ee18Sopenharmony_ci    std::unique_ptr<PtJson> scriptId = PtJson::CreateObject();
142e509ee18Sopenharmony_ci    std::unique_ptr<PtJson> end = PtJson::CreateObject();
143e509ee18Sopenharmony_ci    std::string attribute = "test";
144e509ee18Sopenharmony_ci    scriptId->Add("scriptId", 123);
145e509ee18Sopenharmony_ci    end->Add("end", 123);
146e509ee18Sopenharmony_ci    array->Push(scriptId);
147e509ee18Sopenharmony_ci    array->Push(end);
148e509ee18Sopenharmony_ci    ptJson->Add("skipList", array);
149e509ee18Sopenharmony_ci    std::unique_ptr<StepOverParams> result = StepOverParams::Create(*ptJson);
150e509ee18Sopenharmony_ci    ASSERT_TRUE(result == nullptr);
151e509ee18Sopenharmony_ci    std::unique_ptr<StepOverParams> result1 = StepOverParams::Create(*ptJson1);
152e509ee18Sopenharmony_ci    ASSERT_TRUE(result1 != nullptr);
153e509ee18Sopenharmony_ci}
154e509ee18Sopenharmony_ci
155e509ee18Sopenharmony_ciHWTEST_F_L0(PtParamsTest, SetMixedDebugParamsCreateTest)
156e509ee18Sopenharmony_ci{
157e509ee18Sopenharmony_ci    std::unique_ptr<PtJson> ptJson = PtJson::CreateObject();
158e509ee18Sopenharmony_ci    std::unique_ptr<PtJson> ptJson1 = PtJson::CreateObject();
159e509ee18Sopenharmony_ci    std::string attribute = "test";
160e509ee18Sopenharmony_ci    ptJson->Add("enabled", attribute.c_str());
161e509ee18Sopenharmony_ci    std::unique_ptr<SetMixedDebugParams> result = SetMixedDebugParams::Create(*ptJson);
162e509ee18Sopenharmony_ci    ASSERT_TRUE(result == nullptr);
163e509ee18Sopenharmony_ci    std::unique_ptr<SetMixedDebugParams> result1 = SetMixedDebugParams::Create(*ptJson1);
164e509ee18Sopenharmony_ci    ASSERT_TRUE(result == nullptr);
165e509ee18Sopenharmony_ci}
166e509ee18Sopenharmony_ci
167e509ee18Sopenharmony_ciHWTEST_F_L0(PtParamsTest, ReplyNativeCallingParamsCreateTest)
168e509ee18Sopenharmony_ci{
169e509ee18Sopenharmony_ci    std::unique_ptr<PtJson> ptJson = PtJson::CreateObject();
170e509ee18Sopenharmony_ci    std::unique_ptr<PtJson> ptJson1 = PtJson::CreateObject();
171e509ee18Sopenharmony_ci    std::string attribute = "test";
172e509ee18Sopenharmony_ci    ptJson->Add("userCode", attribute.c_str());
173e509ee18Sopenharmony_ci    std::unique_ptr<ReplyNativeCallingParams> result = ReplyNativeCallingParams::Create(*ptJson);
174e509ee18Sopenharmony_ci    ASSERT_TRUE(result == nullptr);
175e509ee18Sopenharmony_ci    std::unique_ptr<ReplyNativeCallingParams> result1 = ReplyNativeCallingParams::Create(*ptJson1);
176e509ee18Sopenharmony_ci    ASSERT_TRUE(result == nullptr);
177e509ee18Sopenharmony_ci}
178e509ee18Sopenharmony_ci
179e509ee18Sopenharmony_ciHWTEST_F_L0(PtParamsTest, CallFunctionOnParamsCreateTest)
180e509ee18Sopenharmony_ci{
181e509ee18Sopenharmony_ci    std::unique_ptr<PtJson> ptJson = PtJson::CreateObject();
182e509ee18Sopenharmony_ci    std::string attribute = "test";
183e509ee18Sopenharmony_ci    ptJson->Add("arguments", attribute.c_str());
184e509ee18Sopenharmony_ci    std::unique_ptr<CallFunctionOnParams> result = CallFunctionOnParams::Create(*ptJson);
185e509ee18Sopenharmony_ci    ASSERT_TRUE(result == nullptr);
186e509ee18Sopenharmony_ci}
187e509ee18Sopenharmony_ci
188e509ee18Sopenharmony_ciHWTEST_F_L0(PtParamsTest, GetHeapObjectIdParamsCreateTest)
189e509ee18Sopenharmony_ci{
190e509ee18Sopenharmony_ci    std::unique_ptr<PtJson> ptJson = PtJson::CreateObject();
191e509ee18Sopenharmony_ci    std::string attribute = "test";
192e509ee18Sopenharmony_ci    ptJson->Add("arguments", attribute.c_str());
193e509ee18Sopenharmony_ci    std::unique_ptr<GetHeapObjectIdParams> result = GetHeapObjectIdParams::Create(*ptJson);
194e509ee18Sopenharmony_ci    ASSERT_TRUE(result != nullptr);
195e509ee18Sopenharmony_ci}
196e509ee18Sopenharmony_ci
197e509ee18Sopenharmony_ciHWTEST_F_L0(PtParamsTest, GetObjectByHeapObjectIdParamsCreateTest)
198e509ee18Sopenharmony_ci{
199e509ee18Sopenharmony_ci    std::unique_ptr<PtJson> ptJson = PtJson::CreateObject();
200e509ee18Sopenharmony_ci    std::string attribute = "test";
201e509ee18Sopenharmony_ci    ptJson->Add("arguments", attribute.c_str());
202e509ee18Sopenharmony_ci    std::unique_ptr<GetObjectByHeapObjectIdParams> result = GetObjectByHeapObjectIdParams::Create(*ptJson);
203e509ee18Sopenharmony_ci    ASSERT_TRUE(result != nullptr);
204e509ee18Sopenharmony_ci}
205e509ee18Sopenharmony_ci
206e509ee18Sopenharmony_ciHWTEST_F_L0(PtParamsTest, RequestMemoryDumpParamsCreateTest)
207e509ee18Sopenharmony_ci{
208e509ee18Sopenharmony_ci    std::unique_ptr<PtJson> ptJson = PtJson::CreateObject();
209e509ee18Sopenharmony_ci    std::unique_ptr<PtJson> ptJson1 = PtJson::CreateObject();
210e509ee18Sopenharmony_ci    std::string attribute = "test";
211e509ee18Sopenharmony_ci    ptJson->Add("deterministic", attribute.c_str());
212e509ee18Sopenharmony_ci    ptJson->Add("levelOfDetail", attribute.c_str());
213e509ee18Sopenharmony_ci    std::unique_ptr<RequestMemoryDumpParams> result = RequestMemoryDumpParams::Create(*ptJson);
214e509ee18Sopenharmony_ci    ASSERT_TRUE(result == nullptr);
215e509ee18Sopenharmony_ci    ptJson1->Add("levelOfDetail", 0);
216e509ee18Sopenharmony_ci    std::unique_ptr<RequestMemoryDumpParams> result1 = RequestMemoryDumpParams::Create(*ptJson1);
217e509ee18Sopenharmony_ci    ASSERT_TRUE(result1 == nullptr);
218e509ee18Sopenharmony_ci}
219e509ee18Sopenharmony_ci
220e509ee18Sopenharmony_ciHWTEST_F_L0(PtParamsTest, StartParamsCreateTest)
221e509ee18Sopenharmony_ci{
222e509ee18Sopenharmony_ci    std::unique_ptr<PtJson> ptJson = PtJson::CreateObject();
223e509ee18Sopenharmony_ci    std::unique_ptr<PtJson> ptJson1 = PtJson::CreateObject();
224e509ee18Sopenharmony_ci    std::unique_ptr<PtJson> traceConfig = PtJson::CreateObject();
225e509ee18Sopenharmony_ci    std::string attribute = "test";
226e509ee18Sopenharmony_ci    ptJson->Add("categories", 0);
227e509ee18Sopenharmony_ci    ptJson->Add("options", 0);
228e509ee18Sopenharmony_ci    ptJson->Add("bufferUsageReportingInterval", attribute.c_str());
229e509ee18Sopenharmony_ci    ptJson->Add("transferMode", 0);
230e509ee18Sopenharmony_ci    ptJson->Add("streamFormat", 0);
231e509ee18Sopenharmony_ci    ptJson->Add("streamCompression", 0);
232e509ee18Sopenharmony_ci    ptJson->Add("traceConfig", 0);
233e509ee18Sopenharmony_ci    ptJson->Add("perfettoConfig", 0);
234e509ee18Sopenharmony_ci    ptJson->Add("tracingBackend", 0);
235e509ee18Sopenharmony_ci    std::unique_ptr<StartParams> result = StartParams::Create(*ptJson);
236e509ee18Sopenharmony_ci    ASSERT_TRUE(result == nullptr);
237e509ee18Sopenharmony_ci    ptJson1->Add("transferMode", attribute.c_str());
238e509ee18Sopenharmony_ci    ptJson1->Add("streamFormat", attribute.c_str());
239e509ee18Sopenharmony_ci    ptJson1->Add("streamCompression", attribute.c_str());
240e509ee18Sopenharmony_ci    traceConfig->Add("recordMode", 0);
241e509ee18Sopenharmony_ci    ptJson1->Add("traceConfig", traceConfig);
242e509ee18Sopenharmony_ci    ptJson1->Add("tracingBackend", attribute.c_str());
243e509ee18Sopenharmony_ci
244e509ee18Sopenharmony_ci    std::unique_ptr<StartParams> result1 = StartParams::Create(*ptJson1);
245e509ee18Sopenharmony_ci    ASSERT_TRUE(result1 == nullptr);
246e509ee18Sopenharmony_ci}
247e509ee18Sopenharmony_ci
248e509ee18Sopenharmony_ciHWTEST_F_L0(PtParamsTest, AddRequireParamsTest)
249e509ee18Sopenharmony_ci{
250e509ee18Sopenharmony_ci    std::string msg;
251e509ee18Sopenharmony_ci    std::unique_ptr<SmartStepIntoParams> smartStepIntoParams;
252e509ee18Sopenharmony_ci
253e509ee18Sopenharmony_ci    msg = std::string() + R"({})";
254e509ee18Sopenharmony_ci    smartStepIntoParams = SmartStepIntoParams::Create(DispatchRequest(msg).GetParams());
255e509ee18Sopenharmony_ci    EXPECT_EQ(smartStepIntoParams, nullptr);
256e509ee18Sopenharmony_ci}
257e509ee18Sopenharmony_ci
258e509ee18Sopenharmony_ciHWTEST_F_L0(PtParamsTest, SeriliazationTimeoutCheckEnableParamsCreateTest)
259e509ee18Sopenharmony_ci{
260e509ee18Sopenharmony_ci    std::string msg;
261e509ee18Sopenharmony_ci    std::unique_ptr<SeriliazationTimeoutCheckEnableParams> seriliazationParams;
262e509ee18Sopenharmony_ci
263e509ee18Sopenharmony_ci    msg = std::string() + R"({})";
264e509ee18Sopenharmony_ci    seriliazationParams = SeriliazationTimeoutCheckEnableParams::Create(DispatchRequest(msg).GetParams());
265e509ee18Sopenharmony_ci    EXPECT_EQ(seriliazationParams, nullptr);
266e509ee18Sopenharmony_ci
267e509ee18Sopenharmony_ci    msg = std::string() + R"({"id":0,"method":"PtParams.Test","params":{"threshold":2}})";
268e509ee18Sopenharmony_ci    seriliazationParams = SeriliazationTimeoutCheckEnableParams::Create(DispatchRequest(msg).GetParams());
269e509ee18Sopenharmony_ci    ASSERT_TRUE(seriliazationParams != nullptr);
270e509ee18Sopenharmony_ci}
271e509ee18Sopenharmony_ci}  // namespace panda::test