• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 #ifndef ECMASCRIPT_TOOLING_TEST_UTILS_TESTCASES_JS_VARIABLE_TEST_H
17 #define ECMASCRIPT_TOOLING_TEST_UTILS_TESTCASES_JS_VARIABLE_TEST_H
18 
19 #include "test/utils/test_util.h"
20 
21 namespace panda::ecmascript::tooling::test {
22 class JsVariableFirstTest : public TestEvents {
23 public:
JsVariableFirstTest()24     JsVariableFirstTest()
25     {
26         breakpoint = [this](const JSPtLocation &location) {
27             ASSERT_TRUE(location.GetMethodId().IsValid());
28             ASSERT_LOCATION_EQ(location, location_);
29             ++breakpointCounter_;
30             debugger_->NotifyPaused(location, PauseReason::INSTRUMENTATION);
31             TestUtil::SuspendUntilContinue(DebugEvent::BREAKPOINT, location);
32             return true;
33         };
34 
35         loadModule = [this](std::string_view moduleName) {
36             std::string pandaFile = DEBUGGER_ABC_DIR "variable_first.abc";
37             std::string sourceFile = DEBUGGER_JS_DIR "variable_first.js";
38             static_cast<JsVariableFirstTestChannel *>(channel_)->Initial(vm_, runtime_);
39             runtime_->Enable();
40             // 269: breakpointer line
41             location_ = TestUtil::GetLocation(sourceFile.c_str(), 269, 0, pandaFile.c_str());
42             ASSERT_TRUE(location_.GetMethodId().IsValid());
43             TestUtil::SuspendUntilContinue(DebugEvent::LOAD_MODULE);
44             ASSERT_EQ(moduleName, pandaFile);
45             ASSERT_TRUE(debugger_->NotifyScriptParsed(0, pandaFile));
46             auto condFuncRef = FunctionRef::Undefined(vm_);
47             auto ret = debugInterface_->SetBreakpoint(location_, condFuncRef);
48             ASSERT_TRUE(ret);
49             return true;
50         };
51 
52         scenario = [this]() {
53             TestUtil::WaitForLoadModule();
54             TestUtil::Continue();
55             TestUtil::WaitForBreakpoint(location_);
56             TestUtil::Continue();
57             auto ret = debugInterface_->RemoveBreakpoint(location_);
58             ASSERT_TRUE(ret);
59             ASSERT_EXITED();
60             return true;
61         };
62 
63         vmDeath = [this]() {
64             ASSERT_EQ(breakpointCounter_, 1U);  // 1: break point counter
65             return true;
66         };
67 
68         channel_ = new JsVariableFirstTestChannel();
69     }
70 
GetEntryPoint()71     std::pair<std::string, std::string> GetEntryPoint() override
72     {
73         std::string pandaFile = DEBUGGER_ABC_DIR "variable_first.abc";
74         return {pandaFile, entryPoint_};
75     }
~JsVariableFirstTest()76     ~JsVariableFirstTest()
77     {
78         delete channel_;
79         channel_ = nullptr;
80     }
81 
82 private:
83     class JsVariableFirstTestChannel : public TestChannel {
84     public:
85         JsVariableFirstTestChannel() = default;
86         ~JsVariableFirstTestChannel() = default;
Initial(const EcmaVM * vm,RuntimeImpl * runtime)87         void Initial(const EcmaVM *vm, RuntimeImpl *runtime)
88         {
89             vm_ = vm;
90             runtime_ = runtime;
91         }
92 
SendNotification(const PtBaseEvents & events)93         void SendNotification(const PtBaseEvents &events) override
94         {
95             const static std::vector<std::function<bool(const PtBaseEvents &events)>> eventList = {
96                 [](const PtBaseEvents &events) -> bool {
97                     std::string sourceFile = DEBUGGER_JS_DIR "variable_first.js";
98                     auto parsed = static_cast<const ScriptParsed *>(&events);
99                     std::string str = parsed->ToJson()->Stringify();
100                     std::cout << "JsVariableFirstTestChannel: SendNotification 0:\n" << str << std::endl;
101 
102                     ASSERT_EQ(parsed->GetName(), "Debugger.scriptParsed");
103                     ASSERT_EQ(parsed->GetUrl(), sourceFile);
104                     return true;
105                 },
106                 [this](const PtBaseEvents &events) -> bool {
107                     auto paused = static_cast<const Paused *>(&events);
108                     std::string str = paused->ToJson()->Stringify();
109                     std::cout << "JsVariableFirstTestChannel: SendNotification 1:\n" << str << std::endl;
110 
111                     ASSERT_EQ(paused->GetName(), "Debugger.paused");
112                     auto frame = paused->GetCallFrames()->at(0).get();
113                     ASSERT_EQ(frame->GetFunctionName(), "foo");
114                     auto scopes = frame->GetScopeChain();
115                     ASSERT_EQ(scopes->size(), 2U);  // 2: contain local and global
116                     for (uint32_t i = 0; i < scopes->size(); i++) {
117                         auto scope = scopes->at(i).get();
118                         if (scope->GetType() != Scope::Type::Local()) {
119                             continue;
120                         }
121                         auto localId = scope->GetObject()->GetObjectId();
122                         GetPropertiesParams params;
123                         params.SetObjectId(localId).SetOwnProperties(true);
124                         std::vector<std::unique_ptr<PropertyDescriptor>> outPropertyDesc;
125                         runtime_->GetProperties(params, &outPropertyDesc, {}, {}, {});
126                         for (const auto &property : outPropertyDesc) {
127                             std::cout << "=====================================" << std::endl;
128                             std::cout << property->GetName() << std::endl;
129                             auto value = property->GetValue();
130                             std::vector<std::string> infos;
131                             PushValueInfo(value, infos);
132                             if (value->GetType() == RemoteObject::TypeName::Object) {
133                                 std::vector<std::unique_ptr<PropertyDescriptor>> outPropertyDescInner;
134                                 ASSERT_TRUE(value->HasObjectId());
135                                 params.SetObjectId(value->GetObjectId()).SetOwnProperties(true);
136                                 runtime_->GetProperties(params, &outPropertyDescInner, {}, {}, {});
137                                 if (outPropertyDescInner.size() == 0) {
138                                     infos.push_back("none");
139                                 }
140                                 for (const auto &propertyInner : outPropertyDescInner) {
141                                     std::cout << "###########################################" << std::endl;
142                                     std::cout << propertyInner->GetName() << std::endl;
143                                     infos.push_back(propertyInner->GetName());
144                                     auto innerValue = propertyInner->GetValue();
145                                     PushValueInfo(innerValue, infos);
146                                 }
147                             }
148                             ASSERT_EQ(infos.size(), variableMap_.at(property->GetName()).size());
149                             for (uint32_t j = 0; j < infos.size(); j++) {
150                                 ASSERT_EQ(infos[j], variableMap_.at(property->GetName())[j]);
151                             }
152                         }
153                     }
154                     return true;
155                 }
156             };
157 
158             ASSERT_TRUE(eventList[index_](events));
159             index_++;
160         }
161 
162     private:
163         NO_COPY_SEMANTIC(JsVariableFirstTestChannel);
164         NO_MOVE_SEMANTIC(JsVariableFirstTestChannel);
165 
PushValueInfo(RemoteObject * value,std::vector<std::string> & infos)166         void PushValueInfo(RemoteObject *value, std::vector<std::string> &infos)
167         {
168             std::cout << "type: " << value->GetType() << std::endl;
169             infos.push_back(value->GetType());
170             if (value->HasObjectId()) {
171                 std::cout << "id: " << value->GetObjectId() << std::endl;
172             }
173             if (value->HasSubType()) {
174                 std::cout << "sub type: " << value->GetSubType() << std::endl;
175                 infos.push_back(value->GetSubType());
176             }
177             if (value->HasClassName()) {
178                 std::cout << "class name: " << value->GetClassName() << std::endl;
179                 infos.push_back(value->GetClassName());
180             }
181             if (value->HasDescription()) {
182                 std::cout << "desc: " << value->GetDescription() << std::endl;
183                 infos.push_back(value->GetDescription());
184             }
185             if (value->HasValue()) {
186                 std::cout << "type: " <<
187                     value->GetValue()->Typeof(vm_)->ToString() << std::endl;
188                 std::cout << "tostring: " <<
189                     value->GetValue()->ToString(vm_)->ToString() << std::endl;
190                 infos.push_back(value->GetValue()->ToString(vm_)->ToString());
191             }
192         }
193 
194         /*
195         * Expect map type: map<name, value list>
196         * value list (optional):
197         *    type
198         *    subType
199         *    className
200         *    description
201         *    value tostring
202         *
203         * if is object value, will push back key and value.
204         *
205         * for example:
206         * var abc = 1
207         *     { "abc", { "number", "1", "1" } }
208         * var obj = { "key": "2" }
209         *     { "obj0", { "object", "Object", "Object", "[object Object]", "key", "string", "2", "2" } }
210         */
211         const std::map<std::string, std::vector<std::string>> variableMap_ = {
212             { "nop", { "undefined" } },
213             { "foo", { "function", "Function", "function foo( { [js code] }",
214                        "Cannot get source code of funtion"} },
215             { "string0", { "string", "helloworld", "helloworld" } },
216             { "boolean0", { "object", "Object", "Boolean{[[PrimitiveValue]]: false}", "false", "[[PrimitiveValue]]",
217                             "boolean", "false", "false" } },
218             { "number0", { "number", "1", "1" } },
219             { "obj0", { "object", "Object", "Object", "[object Object]",
220                         "key0", "string", "value0", "value0",
221                         "key1", "number", "100", "100" } },
222             { "arraybuffer0", { "object", "arraybuffer", "Arraybuffer", "ArrayBuffer(24)", "[object ArrayBuffer]",
223                                 "[[Int8Array]]", "object", "Object", "Int8Array(24)",
224                                 "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", "[[Uint8Array]]", "object",
225                                 "Object", "Uint8Array(24)", "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
226                                 "[[Uint8ClampedArray]]", "object", "Object", "Object",
227                                 "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", "[[Int16Array]]", "object",
228                                 "Object", "Int16Array(12)", "0,0,0,0,0,0,0,0,0,0,0,0", "[[Uint16Array]]", "object",
229                                 "Object", "Object", "0,0,0,0,0,0,0,0,0,0,0,0", "[[Int32Array]]", "object", "Object",
230                                 "Int32Array(6)", "0,0,0,0,0,0", "[[Uint32Array]]", "object", "Object", "Object",
231                                 "0,0,0,0,0,0", "[[Float32Array]]", "object", "Object", "Object", "0,0,0,0,0,0",
232                                 "[[Float64Array]]", "object", "Object", "Object", "0,0,0", "[[BigInt64Array]]",
233                                 "object", "Object", "Object", "0,0,0", "[[BigUint64Array]]", "object", "Object",
234                                 "Object", "0,0,0" } },
235             { "function0", { "function", "Function", "function function0( { [js code] }",
236                              "Cannot get source code of funtion" } },
237             { "generator0", { "function", "Generator", "function* generator0( { [js code] }",
238                               "Cannot get source code of funtion" } },
239             { "map0", { "object", "map", "Map", "Map(0)", "[object Map]", "size", "number", "0", "0", "[[Entries]]",
240                         "object", "array", "Array", "Array(0)", "" } },
241             { "set0", { "object", "set", "Set", "Set(0)", "[object Set]", "size", "number", "0", "0", "[[Entries]]",
242                         "object", "array", "Array", "Array(0)", "" } },
243             { "undefined0", { "undefined" } },
244             { "array0", { "object", "array", "Array", "Array(2)", "Apple,Banana", "0", "string", "Apple", "Apple",
245                           "1", "string", "Banana", "Banana", "length", "number", "2", "2" } },
246             { "regexp0", { "object", "regexp", "RegExp", "/^\\d+\\.\\d+$/i", "/^\\d+\\.\\d+$/i", "global", "boolean",
247                            "false", "false", "ignoreCase", "boolean", "true", "true", "multiline", "boolean", "false",
248                            "false", "dotAll", "boolean", "false", "false", "hasIndices", "boolean", "false", "false",
249                            "unicode", "boolean", "false", "false", "sticky", "boolean", "false", "false", "flags",
250                            "string", "i", "i", "source", "string", "^\\d+\\.\\d+$", "^\\d+\\.\\d+$", "lastIndex",
251                            "number", "0", "0" } },
252             { "uint8array0", { "object", "Object", "Uint8Array(24)",
253                                "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", "         0", "number", "0", "0",
254                                "         1", "number", "0", "0", "         2", "number", "0", "0", "         3",
255                                "number", "0", "0", "         4", "number", "0", "0", "         5", "number", "0",
256                                "0", "         6", "number", "0", "0", "         7", "number", "0", "0", "         8",
257                                "number", "0", "0", "         9", "number", "0", "0", "        10", "number", "0",
258                                "0", "        11", "number", "0", "0", "        12", "number", "0", "0", "        13",
259                                "number", "0", "0", "        14", "number", "0", "0", "        15", "number", "0",
260                                "0", "        16", "number", "0", "0", "        17", "number", "0", "0", "        18",
261                                "number", "0", "0", "        19", "number", "0", "0", "        20", "number", "0",
262                                "0", "        21", "number", "0", "0", "        22", "number", "0", "0", "        23",
263                                "number", "0", "0" } },
264             { "dataview0", { "object", "dataview", "Dataview", "DataView(24)", "[object DataView]", "buffer",
265                              "object", "arraybuffer", "Arraybuffer", "ArrayBuffer(24)", "[object ArrayBuffer]",
266                              "byteLength", "number", "24", "24", "byteOffset", "number", "0", "0" } },
267             { "bigint0", { "bigint", "999n", "999" } },
268             { "typedarray0", { "object", "Object", "Uint8Array(0)", "", "none" } },
269             { "sharedarraybuffer0", { "object", "Object", "SharedArrayBuffer(32)", "[object SharedArrayBuffer]",
270                                       "[[Int8Array]]", "object", "Object", "Int8Array(32)",
271                                       "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
272                                       "[[Uint8Array]]", "object", "Object", "Uint8Array(32)",
273                                       "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
274                                       "[[Int16Array]]", "object", "Object", "Int16Array(16)",
275                                       "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", "[[Int32Array]]", "object", "Object",
276                                       "Int32Array(8)", "0,0,0,0,0,0,0,0", "[[ArrayBufferByteLength]]", "number", "32",
277                                       "32", "byteLength", "number", "32", "32" } },
278             { "weakref0", { "object", "Object", "WeakRef {}", "[object WeakRef]", "none" } },
279             { "iterator0", { "function", "Function", "function [Symbol.iterator]( { [native code] }",
280                              "function [Symbol.iterator]() { [native code] }" } },
281             { "set1", { "object", "set", "Set", "Set(1) {1}", "[object Set]", "size", "number", "1", "1",
282                         "[[Entries]]", "object", "array", "Array", "Array(1)", "1" } },
283             { "set2", { "object", "set", "Set", "Set(7) {'h', 'e', 'l', 'o', 'w', ...}", "[object Set]", "size",
284                         "number", "7", "7", "[[Entries]]", "object", "array", "Array", "Array(7)",
285                         "h,e,l,o,w,r,d" } },
286             { "set3", { "object", "set", "Set", "Set(1) {Object}", "[object Set]", "size", "number", "1", "1",
287                         "[[Entries]]", "object", "array", "Array", "Array(1)", "[object Object]" } },
288             { "set4", { "object", "set", "Set", "Set(0)", "[object Set]", "size", "number", "0", "0", "[[Entries]]",
289                         "object", "array", "Array", "Array(0)", "" } },
290             { "set5", { "object", "set", "Set", "Set(2) {'Apple', 'Banana'}", "[object Set]", "size", "number", "2",
291                         "2", "[[Entries]]", "object", "array", "Array", "Array(2)", "Apple,Banana" } },
292             { "set6", { "object", "set", "Set", "Set(0)", "[object Set]", "size", "number", "0", "0", "[[Entries]]",
293                         "object", "array", "Array", "Array(0)", "" } },
294             { "set7", { "object", "set", "Set", "Set(0)", "[object Set]", "size", "number", "0", "0", "[[Entries]]",
295                         "object", "array", "Array", "Array(0)", "" } },
296             { "set8", { "object", "set", "Set", "Set(1) {Object}", "[object Set]", "size", "number", "1", "1",
297                         "[[Entries]]", "object", "array", "Array", "Array(1)", "[object Object]" } },
298             { "set9", { "object", "set", "Set", "Set(1) {Object}", "[object Set]", "size", "number", "1", "1",
299                         "[[Entries]]", "object", "array", "Array", "Array(1)", "[object Object]" } },
300             { "set10", { "object", "set", "Set", "Set(1) {Object}", "[object Set]", "size", "number", "1", "1",
301                          "[[Entries]]", "object", "array", "Array", "Array(1)", "[object Object]" } },
302             { "set11", { "object", "set", "Set", "Set(1) {Object}", "[object Set]", "size", "number", "1", "1",
303                          "[[Entries]]", "object", "array", "Array", "Array(1)", "[object Object]" } },
304             { "set12", { "object", "set", "Set", "Set(1) {Object}", "[object Set]", "size", "number", "1", "1",
305                          "[[Entries]]", "object", "array", "Array", "Array(1)", "[object Object]" } },
306             { "set13", { "object", "set", "Set", "Set(1) {Object}", "[object Set]", "size", "number", "1", "1",
307                          "[[Entries]]", "object", "array", "Array", "Array(1)", "[object Object]" } },
308             { "set14", { "object", "set", "Set", "Set(0)", "[object Set]", "size", "number", "0", "0", "[[Entries]]",
309                          "object", "array", "Array", "Array(0)", "" } },
310             { "set15", { "object", "set", "Set", "Set(4) {0, 'hello', Object, 1}", "[object Set]", "size",
311                          "number", "4", "4", "[[Entries]]", "object", "array", "Array", "Array(4)",
312                          "0,hello,[object Object],1" } },
313             { "set16", { "object", "set", "Set", "Set(1) {Object}", "[object Set]", "size", "number", "1", "1",
314                          "[[Entries]]", "object", "array", "Array", "Array(1)", "[object Object]" } },
315             { "set17", { "object", "set", "Set", "Set(1) {999}", "[object Set]", "size", "number", "1", "1",
316                          "[[Entries]]", "object", "array", "Array", "Array(1)", "999" } },
317             { "set18", { "object", "set", "Set", "Set(1) {Object}", "[object Set]", "size", "number", "1", "1",
318                          "[[Entries]]", "object", "array", "Array", "Array(1)", "[object Object]" } },
319             { "set19", { "object", "set", "Set", "Set(0)", "[object Set]", "size", "number", "0", "0",
320                          "[[Entries]]", "object", "array", "Array", "Array(0)", "" } },
321             { "number1", { "number", "65535", "65535" } },
322             { "number2", { "number", "5e-324", "5e-324" } },
323             { "number3", { "number", "10000000000", "10000000000" } },
324             { "number4", { "number", "2199023255551", "2199023255551" } },
325             { "number5", { "number", "16383", "16383" } },
326             { "number6", { "object", "Object", "Number{[[PrimitiveValue]]: 999}", "999", "[[PrimitiveValue]]",
327                            "number", "999", "999" } },
328             { "number7", { "number", "1.23e+47", "1.23e+47" } },
329             { "number8", { "number", "1", "1" } },
330             { "number9", { "number", "65536", "65536" } },
331             { "number10", { "number", "-65534", "-65534" } },
332             { "number11", { "number", "65535", "65535" } },
333             { "number12", { "number", "0.000015259021896696422", "0.000015259021896696422" } },
334             { "number13", { "number", "1", "1" } },
335             { "number14", { "object", "Object", "Number{[[PrimitiveValue]]: 0}", "0", "[[PrimitiveValue]]", "number",
336                             "0", "0" } },
337             { "number15", { "object", "Object", "Number{[[PrimitiveValue]]: 1.7976931348623157e+308}",
338                             "1.7976931348623157e+308", "[[PrimitiveValue]]", "number", "1.7976931348623157e+308",
339                             "1.7976931348623157e+308" } },
340             { "number16", { "object", "Object", "Number{[[PrimitiveValue]]: 5e-324}", "5e-324", "[[PrimitiveValue]]",
341                             "number", "5e-324", "5e-324" } },
342             { "number17", { "object", "Object", "Number{[[PrimitiveValue]]: 10000000000}", "10000000000",
343                             "[[PrimitiveValue]]", "number", "10000000000", "10000000000" } },
344             { "number18", { "object", "Object", "Number{[[PrimitiveValue]]: 2199023255551}", "2199023255551",
345                             "[[PrimitiveValue]]", "number", "2199023255551", "2199023255551" } },
346             { "number19", { "object", "Object", "Number{[[PrimitiveValue]]: 16383}", "16383", "[[PrimitiveValue]]",
347                             "number", "16383", "16383" } },
348             { "number20", { "object", "Object", "Number{[[PrimitiveValue]]: 1.23e+47}", "1.23e+47",
349                             "[[PrimitiveValue]]", "number", "1.23e+47", "1.23e+47" } },
350             { "number21", { "object", "Object", "Number{[[PrimitiveValue]]: 1}", "1", "[[PrimitiveValue]]", "number",
351                             "1", "1" } },
352             { "number22", { "object", "Object", "Number{[[PrimitiveValue]]: 65536}", "65536", "[[PrimitiveValue]]",
353                             "number", "65536", "65536" } },
354             { "number23", { "object", "Object", "Number{[[PrimitiveValue]]: -65534}", "-65534", "[[PrimitiveValue]]",
355                             "number", "-65534", "-65534" } },
356             { "number24", { "object", "Object", "Number{[[PrimitiveValue]]: 65535}", "65535", "[[PrimitiveValue]]",
357                             "number", "65535", "65535" } },
358             { "number25", { "object", "Object", "Number{[[PrimitiveValue]]: 0.000015259021896696422}",
359                             "0.000015259021896696422", "[[PrimitiveValue]]", "number", "0.000015259021896696422",
360                             "0.000015259021896696422" } },
361             { "number26", { "object", "Object", "Number{[[PrimitiveValue]]: 1}", "1", "[[PrimitiveValue]]", "number",
362                             "1", "1" } },
363             { "number27", { "number", "1.7976931348623157e+308", "1.7976931348623157e+308" } },
364             { "string1", { "string", "", "" } },
365             { "string2", { "string", "", "" } },
366             { "string3", { "string", "world", "world" } },
367             { "string4", { "string", "helloworld", "helloworld" } },
368             { "string5", { "string", "e", "e" } },
369             { "string6", { "string", "1", "1" } },
370             { "string7", { "object", "Object", "String{[[PrimitiveValue]]: }", "", "[[PrimitiveValue]]", "string", "",
371                            "", "length", "number", "0", "0" } },
372             { "string8", { "object", "Object", "String{[[PrimitiveValue]]: [object Set]}", "[object Set]",
373                            "[[PrimitiveValue]]", "string", "[object Set]", "[object Set]", "0", "string", "[", "[",
374                            "1", "string", "o", "o", "2", "string", "b", "b", "3", "string", "j", "j", "4", "string",
375                            "e", "e", "5", "string", "c", "c", "6", "string", "t", "t", "7", "string", " ", " ", "8",
376                            "string", "S", "S", "9", "string", "e", "e", "10", "string", "t", "t", "11", "string", "]",
377                            "]", "length", "number", "12", "12" } },
378             { "string9", { "object", "Object", "String{[[PrimitiveValue]]: 1}", "1", "[[PrimitiveValue]]", "string",
379                            "1", "1", "0", "string", "1", "1", "length", "number", "1", "1" } },
380             { "string10", { "object", "Object", "String{[[PrimitiveValue]]: helloworld}", "helloworld",
381                             "[[PrimitiveValue]]", "string", "helloworld", "helloworld", "0", "string", "h", "h", "1",
382                             "string", "e", "e", "2", "string", "l", "l", "3", "string", "l", "l", "4", "string", "o",
383                             "o", "5", "string", "w", "w", "6", "string", "o", "o", "7", "string", "r", "r", "8",
384                             "string", "l", "l", "9", "string", "d", "d", "length", "number", "10", "10" } },
385             { "string11", { "object", "Object", "String{[[PrimitiveValue]]: [object Object]}", "[object Object]",
386                             "[[PrimitiveValue]]", "string", "[object Object]", "[object Object]", "0", "string", "[",
387                             "[", "1", "string", "o", "o", "2", "string", "b", "b", "3", "string", "j", "j", "4",
388                             "string", "e", "e", "5", "string", "c", "c", "6", "string", "t", "t", "7", "string", " ",
389                             " ", "8", "string", "O", "O", "9", "string", "b", "b", "10", "string", "j", "j", "11",
390                             "string", "e", "e", "12", "string", "c", "c", "13", "string", "t", "t", "14", "string",
391                             "]", "]", "length", "number", "15", "15" } },
392             { "string12", { "object", "Object", "String{[[PrimitiveValue]]: undefined}", "undefined",
393                             "[[PrimitiveValue]]", "string", "undefined", "undefined", "0", "string", "u", "u", "1",
394                             "string", "n", "n", "2", "string", "d", "d", "3", "string", "e", "e", "4", "string", "f",
395                             "f", "5", "string", "i", "i", "6", "string", "n", "n", "7", "string", "e", "e", "8",
396                             "string", "d", "d", "length", "number", "9", "9" } },
397             { "string13", { "object", "Object", "String{[[PrimitiveValue]]: Apple,Banana}", "Apple,Banana",
398                             "[[PrimitiveValue]]", "string", "Apple,Banana", "Apple,Banana", "0", "string", "A", "A",
399                             "1", "string", "p", "p", "2", "string", "p", "p", "3", "string", "l", "l", "4", "string",
400                             "e", "e", "5", "string", ",", ",", "6", "string", "B", "B", "7", "string", "a", "a", "8",
401                             "string", "n", "n", "9", "string", "a", "a", "10", "string", "n", "n", "11", "string",
402                             "a", "a", "length", "number", "12", "12" } },
403             { "string14", { "object", "Object", "String{[[PrimitiveValue]]: 999}", "999", "[[PrimitiveValue]]",
404                             "string", "999", "999", "0", "string", "9", "9", "1", "string", "9", "9", "2", "string",
405                             "9", "9", "length", "number", "3", "3" } },
406             { "string15", { "object", "Object", "String{[[PrimitiveValue]]: Cannot get source code of funtion}",
407                             "Cannot get source code of funtion", "[[PrimitiveValue]]", "string",
408                             "Cannot get source code of funtion", "Cannot get source code of funtion", "0", "string",
409                             "C", "C", "1", "string", "a", "a", "2", "string", "n", "n", "3", "string", "n", "n", "4",
410                             "string", "o", "o", "5", "string", "t", "t", "6", "string", " ", " ", "7", "string", "g",
411                             "g", "8", "string", "e", "e", "9", "string", "t", "t", "10", "string", " ", " ", "11",
412                             "string", "s", "s", "12", "string", "o", "o", "13", "string", "u", "u", "14", "string",
413                             "r", "r", "15", "string", "c", "c", "16", "string", "e", "e", "17", "string", " ", " ",
414                             "18", "string", "c", "c", "19", "string", "o", "o", "20", "string", "d", "d", "21",
415                             "string", "e", "e", "22", "string", " ", " ", "23", "string", "o", "o", "24", "string",
416                             "f", "f", "25", "string", " ", " ", "26", "string", "f", "f", "27", "string", "u", "u",
417                             "28", "string", "n", "n", "29", "string", "t", "t", "30", "string", "i", "i", "31",
418                             "string", "o", "o", "32", "string", "n", "n", "length", "number", "33", "33" } },
419             { "string16", { "object", "Object", "String{[[PrimitiveValue]]: /^\\d+\\.\\d+$/i}", "/^\\d+\\.\\d+$/i",
420                             "[[PrimitiveValue]]", "string", "/^\\d+\\.\\d+$/i", "/^\\d+\\.\\d+$/i", "0", "string", "/",
421                             "/", "1", "string", "^", "^", "2", "string", "\\", "\\", "3", "string", "d", "d", "4",
422                             "string", "+", "+", "5", "string", "\\", "\\", "6", "string", ".", ".", "7", "string",
423                             "\\", "\\", "8", "string", "d", "d", "9", "string", "+", "+", "10", "string", "$", "$",
424                             "11", "string", "/", "/", "12", "string", "i", "i", "length", "number", "13", "13"} },
425             { "string17", { "object", "Object", "String{[[PrimitiveValue]]: [object ArrayBuffer]}",
426                             "[object ArrayBuffer]", "[[PrimitiveValue]]", "string", "[object ArrayBuffer]",
427                             "[object ArrayBuffer]", "0", "string", "[", "[", "1", "string", "o", "o", "2", "string",
428                             "b", "b", "3", "string", "j", "j", "4", "string", "e", "e", "5", "string", "c", "c", "6",
429                             "string", "t", "t", "7", "string", " ", " ", "8", "string", "A", "A", "9", "string", "r",
430                             "r", "10", "string", "r", "r", "11", "string", "a", "a", "12", "string", "y", "y", "13",
431                             "string", "B", "B", "14", "string", "u", "u", "15", "string", "f", "f", "16", "string",
432                             "f", "f", "17", "string", "e", "e", "18", "string", "r", "r", "19", "string", "]", "]",
433                             "length", "number", "20", "20" } },
434             { "string18", { "object", "Object",
435                             "String{[[PrimitiveValue]]: 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}",
436                             "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", "[[PrimitiveValue]]", "string",
437                             "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
438                             "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", "0", "string", "0", "0", "1",
439                             "string", ",", ",", "2", "string", "0", "0", "3", "string", ",", ",", "4", "string", "0",
440                             "0", "5", "string", ",", ",", "6", "string", "0", "0", "7", "string", ",", ",", "8",
441                             "string", "0", "0", "9", "string", ",", ",", "10", "string", "0", "0", "11", "string",
442                             ",", ",", "12", "string", "0", "0", "13", "string", ",", ",", "14", "string", "0", "0",
443                             "15", "string", ",", ",", "16", "string", "0", "0", "17", "string", ",", ",", "18",
444                             "string", "0", "0", "19", "string", ",", ",", "20", "string", "0", "0", "21", "string",
445                             ",", ",", "22", "string", "0", "0", "23", "string", ",", ",", "24", "string", "0", "0",
446                             "25", "string", ",", ",", "26", "string", "0", "0", "27", "string", ",", ",", "28",
447                             "string", "0", "0", "29", "string", ",", ",", "30", "string", "0", "0", "31", "string",
448                             ",", ",", "32", "string", "0", "0", "33", "string", ",", ",", "34", "string", "0", "0",
449                             "35", "string", ",", ",", "36", "string", "0", "0", "37", "string", ",", ",", "38",
450                             "string", "0", "0", "39", "string", ",", ",", "40", "string", "0", "0", "41", "string",
451                             ",", ",", "42", "string", "0", "0", "43", "string", ",", ",", "44", "string", "0", "0",
452                             "45", "string", ",", ",", "46", "string", "0", "0", "length", "number", "47", "47" } },
453             { "string19", { "object", "Object", "String{[[PrimitiveValue]]: [object DataView]}", "[object DataView]",
454                             "[[PrimitiveValue]]", "string", "[object DataView]", "[object DataView]",
455                             "0", "string", "[", "[", "1", "string", "o", "o", "2", "string", "b", "b", "3", "string",
456                             "j", "j", "4", "string", "e", "e", "5", "string", "c", "c", "6", "string", "t", "t", "7",
457                             "string", " ", " ", "8", "string", "D", "D", "9", "string", "a", "a", "10", "string", "t",
458                             "t", "11", "string", "a", "a", "12", "string", "V", "V", "13", "string", "i", "i", "14",
459                             "string", "e", "e", "15", "string", "w", "w", "16", "string", "]", "]", "length", "number",
460                             "17", "17" } },
461             { "string20", { "object", "Object", "String{[[PrimitiveValue]]: [object Map]}", "[object Map]",
462                             "[[PrimitiveValue]]", "string", "[object Map]", "[object Map]", "0", "string", "[", "[",
463                             "1", "string", "o", "o", "2", "string", "b", "b", "3", "string", "j", "j", "4", "string",
464                             "e", "e", "5", "string", "c", "c", "6", "string", "t", "t", "7", "string", " ", " ", "8",
465                             "string", "M", "M", "9", "string", "a", "a", "10", "string", "p", "p", "11", "string",
466                             "]", "]", "length", "number", "12", "12" } },
467             { "string21", { "object", "Object", "String{[[PrimitiveValue]]: Cannot get source code of funtion}",
468                             "Cannot get source code of funtion", "[[PrimitiveValue]]", "string",
469                             "Cannot get source code of funtion", "Cannot get source code of funtion", "0", "string",
470                             "C", "C", "1", "string", "a", "a", "2", "string", "n", "n", "3", "string", "n", "n", "4",
471                             "string", "o", "o", "5", "string", "t", "t", "6", "string", " ", " ", "7", "string", "g",
472                             "g", "8", "string", "e", "e", "9", "string", "t", "t", "10", "string", " ", " ", "11",
473                             "string", "s", "s", "12", "string", "o", "o", "13", "string", "u", "u", "14", "string",
474                             "r", "r", "15", "string", "c", "c", "16", "string", "e", "e", "17", "string", " ", " ",
475                             "18", "string", "c", "c", "19", "string", "o", "o", "20", "string", "d", "d", "21",
476                             "string", "e", "e", "22", "string", " ", " ", "23", "string", "o", "o", "24", "string",
477                             "f", "f", "25", "string", " ", " ", "26", "string", "f", "f", "27", "string", "u", "u",
478                             "28", "string", "n", "n", "29", "string", "t", "t", "30", "string", "i", "i", "31",
479                             "string", "o", "o", "32", "string", "n", "n", "length", "number", "33", "33" } },
480             { "bigint1", { "bigint", "9007199254740991n", "9007199254740991" } },
481             { "bigint2", { "bigint", "9007199254740991n", "9007199254740991" } },
482             { "bigint3", { "bigint", "9007199254740991n", "9007199254740991" } },
483             { "bigint4", { "bigint", "9007199254740991n", "9007199254740991" } },
484             { "bigint5", { "bigint", "9007199254740991n", "9007199254740991" } },
485             { "bigint6", { "bigint", "9007199254740991n", "9007199254740991" } },
486             { "bigint7", { "bigint", "999n", "999" } },
487             { "bigint8", { "bigint", "9007199254741990n", "9007199254741990" } },
488             { "bigint9", { "bigint", "-9007199254739992n", "-9007199254739992" } },
489             { "bigint10", { "bigint", "8998192055486250009n", "8998192055486250009" } },
490             { "bigint11", { "bigint", "0n", "0" } },
491             { "bigint12", { "bigint", "999n", "999" } },
492             { "bigint13", { "bigint", "10000000000n", "10000000000" } },
493             { "bigint14", { "bigint", "888888888888888888888888888888888888888888888n",
494                             "888888888888888888888888888888888888888888888" } },
495             { "bigint15", { "bigint", "16383n", "16383" } },
496             { "bigint16", { "bigint", "0n", "0" } },
497             { "bigint17", { "bigint", "0n", "0" } },
498             { "bigint18", { "bigint", "122999999999999994846185700645503654167417192448n",
499                             "122999999999999994846185700645503654167417192448" } },
500             { "bigint19", { "bigint", "1234567n", "1234567" } },
501             { "bigint20", { "bigint", "65535n", "65535" } },
502             { "boolean1", { "object", "Object", "Boolean{[[PrimitiveValue]]: true}", "true", "[[PrimitiveValue]]",
503                             "boolean", "true", "true" } },
504             { "boolean2", { "object", "Object", "Boolean{[[PrimitiveValue]]: true}", "true", "[[PrimitiveValue]]",
505                             "boolean", "true", "true" } },
506             { "boolean3", { "object", "Object", "Boolean{[[PrimitiveValue]]: true}", "true", "[[PrimitiveValue]]",
507                             "boolean", "true", "true" } },
508             { "boolean4", { "object", "Object", "Boolean{[[PrimitiveValue]]: false}", "false", "[[PrimitiveValue]]",
509                             "boolean", "false", "false" } },
510             { "boolean5", { "object", "Object", "Boolean{[[PrimitiveValue]]: true}", "true", "[[PrimitiveValue]]",
511                             "boolean", "true", "true" } },
512             { "boolean6", { "object", "Object", "Boolean{[[PrimitiveValue]]: true}", "true", "[[PrimitiveValue]]",
513                             "boolean", "true", "true" } },
514             { "boolean7", { "object", "Object", "Boolean{[[PrimitiveValue]]: true}", "true", "[[PrimitiveValue]]",
515                             "boolean", "true", "true" } },
516             { "boolean8", { "object", "Object", "Boolean{[[PrimitiveValue]]: false}", "false", "[[PrimitiveValue]]",
517                             "boolean", "false", "false" } },
518             { "boolean9", { "boolean", "true", "true" } },
519             { "boolean10", { "boolean", "false", "false" } },
520             { "boolean11", { "object", "Object", "Boolean{[[PrimitiveValue]]: false}", "false", "[[PrimitiveValue]]",
521                              "boolean", "false", "false" } },
522             { "boolean12", { "boolean", "false", "false" } },
523             { "boolean13", { "object", "Object", "Boolean{[[PrimitiveValue]]: false}", "false", "[[PrimitiveValue]]",
524                              "boolean", "false", "false" } },
525             { "boolean14", { "boolean", "true", "true" } },
526             { "boolean15", { "object", "Object", "Boolean{[[PrimitiveValue]]: true}", "true", "[[PrimitiveValue]]",
527                              "boolean", "true", "true" } },
528             { "boolean16", { "object", "Object", "Boolean{[[PrimitiveValue]]: false}", "false", "[[PrimitiveValue]]",
529                              "boolean", "false", "false" } },
530             { "boolean17", { "object", "Object", "Boolean{[[PrimitiveValue]]: true}", "true", "[[PrimitiveValue]]",
531                              "boolean", "true", "true" } },
532             { "boolean18", { "object", "Object", "Boolean{[[PrimitiveValue]]: true}", "true", "[[PrimitiveValue]]",
533                              "boolean", "true", "true" } },
534             { "boolean19", { "object", "Object", "Boolean{[[PrimitiveValue]]: true}", "true", "[[PrimitiveValue]]",
535                              "boolean", "true", "true" } },
536             { "boolean20", { "object", "Object", "Boolean{[[PrimitiveValue]]: true}", "true", "[[PrimitiveValue]]",
537                              "boolean", "true", "true" } },
538             { "boolean21", { "object", "Object", "Boolean{[[PrimitiveValue]]: true}", "true", "[[PrimitiveValue]]",
539                              "boolean", "true", "true" } },
540             { "boolean22", { "object", "Object", "Boolean{[[PrimitiveValue]]: true}", "true", "[[PrimitiveValue]]",
541                              "boolean", "true", "true" } },
542             { "boolean23", { "object", "Object", "Boolean{[[PrimitiveValue]]: false}", "false", "[[PrimitiveValue]]",
543                              "boolean", "false", "false" } },
544             { "boolean24", { "object", "Object", "Boolean{[[PrimitiveValue]]: true}", "true", "[[PrimitiveValue]]",
545                              "boolean", "true", "true" } },
546             { "boolean25", { "object", "Object", "Boolean{[[PrimitiveValue]]: true}", "true", "[[PrimitiveValue]]",
547                              "boolean", "true", "true" } },
548             { "boolean26", { "object", "Object", "Boolean{[[PrimitiveValue]]: true}", "true", "[[PrimitiveValue]]",
549                              "boolean", "true", "true" } },
550             { "boolean27", { "object", "Object", "Boolean{[[PrimitiveValue]]: true}", "true", "[[PrimitiveValue]]",
551                              "boolean", "true", "true" } },
552             { "boolean28", { "object", "Object", "Boolean{[[PrimitiveValue]]: true}", "true", "[[PrimitiveValue]]",
553                              "boolean", "true", "true" } },
554             { "boolean29", { "object", "Object", "Boolean{[[PrimitiveValue]]: true}", "true", "[[PrimitiveValue]]",
555                              "boolean", "true", "true" } },
556             { "map1", { "object", "map", "Map", "Map(0)", "[object Map]", "size", "number", "0", "0", "[[Entries]]",
557                         "object", "array", "Array", "Array(0)", "" } },
558             { "map2", { "object", "map", "Map", "Map(2) {1 => 'hello', 2 => 'world'}", "[object Map]", "size",
559                         "number", "2", "2", "[[Entries]]", "object", "array", "Array", "Array(2)",
560                         "[object Object],[object Object]" } },
561             { "map3", { "object", "map", "Map", "Map(1) {NaN => 'NaN'}", "[object Map]", "size", "number", "1", "1",
562                         "[[Entries]]", "object", "array", "Array", "Array(1)", "[object Object]" } },
563             { "map4", { "object", "map", "Map", "Map(0)", "[object Map]", "size", "number", "0", "0", "[[Entries]]",
564                         "object", "array", "Array", "Array(0)", "", "0", "string", "hello", "hello" } },
565             { "map5", { "object", "map", "Map", "Map(4) {0 => 'zero', 1 => 'one', 2 => 'two', 3 => 'three'}",
566                         "[object Map]", "size", "number", "4", "4", "[[Entries]]", "object", "array", "Array",
567                         "Array(4)", "[object Object],[object Object],[object Object],[object Object]" } },
568             { "map6", { "object", "map", "Map", "Map(1) {Object => 'set0'}", "[object Map]", "size", "number", "1",
569                         "1", "[[Entries]]", "object", "array", "Array", "Array(1)", "[object Object]" } },
570             { "map7", { "object", "map", "Map", "Map(1) {1 => 'number0'}", "[object Map]", "size", "number", "1", "1",
571                         "[[Entries]]", "object", "array", "Array", "Array(1)", "[object Object]" } },
572             { "map8", { "object", "map", "Map", "Map(1) {'helloworld' => 'string0'}", "[object Map]", "size",
573                         "number", "1", "1", "[[Entries]]", "object", "array", "Array", "Array(1)",
574                         "[object Object]" } },
575             { "map9", { "object", "map", "Map", "Map(1) {Object => 'object0'}", "[object Map]", "size", "number", "1",
576                         "1", "[[Entries]]", "object", "array", "Array", "Array(1)", "[object Object]" } },
577             { "map10", { "object", "map", "Map", "Map(1) {undefined => 'undefined0'}", "[object Map]", "size",
578                          "number", "1", "1", "[[Entries]]", "object", "array", "Array", "Array(1)",
579                          "[object Object]" } },
580             { "map11", { "object", "map", "Map", "Map(1) {Object => 'array0'}", "[object Map]", "size", "number", "1",
581                          "1", "[[Entries]]", "object", "array", "Array", "Array(1)", "[object Object]" } },
582             { "map12", { "object", "map", "Map", "Map(1) {Object => 'map3'}", "[object Map]", "size", "number", "1",
583                          "1", "[[Entries]]", "object", "array", "Array", "Array(1)", "[object Object]" } },
584             { "map13", { "object", "map", "Map", "Map(1) {Object => 'generator0'}", "[object Map]", "size", "number",
585                          "1", "1", "[[Entries]]", "object", "array", "Array", "Array(1)", "[object Object]" } },
586             { "map14", { "object", "map", "Map", "Map(1) {Object => 'regexp0'}", "[object Map]", "size", "number",
587                          "1", "1", "[[Entries]]", "object", "array", "Array", "Array(1)", "[object Object]" } },
588             { "map15", { "object", "map", "Map", "Map(1) {Object => 'arraybuffer0'}", "[object Map]", "size",
589                          "number", "1", "1", "[[Entries]]", "object", "array", "Array", "Array(1)",
590                          "[object Object]" } },
591             { "map16", { "object", "map", "Map", "Map(1) {Object => 'uint8array0'}", "[object Map]", "size", "number",
592                          "1", "1", "[[Entries]]", "object", "array", "Array", "Array(1)", "[object Object]" } },
593             { "map17", { "object", "map", "Map", "Map(1) {Object => 'dataview0'}", "[object Map]", "size", "number",
594                          "1", "1", "[[Entries]]", "object", "array", "Array", "Array(1)", "[object Object]" } },
595             { "map18", { "object", "map", "Map", "Map(1) {8998192055486250009 => 'bigint10'}", "[object Map]", "size",
596                          "number", "1", "1", "[[Entries]]", "object", "array", "Array", "Array(1)",
597                          "[object Object]" } },
598             { "map19", { "object", "map", "Map", "Map(1) {Object => 'function0'}", "[object Map]", "size", "number",
599                          "1", "1", "[[Entries]]", "object", "array", "Array", "Array(1)", "[object Object]" } },
600             { "object1", { "object", "Object", "Object", "[object Object]", "0", "string", "zero", "zero", "1",
601                            "string", "one", "one", "2", "string", "two", "two", "3", "string", "three", "three", "4",
602                            "string", "four", "four", "5", "string", "five", "five" } },
603             { "object2", { "object", "Object", "Object", "[object Object]", "0", "string", "zero", "zero", "1",
604                            "string", "one", "one", "2", "string", "two", "two", "3", "string", "three", "three", "4",
605                            "string", "four", "four", "5", "string", "five", "five" } },
606             { "object3", { "object", "Object", "Object", "[object Object]", "0", "string", "zero", "zero", "1",
607                            "string", "one", "one", "2", "string", "two", "two", "3", "string", "three", "three", "4",
608                            "string", "four", "four", "5", "string", "five", "five" } },
609             { "object4", { "object", "set", "Set", "Set(0)", "[object Set]", "size", "number", "0", "0",
610                            "[[Entries]]", "object", "array", "Array", "Array(0)", "" } },
611             { "object5", { "object", "Object", "String{[[PrimitiveValue]]: helloworld}", "helloworld",
612                            "[[PrimitiveValue]]", "string", "helloworld", "helloworld", "0", "string", "h", "h", "1",
613                            "string", "e", "e", "2", "string", "l", "l", "3", "string", "l", "l", "4", "string", "o",
614                            "o", "5", "string", "w", "w", "6", "string", "o", "o", "7", "string", "r", "r", "8",
615                            "string", "l", "l", "9", "string", "d", "d", "length", "number", "10", "10" } },
616             { "object6", { "object", "map", "Map", "Map(0)", "[object Map]", "size", "number", "0", "0", "[[Entries]]",
617                            "object", "array", "Array", "Array(0)", "" } },
618             { "object7", { "object", "Object", "Number{[[PrimitiveValue]]: 1}", "1", "[[PrimitiveValue]]", "number",
619                            "1", "1" } },
620             { "object8", { "object", "Object", "Object", "[object Object]", "key0", "string", "value0", "value0",
621                            "key1", "number", "100", "100" } },
622             { "object9", { "object", "Object", "Object", "[object Object]", "none" } },
623             { "object10", { "object", "array", "Array", "Array(2)", "Apple,Banana", "0", "string", "Apple", "Apple",
624                             "1", "string", "Banana", "Banana", "length", "number", "2", "2" } },
625             { "object11", { "object", "Object", "Object", "8998192055486250009", "none" } },
626             { "object12", { "function", "Generator", "function* generator0( { [js code] }",
627                             "Cannot get source code of funtion" } },
628             { "object13", { "object", "regexp", "RegExp", "/^\\d+\\.\\d+$/i", "/^\\d+\\.\\d+$/i", "global", "boolean",
629                             "false", "false", "ignoreCase", "boolean", "true", "true", "multiline", "boolean", "false",
630                             "false", "dotAll", "boolean", "false", "false", "hasIndices", "boolean", "false", "false",
631                             "unicode", "boolean", "false", "false", "sticky", "boolean", "false", "false", "flags",
632                             "string", "i", "i", "source", "string", "^\\d+\\.\\d+$", "^\\d+\\.\\d+$", "lastIndex",
633                             "number", "0", "0" } },
634             { "object14", { "object", "Object", "Object", "999", "none" } },
635             { "object15", { "object", "arraybuffer", "Arraybuffer", "ArrayBuffer(24)", "[object ArrayBuffer]",
636                             "[[Int8Array]]", "object", "Object", "Int8Array(24)",
637                             "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", "[[Uint8Array]]", "object", "Object",
638                             "Uint8Array(24)", "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
639                             "[[Uint8ClampedArray]]", "object", "Object", "Object",
640                             "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0", "[[Int16Array]]", "object", "Object",
641                             "Int16Array(12)", "0,0,0,0,0,0,0,0,0,0,0,0", "[[Uint16Array]]", "object", "Object",
642                             "Object", "0,0,0,0,0,0,0,0,0,0,0,0", "[[Int32Array]]", "object", "Object",
643                             "Int32Array(6)", "0,0,0,0,0,0", "[[Uint32Array]]", "object", "Object", "Object",
644                             "0,0,0,0,0,0", "[[Float32Array]]", "object", "Object", "Object", "0,0,0,0,0,0",
645                             "[[Float64Array]]", "object", "Object", "Object", "0,0,0", "[[BigInt64Array]]", "object",
646                             "Object", "Object", "0,0,0", "[[BigUint64Array]]",
647                             "object", "Object", "Object", "0,0,0" } },
648             { "object16", { "object", "Object", "Uint8Array(24)", "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
649                             "         0", "number", "0", "0", "         1", "number", "0", "0", "         2",
650                             "number", "0", "0", "         3", "number", "0", "0", "         4", "number", "0", "0",
651                             "         5", "number", "0", "0", "         6", "number", "0", "0", "         7",
652                             "number", "0", "0", "         8", "number", "0", "0", "         9", "number", "0", "0",
653                             "        10", "number", "0", "0", "        11", "number", "0", "0", "        12",
654                             "number", "0", "0", "        13", "number", "0", "0", "        14", "number", "0", "0",
655                             "        15", "number", "0", "0", "        16", "number", "0", "0", "        17",
656                             "number", "0", "0", "        18", "number", "0", "0", "        19", "number", "0", "0",
657                             "        20", "number", "0", "0", "        21", "number", "0", "0", "        22",
658                             "number", "0", "0", "        23", "number", "0", "0" } },
659             { "object17", { "object", "dataview", "Dataview", "DataView(24)", "[object DataView]", "buffer",
660                             "object", "arraybuffer", "Arraybuffer", "ArrayBuffer(24)", "[object ArrayBuffer]",
661                             "byteLength", "number", "24", "24", "byteOffset", "number", "0", "0" } },
662             { "object18", { "object", "Object", "Boolean{[[PrimitiveValue]]: false}", "false", "[[PrimitiveValue]]",
663                             "boolean", "false", "false" } },
664             { "object19", { "function", "Function", "function function0( { [js code] }",
665                             "Cannot get source code of funtion" } },
666             { "regExp1", { "object", "regexp", "RegExp", "/^a/g", "/^a/g", "global", "boolean", "true", "true",
667                            "ignoreCase", "boolean", "false", "false", "multiline", "boolean", "false", "false",
668                            "dotAll", "boolean", "false", "false", "hasIndices", "boolean", "false", "false", "unicode",
669                            "boolean", "false", "false", "sticky", "boolean", "false", "false", "flags", "string", "g",
670                            "g", "source", "string", "^a", "^a", "lastIndex", "number", "0", "0" } },
671             { "regExp2", { "object", "regexp", "RegExp", "/^ab+c/g", "/^ab+c/g", "global", "boolean", "true", "true",
672                            "ignoreCase", "boolean", "false", "false", "multiline", "boolean", "false", "false",
673                            "dotAll", "boolean", "false", "false", "hasIndices", "boolean", "false", "false", "unicode",
674                            "boolean", "false", "false", "sticky", "boolean", "false", "false", "flags", "string", "g",
675                            "g", "source", "string", "^ab+c", "^ab+c", "lastIndex", "number", "0", "0" } },
676             { "regExp3", { "object", "regexp", "RegExp", "/123$/", "/123$/", "global", "boolean", "false", "false",
677                            "ignoreCase", "boolean", "false", "false", "multiline", "boolean", "false", "false",
678                            "dotAll", "boolean", "false", "false", "hasIndices", "boolean", "false", "false", "unicode",
679                            "boolean", "false", "false", "sticky", "boolean", "false", "false", "flags", "string", "",
680                            "", "source", "string", "123$", "123$", "lastIndex", "number", "0", "0" } },
681             { "regExp4", { "object", "regexp", "RegExp", "/\\d/i", "/\\d/i", "global", "boolean", "false", "false",
682                            "ignoreCase", "boolean", "true", "true", "multiline", "boolean", "false", "false", "dotAll",
683                            "boolean", "false", "false", "hasIndices", "boolean", "false", "false", "unicode",
684                            "boolean", "false", "false", "sticky", "boolean", "false", "false", "flags", "string", "i",
685                            "i", "source", "string", "\\d", "\\d", "lastIndex", "number", "0", "0" } },
686             { "regExp5", { "object", "regexp", "RegExp", "/^[a-zA-Z]/w{5,17}$/iu", "/^[a-zA-Z]\\/w{5,17}$/iu",
687                            "global", "boolean", "false", "false", "ignoreCase", "boolean", "true", "true", "multiline",
688                            "boolean", "false", "false", "dotAll", "boolean", "false", "false", "hasIndices", "boolean",
689                            "false", "false", "unicode", "boolean", "true", "true", "sticky", "boolean", "false",
690                            "false", "flags", "string", "iu", "iu", "source", "string",
691                            "^[a-zA-Z]/w{5,17}$", "^[a-zA-Z]/w{5,17}$", "lastIndex", "number", "0", "0" } },
692             { "regExp6", { "object", "regexp", "RegExp", "/[A-Z]/m", "/[A-Z]/m", "global", "boolean", "false", "false",
693                            "ignoreCase", "boolean", "false", "false", "multiline", "boolean", "true", "true", "dotAll",
694                            "boolean", "false", "false", "hasIndices", "boolean", "false", "false", "unicode",
695                            "boolean", "false", "false", "sticky", "boolean", "false", "false", "flags", "string", "m",
696                            "m", "source", "string", "[A-Z]", "[A-Z]", "lastIndex", "number", "0", "0" } },
697             { "regExp7", { "object", "regexp", "RegExp", "/(/d{3}-|/d{4}-)?(/d{8}|/d{7})?/gm",
698                            "/(\\/d{3}-|\\/d{4}-)?(\\/d{8}|\\/d{7})?/gm", "global", "boolean", "true", "true",
699                            "ignoreCase", "boolean", "false", "false", "multiline", "boolean", "true", "true", "dotAll",
700                            "boolean", "false", "false", "hasIndices", "boolean", "false", "false", "unicode",
701                            "boolean", "false", "false", "sticky", "boolean", "false", "false", "flags", "string", "gm",
702                            "gm", "source", "string", "(/d{3}-|/d{4}-)?(/d{8}|/d{7})?",
703                            "(/d{3}-|/d{4}-)?(/d{8}|/d{7})?", "lastIndex", "number", "0", "0" } },
704             { "regExp8", { "object", "regexp", "RegExp", "/[a-z]/y", "/[a-z]/y", "global", "boolean", "false", "false",
705                            "ignoreCase", "boolean", "false", "false", "multiline", "boolean", "false", "false",
706                            "dotAll", "boolean", "false", "false", "hasIndices", "boolean", "false", "false", "unicode",
707                            "boolean", "false", "false", "sticky", "boolean", "true", "true", "flags", "string", "y",
708                            "y", "source", "string", "[a-z]", "[a-z]", "lastIndex", "number", "0", "0" } },
709             { "regExp9", { "object", "regexp", "RegExp", "/\\s/u", "/\\s/u", "global", "boolean", "false", "false",
710                            "ignoreCase", "boolean", "false", "false", "multiline", "boolean", "false", "false",
711                            "dotAll", "boolean", "false", "false", "hasIndices", "boolean", "false", "false",
712                            "unicode", "boolean", "true", "true", "sticky", "boolean", "false", "false", "flags",
713                            "string", "u", "u", "source", "string", "\\s", "\\s", "lastIndex", "number", "0", "0" } },
714             { "regExp10", { "object", "regexp", "RegExp", "/a+/s", "/a+/s", "global", "boolean", "false", "false",
715                             "ignoreCase", "boolean", "false", "false", "multiline", "boolean", "false", "false",
716                             "dotAll", "boolean", "true", "true", "hasIndices", "boolean", "true", "true", "unicode",
717                             "boolean", "false", "false", "sticky", "boolean", "false", "false", "flags", "string",
718                             "s", "s", "source", "string", "a+", "a+", "lastIndex", "number", "0", "0" } },
719             { "regExp11", { "object", "regexp", "RegExp", "/(d+-)?(d{4}-?d{7}|d{3}-?d{8}|^d{7,8})(-d+)?/s",
720                             "/(d+-)?(d{4}-?d{7}|d{3}-?d{8}|^d{7,8})(-d+)?/s", "global", "boolean", "false", "false",
721                             "ignoreCase", "boolean", "false", "false", "multiline", "boolean", "false", "false",
722                             "dotAll", "boolean", "true", "true", "hasIndices", "boolean", "true", "true", "unicode",
723                             "boolean", "false", "false", "sticky", "boolean", "false", "false", "flags", "string",
724                             "s", "s", "source", "string", "(d+-)?(d{4}-?d{7}|d{3}-?d{8}|^d{7,8})(-d+)?",
725                             "(d+-)?(d{4}-?d{7}|d{3}-?d{8}|^d{7,8})(-d+)?", "lastIndex", "number", "0", "0" } },
726             { "regExp12", { "object", "regexp", "RegExp", "/a?/gy", "/a?/gy", "global", "boolean", "true", "true",
727                             "ignoreCase", "boolean", "false", "false", "multiline", "boolean", "false", "false",
728                             "dotAll", "boolean", "false", "false", "hasIndices", "boolean", "false", "false",
729                             "unicode", "boolean", "false", "false", "sticky", "boolean", "true", "true", "flags",
730                             "string", "gy", "gy", "source", "string", "a?", "a?", "lastIndex", "number", "0", "0" } },
731             { "regExp13", { "object", "regexp", "RegExp",
732                             "//^((0([1-9]{1}))|(1[1|2]))/(([0-2]([1-9]{1}))|(3[0|1]))/(d{2}|d{4})$//",
733                             "/\\/^((0([1-9]{1}))|(1[1|2]))\\/(([0-2]([1-9]{1}))|(3[0|1]))\\/(d{2}|d{4})$\\//",
734                             "global", "boolean", "false", "false", "ignoreCase", "boolean", "false", "false",
735                             "multiline", "boolean", "false", "false", "dotAll", "boolean", "false", "false",
736                             "hasIndices", "boolean", "false", "false", "unicode", "boolean", "false", "false",
737                             "sticky", "boolean", "false", "false", "flags", "string", "", "", "source", "string",
738                             "/^((0([1-9]{1}))|(1[1|2]))/(([0-2]([1-9]{1}))|(3[0|1]))/(d{2}|d{4})$/",
739                             "/^((0([1-9]{1}))|(1[1|2]))/(([0-2]([1-9]{1}))|(3[0|1]))/(d{2}|d{4})$/", "lastIndex",
740                             "number", "0", "0" } },
741             { "regExp14", { "object", "regexp", "RegExp", "/a*/gimy", "/a*/gimy", "global", "boolean", "true", "true",
742                             "ignoreCase", "boolean", "true", "true", "multiline", "boolean", "true", "true", "dotAll",
743                             "boolean", "false", "false", "hasIndices", "boolean", "false", "false", "unicode",
744                             "boolean", "false", "false", "sticky", "boolean", "true", "true", "flags", "string",
745                             "gimy", "gimy", "source", "string", "a*", "a*", "lastIndex", "number", "0", "0" } },
746             { "regExp15", { "object", "regexp", "RegExp", "/^[/w-]+(/.[/w-]+)*@[/w-]+(/.[/w-]+)+$/gi",
747                             "/^[\\/w-]+(\\/.[\\/w-]+)*@[\\/w-]+(\\/.[\\/w-]+)+$/gi", "global", "boolean", "true",
748                             "true", "ignoreCase", "boolean", "true", "true", "multiline", "boolean", "false",
749                             "false", "dotAll", "boolean", "false", "false", "hasIndices", "boolean", "false", "false",
750                             "unicode", "boolean", "false", "false", "sticky", "boolean", "false", "false", "flags",
751                             "string", "gi", "gi", "source", "string", "^[/w-]+(/.[/w-]+)*@[/w-]+(/.[/w-]+)+$",
752                             "^[/w-]+(/.[/w-]+)*@[/w-]+(/.[/w-]+)+$", "lastIndex", "number", "0", "0" } },
753             { "regExp16", { "object", "regexp", "RegExp", "/a|b/gimsy", "/a|b/gimsy", "global", "boolean", "true",
754                             "true", "ignoreCase", "boolean", "true", "true", "multiline", "boolean", "true", "true",
755                             "dotAll", "boolean", "true", "true", "hasIndices", "boolean", "true", "true", "unicode",
756                             "boolean", "false", "false", "sticky", "boolean", "true", "true", "flags", "string",
757                             "gimsy", "gimsy", "source", "string", "a|b", "a|b", "lastIndex", "number", "0", "0" } },
758             { "regExp17", { "object", "regexp", "RegExp",
759                             "/^((0([1-9]{1}))|(1[1|2]))/(([0-2]([1-9]{1}))|(3[0|1]))/(d{2}|d{4})$/",
760                             "/^((0([1-9]{1}))|(1[1|2]))\\/(([0-2]([1-9]{1}))|(3[0|1]))\\/(d{2}|d{4})$/", "global",
761                             "boolean", "false", "false", "ignoreCase", "boolean", "false", "false", "multiline",
762                             "boolean", "false", "false", "dotAll", "boolean", "false", "false", "hasIndices",
763                             "boolean", "false", "false", "unicode", "boolean", "false", "false", "sticky", "boolean",
764                             "false", "false", "flags", "string", "", "", "source", "string",
765                             "^((0([1-9]{1}))|(1[1|2]))/(([0-2]([1-9]{1}))|(3[0|1]))/(d{2}|d{4})$",
766                             "^((0([1-9]{1}))|(1[1|2]))/(([0-2]([1-9]{1}))|(3[0|1]))/(d{2}|d{4})$", "lastIndex",
767                             "number", "0", "0" } },
768             { "regExp18", { "object", "regexp", "RegExp", "/\\/<(.*)>.*<\\/\\/\\/1>|<(.*) \\/\\/>/i",
769                             "/\\\\/<(.*)>.*<\\\\/\\\\/\\\\/1>|<(.*) \\\\/\\\\/>/i", "global", "boolean", "false",
770                             "false", "ignoreCase", "boolean", "true", "true", "multiline", "boolean", "false",
771                             "false", "dotAll", "boolean", "false", "false", "hasIndices", "boolean", "false", "false",
772                             "unicode", "boolean", "false", "false", "sticky", "boolean", "false", "false", "flags",
773                             "string", "i", "i", "source", "string",
774                             "\\/<(.*)>.*<\\/\\/\\/1>|<(.*) \\/\\/>", "\\/<(.*)>.*<\\/\\/\\/1>|<(.*) \\/\\/>",
775                             "lastIndex", "number", "0", "0" } },
776             { "regExp19", { "object", "regexp", "RegExp", "/^[1-9]*[1-9][0-9]*$/m", "/^[1-9]*[1-9][0-9]*$/m",
777                             "global", "boolean", "false", "false", "ignoreCase", "boolean", "false", "false",
778                             "multiline", "boolean", "true", "true", "dotAll", "boolean", "false", "false",
779                             "hasIndices", "boolean", "false", "false", "unicode", "boolean", "false", "false",
780                             "sticky", "boolean", "false", "false", "flags", "string", "m", "m", "source",
781                             "string", "^[1-9]*[1-9][0-9]*$", "^[1-9]*[1-9][0-9]*$", "lastIndex", "number",
782                             "0", "0" } },
783             { "regExp20", { "object", "regexp", "RegExp", "/^[a-zA-Z]\\/w{5,17}$/", "/^[a-zA-Z]\\\\/w{5,17}$/",
784                             "global", "boolean", "false", "false", "ignoreCase", "boolean", "false", "false",
785                             "multiline", "boolean", "false", "false", "dotAll", "boolean", "false", "false",
786                             "hasIndices", "boolean", "false", "false", "unicode", "boolean", "false", "false",
787                             "sticky", "boolean", "false", "false", "flags", "string", "", "", "source", "string",
788                             "^[a-zA-Z]\\/w{5,17}$", "^[a-zA-Z]\\/w{5,17}$", "lastIndex", "number", "0", "0" } },
789             { "regExp21", { "object", "regexp", "RegExp", "/^[0-9a-zA-Z_]{1,}$/u", "/^[0-9a-zA-Z_]{1,}$/u", "global",
790                             "boolean", "false", "false", "ignoreCase", "boolean", "false", "false", "multiline",
791                             "boolean", "false", "false", "dotAll", "boolean", "false", "false", "hasIndices",
792                             "boolean", "false", "false", "unicode", "boolean", "true", "true", "sticky", "boolean",
793                             "false", "false", "flags", "string", "u", "u", "source", "string", "^[0-9a-zA-Z_]{1,}$",
794                             "^[0-9a-zA-Z_]{1,}$", "lastIndex", "number", "0", "0" } },
795         };
796 
797         int32_t index_ {0};
798         const EcmaVM *vm_ {nullptr};
799         RuntimeImpl *runtime_ {nullptr};
800     };
801 
802     std::string entryPoint_ = "_GLOBAL::func_main_0";
803     JSPtLocation location_ {nullptr, JSPtLocation::EntityId(0), 0};
804     size_t breakpointCounter_ = 0;
805 };
806 
GetJsVariableFirstTest()807 std::unique_ptr<TestEvents> GetJsVariableFirstTest()
808 {
809     return std::make_unique<JsVariableFirstTest>();
810 }
811 }  // namespace panda::ecmascript::tooling::test
812 
813 #endif  // ECMASCRIPT_TOOLING_TEST_UTILS_TESTCASES_JS_VARIABLE_TEST_H
814