OLD | NEW |
---|---|
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 #include "include/dart_debugger_api.h" | 5 #include "include/dart_debugger_api.h" |
6 #include "platform/assert.h" | 6 #include "platform/assert.h" |
7 #include "vm/dart_api_impl.h" | 7 #include "vm/dart_api_impl.h" |
8 #include "vm/unit_test.h" | 8 #include "vm/unit_test.h" |
9 | 9 |
10 namespace dart { | 10 namespace dart { |
(...skipping 15 matching lines...) Expand all Loading... | |
26 | 26 |
27 static Dart_Handle Invoke(Dart_Handle lib, const char* func_name) { | 27 static Dart_Handle Invoke(Dart_Handle lib, const char* func_name) { |
28 return Dart_InvokeStatic(lib, | 28 return Dart_InvokeStatic(lib, |
29 Dart_NewString(""), | 29 Dart_NewString(""), |
30 Dart_NewString(func_name), | 30 Dart_NewString(func_name), |
31 0, | 31 0, |
32 NULL); | 32 NULL); |
33 } | 33 } |
34 | 34 |
35 | 35 |
36 static char const* ToCString(Dart_Handle str) { | |
37 EXPECT(Dart_IsString(str)); | |
38 char const* c_str = NULL; | |
39 Dart_StringToCString(str, &c_str); | |
40 return c_str; | |
41 } | |
42 | |
43 | |
44 static char const* BPFunctionName(Dart_StackTrace trace) { | |
45 Dart_ActivationFrame frame; | |
46 Dart_Handle res = Dart_GetActivationFrame(trace, 0, &frame); | |
47 EXPECT_NOT_ERROR(res); | |
48 Dart_Handle func_name; | |
49 res = Dart_ActivationFrameInfo(frame, &func_name, NULL, NULL); | |
50 EXPECT_NOT_ERROR(res); | |
51 return ToCString(func_name); | |
52 } | |
53 | |
54 | |
55 static char const* BreakpointInfo(Dart_StackTrace trace) { | |
56 static char info_str[128]; | |
57 Dart_ActivationFrame frame; | |
58 Dart_Handle res = Dart_GetActivationFrame(trace, 0, &frame); | |
59 EXPECT_NOT_ERROR(res); | |
60 Dart_Handle func_name; | |
61 Dart_Handle url; | |
62 intptr_t line_number = 0; | |
63 res = Dart_ActivationFrameInfo(frame, &func_name, &url, &line_number); | |
64 EXPECT_NOT_ERROR(res); | |
65 OS::SNPrint(info_str, sizeof(info_str), "function %s (%s:%d)", | |
66 ToCString(func_name), ToCString(url), line_number); | |
67 return info_str; | |
68 } | |
69 | |
70 | |
71 static void PrintValue(Dart_Handle value, bool expand); | |
72 | |
73 static void PrintObject(Dart_Handle obj, bool expand) { | |
74 Dart_Handle obj_class = Dart_GetObjClass(obj); | |
75 EXPECT_NOT_ERROR(obj_class); | |
76 EXPECT(!Dart_IsNull(obj_class)); | |
77 Dart_Handle class_name = Dart_ToString(obj_class); | |
78 EXPECT_NOT_ERROR(class_name); | |
79 EXPECT(Dart_IsString(class_name)); | |
80 char const* class_name_str; | |
81 Dart_StringToCString(class_name, &class_name_str); | |
82 Dart_Handle fields = Dart_GetInstanceFields(obj); | |
83 EXPECT_NOT_ERROR(fields); | |
84 EXPECT(Dart_IsList(fields)); | |
85 intptr_t list_length = 0; | |
86 Dart_Handle retval = Dart_ListLength(fields, &list_length); | |
87 EXPECT_NOT_ERROR(retval); | |
88 OS::Print("object of type '%s'", class_name_str); | |
89 for (int i = 0; i + 1 < list_length; i += 2) { | |
90 Dart_Handle name_handle = Dart_ListGetAt(fields, i); | |
91 EXPECT_NOT_ERROR(name_handle); | |
92 EXPECT(Dart_IsString(name_handle)); | |
93 Dart_Handle value_handle = Dart_ListGetAt(fields, i + 1); | |
94 OS::Print("\n field %s = ", ToCString(name_handle)); | |
95 PrintValue(value_handle, false); | |
96 } | |
97 } | |
98 | |
99 | |
100 static void PrintValue(Dart_Handle value, bool expand) { | |
101 if (Dart_IsNull(value)) { | |
102 OS::Print("null"); | |
103 } else if (Dart_IsString(value)) { | |
104 Dart_Handle str_value = Dart_ToString(value); | |
105 EXPECT_NOT_ERROR(str_value); | |
106 EXPECT(Dart_IsString(str_value)); | |
107 OS::Print("\"%s\"", ToCString(str_value)); | |
108 } else if (Dart_IsNumber(value) || Dart_IsBoolean(value)) { | |
109 Dart_Handle str_value = Dart_ToString(value); | |
110 EXPECT_NOT_ERROR(str_value); | |
111 EXPECT(Dart_IsString(str_value)); | |
112 OS::Print("%s", ToCString(str_value)); | |
113 } else { | |
114 PrintObject(value, expand); | |
115 } | |
116 } | |
117 | |
118 | |
119 static void PrintActivationFrame(Dart_ActivationFrame frame) { | |
120 Dart_Handle func_name; | |
121 Dart_Handle res; | |
122 res = Dart_ActivationFrameInfo(frame, &func_name, NULL, NULL); | |
123 EXPECT_NOT_ERROR(res); | |
124 EXPECT(Dart_IsString(func_name)); | |
125 const char* func_name_chars; | |
126 Dart_StringToCString(func_name, &func_name_chars); | |
127 OS::Print(" function %s\n", func_name_chars); | |
128 Dart_Handle locals = Dart_GetLocalVariables(frame); | |
129 EXPECT_NOT_ERROR(locals); | |
130 intptr_t list_length = 0; | |
131 Dart_Handle ret = Dart_ListLength(locals, &list_length); | |
132 EXPECT_NOT_ERROR(ret); | |
133 for (int i = 0; i + 1 < list_length; i += 2) { | |
134 Dart_Handle name_handle = Dart_ListGetAt(locals, i); | |
135 EXPECT_NOT_ERROR(name_handle); | |
136 EXPECT(Dart_IsString(name_handle)); | |
137 OS::Print(" local var %s = ", ToCString(name_handle)); | |
138 Dart_Handle value_handle = Dart_ListGetAt(locals, i + 1); | |
139 EXPECT_NOT_ERROR(value_handle); | |
140 PrintValue(value_handle, true); | |
141 OS::Print("\n"); | |
142 } | |
143 } | |
144 | |
145 | |
146 static void PrintStackTrace(Dart_StackTrace trace) { | |
147 intptr_t trace_len; | |
148 Dart_Handle res = Dart_StackTraceLength(trace, &trace_len); | |
149 EXPECT_NOT_ERROR(res); | |
150 for (int i = 0; i < trace_len; i++) { | |
151 Dart_ActivationFrame frame; | |
152 res = Dart_GetActivationFrame(trace, i, &frame); | |
153 EXPECT_NOT_ERROR(res); | |
154 PrintActivationFrame(frame); | |
155 } | |
156 } | |
157 | |
158 | |
36 void TestBreakpointHandler(Dart_Breakpoint bpt, Dart_StackTrace trace) { | 159 void TestBreakpointHandler(Dart_Breakpoint bpt, Dart_StackTrace trace) { |
37 const char* expected_trace[] = {"A.foo", "main"}; | 160 const char* expected_trace[] = {"A.foo", "main"}; |
38 const intptr_t expected_trace_length = 2; | 161 const intptr_t expected_trace_length = 2; |
39 breakpoint_hit = true; | 162 breakpoint_hit = true; |
40 breakpoint_hit_counter++; | 163 breakpoint_hit_counter++; |
41 intptr_t trace_len; | 164 intptr_t trace_len; |
42 Dart_Handle res = Dart_StackTraceLength(trace, &trace_len); | 165 Dart_Handle res = Dart_StackTraceLength(trace, &trace_len); |
43 EXPECT_NOT_ERROR(res); | 166 EXPECT_NOT_ERROR(res); |
44 EXPECT_EQ(expected_trace_length, trace_len); | 167 EXPECT_EQ(expected_trace_length, trace_len); |
45 for (int i = 0; i < trace_len; i++) { | 168 for (int i = 0; i < trace_len; i++) { |
46 Dart_ActivationFrame frame; | 169 Dart_ActivationFrame frame; |
47 res = Dart_GetActivationFrame(trace, i, &frame); | 170 res = Dart_GetActivationFrame(trace, i, &frame); |
48 EXPECT_NOT_ERROR(res); | 171 EXPECT_NOT_ERROR(res); |
49 Dart_Handle func_name; | 172 Dart_Handle func_name; |
50 res = Dart_ActivationFrameInfo(frame, &func_name, NULL, NULL); | 173 res = Dart_ActivationFrameInfo(frame, &func_name, NULL, NULL); |
51 EXPECT_NOT_ERROR(res); | 174 EXPECT_NOT_ERROR(res); |
52 EXPECT(Dart_IsString(func_name)); | 175 EXPECT(Dart_IsString(func_name)); |
53 const char* name_chars; | 176 const char* name_chars; |
54 Dart_StringToCString(func_name, &name_chars); | 177 Dart_StringToCString(func_name, &name_chars); |
55 EXPECT_STREQ(expected_trace[i], name_chars); | 178 EXPECT_STREQ(expected_trace[i], name_chars); |
56 if (verbose) printf(" >> %d: %s\n", i, name_chars); | 179 if (verbose) OS::Print(" >> %d: %s\n", i, name_chars); |
57 } | 180 } |
58 } | 181 } |
59 | 182 |
60 | 183 |
61 TEST_CASE(Debug_Breakpoint) { | 184 TEST_CASE(Debug_Breakpoint) { |
62 const char* kScriptChars = | 185 const char* kScriptChars = |
63 "void moo(s) { } \n" | 186 "void moo(s) { } \n" |
64 "class A { \n" | 187 "class A { \n" |
65 " static void foo() { \n" | 188 " static void foo() { \n" |
66 " moo('good news'); \n" | 189 " moo('good news'); \n" |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
101 Dart_Handle func_name; | 224 Dart_Handle func_name; |
102 res = Dart_ActivationFrameInfo(frame, &func_name, NULL, NULL); | 225 res = Dart_ActivationFrameInfo(frame, &func_name, NULL, NULL); |
103 EXPECT_NOT_ERROR(res); | 226 EXPECT_NOT_ERROR(res); |
104 EXPECT(Dart_IsString(func_name)); | 227 EXPECT(Dart_IsString(func_name)); |
105 const char* name_chars; | 228 const char* name_chars; |
106 Dart_StringToCString(func_name, &name_chars); | 229 Dart_StringToCString(func_name, &name_chars); |
107 if (breakpoint_hit_counter < expected_bpts_length) { | 230 if (breakpoint_hit_counter < expected_bpts_length) { |
108 EXPECT_STREQ(expected_bpts[breakpoint_hit_counter], name_chars); | 231 EXPECT_STREQ(expected_bpts[breakpoint_hit_counter], name_chars); |
109 } | 232 } |
110 if (verbose) { | 233 if (verbose) { |
111 printf(" >> bpt nr %d: %s\n", breakpoint_hit_counter, name_chars); | 234 OS::Print(" >> bpt nr %d: %s\n", breakpoint_hit_counter, name_chars); |
112 } | 235 } |
113 breakpoint_hit = true; | 236 breakpoint_hit = true; |
114 breakpoint_hit_counter++; | 237 breakpoint_hit_counter++; |
115 Dart_SetStepOut(); | 238 Dart_SetStepOut(); |
116 } | 239 } |
117 | 240 |
118 | 241 |
119 TEST_CASE(Debug_StepOut) { | 242 TEST_CASE(Debug_StepOut) { |
120 const char* kScriptChars = | 243 const char* kScriptChars = |
121 "void f1() { return 1; } \n" | 244 "void f1() { return 1; } \n" |
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
187 Dart_Handle func_name; | 310 Dart_Handle func_name; |
188 res = Dart_ActivationFrameInfo(frame, &func_name, NULL, NULL); | 311 res = Dart_ActivationFrameInfo(frame, &func_name, NULL, NULL); |
189 EXPECT_NOT_ERROR(res); | 312 EXPECT_NOT_ERROR(res); |
190 EXPECT(Dart_IsString(func_name)); | 313 EXPECT(Dart_IsString(func_name)); |
191 const char* name_chars; | 314 const char* name_chars; |
192 Dart_StringToCString(func_name, &name_chars); | 315 Dart_StringToCString(func_name, &name_chars); |
193 if (breakpoint_hit_counter < expected_bpts_length) { | 316 if (breakpoint_hit_counter < expected_bpts_length) { |
194 EXPECT_STREQ(expected_bpts[breakpoint_hit_counter], name_chars); | 317 EXPECT_STREQ(expected_bpts[breakpoint_hit_counter], name_chars); |
195 } | 318 } |
196 if (verbose) { | 319 if (verbose) { |
197 printf(" >> bpt nr %d: %s\n", breakpoint_hit_counter, name_chars); | 320 OS::Print(" >> bpt nr %d: %s\n", breakpoint_hit_counter, name_chars); |
198 } | 321 } |
199 breakpoint_hit = true; | 322 breakpoint_hit = true; |
200 breakpoint_hit_counter++; | 323 breakpoint_hit_counter++; |
201 Dart_SetStepInto(); | 324 Dart_SetStepInto(); |
202 } | 325 } |
203 | 326 |
204 | 327 |
205 TEST_CASE(Debug_StepInto) { | 328 TEST_CASE(Debug_StepInto) { |
206 const char* kScriptChars = | 329 const char* kScriptChars = |
207 "void f1() { return 1; } \n" | 330 "void f1() { return 1; } \n" |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
242 Dart_Handle retval = Invoke(lib, "main"); | 365 Dart_Handle retval = Invoke(lib, "main"); |
243 EXPECT(!Dart_IsError(retval)); | 366 EXPECT(!Dart_IsError(retval)); |
244 EXPECT(Dart_IsInteger(retval)); | 367 EXPECT(Dart_IsInteger(retval)); |
245 int64_t int_value = 0; | 368 int64_t int_value = 0; |
246 Dart_IntegerToInt64(retval, &int_value); | 369 Dart_IntegerToInt64(retval, &int_value); |
247 EXPECT_EQ(7, int_value); | 370 EXPECT_EQ(7, int_value); |
248 EXPECT(breakpoint_hit == true); | 371 EXPECT(breakpoint_hit == true); |
249 } | 372 } |
250 | 373 |
251 | 374 |
375 void TestIgnoreBPHandler(Dart_Breakpoint bpt, Dart_StackTrace trace) { | |
376 if (verbose) { | |
377 OS::Print(">>> Breakpoint nr. %d in %s <<<\n", | |
378 breakpoint_hit_counter, BreakpointInfo(trace)); | |
379 PrintStackTrace(trace); | |
siva
2012/03/10 00:11:40
This ensures that the ignore breakpoint feature is
hausner
2012/03/10 00:41:56
Added a static field to the sample and to the stac
| |
380 } | |
381 breakpoint_hit = true; | |
382 breakpoint_hit_counter++; | |
383 Dart_SetStepInto(); | |
siva
2012/03/10 00:11:40
Why is it necessary to single step after this?
hausner
2012/03/10 00:41:56
It's just the easiest way to make sure we get into
siva
2012/03/12 22:19:14
Not sure I understand what you mean by get into ev
hausner
2012/03/12 22:36:44
The relevant case that we test here happens when w
| |
384 } | |
385 | |
386 | |
387 TEST_CASE(Debug_IgnoreBP) { | |
388 const char* kScriptChars = | |
389 "class B { \n" | |
390 " var i = 100; \n" | |
391 " var d = 3.14; \n" | |
392 " var s = 'Dr Seuss'; \n" | |
393 "} \n" | |
394 " \n" | |
395 "void main() { \n" | |
396 " var x = new B(); \n" | |
397 " return x.i + 1; \n" | |
398 "} \n"; | |
399 | |
400 Dart_Handle lib = TestCase::LoadTestScript(kScriptChars, NULL); | |
401 EXPECT(!Dart_IsError(lib)); | |
402 | |
403 Dart_SetBreakpointHandler(&TestIgnoreBPHandler); | |
404 | |
405 Dart_Handle c_name = Dart_NewString(""); | |
406 Dart_Handle f_name = Dart_NewString("main"); | |
407 Dart_Breakpoint bpt; | |
408 Dart_Handle res = Dart_SetBreakpointAtEntry(lib, c_name, f_name, &bpt); | |
409 EXPECT_NOT_ERROR(res); | |
410 | |
411 breakpoint_hit = false; | |
412 breakpoint_hit_counter = 0; | |
siva
2012/03/10 00:11:40
What is the significance of breakpoint_hit_counter
hausner
2012/03/10 00:41:56
It's just boilerplate that I copied from other tes
siva
2012/03/12 22:19:14
If you are retaining it then why not add the check
hausner
2012/03/12 22:36:44
This test hits many breakpoints (including the int
| |
413 Dart_Handle retval = Invoke(lib, "main"); | |
414 EXPECT(!Dart_IsError(retval)); | |
415 EXPECT(Dart_IsInteger(retval)); | |
416 int64_t int_value = 0; | |
417 Dart_IntegerToInt64(retval, &int_value); | |
418 EXPECT_EQ(101, int_value); | |
419 EXPECT(breakpoint_hit == true); | |
420 } | |
421 | |
422 | |
252 void TestSingleStepHandler(Dart_Breakpoint bpt, Dart_StackTrace trace) { | 423 void TestSingleStepHandler(Dart_Breakpoint bpt, Dart_StackTrace trace) { |
253 const char* expected_bpts[] = { | 424 const char* expected_bpts[] = { |
254 "moo", "foo", "moo", "foo", "moo", "foo", "main"}; | 425 "moo", "foo", "moo", "foo", "moo", "foo", "main"}; |
255 const intptr_t expected_bpts_length = ARRAY_SIZE(expected_bpts); | 426 const intptr_t expected_bpts_length = ARRAY_SIZE(expected_bpts); |
256 intptr_t trace_len; | 427 intptr_t trace_len; |
257 Dart_Handle res = Dart_StackTraceLength(trace, &trace_len); | 428 Dart_Handle res = Dart_StackTraceLength(trace, &trace_len); |
258 EXPECT_NOT_ERROR(res); | 429 EXPECT_NOT_ERROR(res); |
259 EXPECT(breakpoint_hit_counter < expected_bpts_length); | 430 EXPECT(breakpoint_hit_counter < expected_bpts_length); |
260 Dart_ActivationFrame frame; | 431 Dart_ActivationFrame frame; |
261 res = Dart_GetActivationFrame(trace, 0, &frame); | 432 res = Dart_GetActivationFrame(trace, 0, &frame); |
262 EXPECT_NOT_ERROR(res); | 433 EXPECT_NOT_ERROR(res); |
263 Dart_Handle func_name; | 434 Dart_Handle func_name; |
264 res = Dart_ActivationFrameInfo(frame, &func_name, NULL, NULL); | 435 res = Dart_ActivationFrameInfo(frame, &func_name, NULL, NULL); |
265 EXPECT_NOT_ERROR(res); | 436 EXPECT_NOT_ERROR(res); |
266 EXPECT(Dart_IsString(func_name)); | 437 EXPECT(Dart_IsString(func_name)); |
267 const char* name_chars; | 438 const char* name_chars; |
268 Dart_StringToCString(func_name, &name_chars); | 439 Dart_StringToCString(func_name, &name_chars); |
269 if (verbose) { | 440 if (verbose) { |
270 printf(" >> bpt nr %d: %s\n", breakpoint_hit_counter, name_chars); | 441 OS::Print(" >> bpt nr %d: %s\n", breakpoint_hit_counter, name_chars); |
271 } | 442 } |
272 if (breakpoint_hit_counter < expected_bpts_length) { | 443 if (breakpoint_hit_counter < expected_bpts_length) { |
273 EXPECT_STREQ(expected_bpts[breakpoint_hit_counter], name_chars); | 444 EXPECT_STREQ(expected_bpts[breakpoint_hit_counter], name_chars); |
274 } | 445 } |
275 breakpoint_hit = true; | 446 breakpoint_hit = true; |
276 breakpoint_hit_counter++; | 447 breakpoint_hit_counter++; |
277 Dart_SetStepOver(); | 448 Dart_SetStepOver(); |
278 } | 449 } |
279 | 450 |
280 | 451 |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
324 Dart_ActivationFrame frame; | 495 Dart_ActivationFrame frame; |
325 res = Dart_GetActivationFrame(trace, i, &frame); | 496 res = Dart_GetActivationFrame(trace, i, &frame); |
326 EXPECT_NOT_ERROR(res); | 497 EXPECT_NOT_ERROR(res); |
327 Dart_Handle func_name; | 498 Dart_Handle func_name; |
328 res = Dart_ActivationFrameInfo(frame, &func_name, NULL, NULL); | 499 res = Dart_ActivationFrameInfo(frame, &func_name, NULL, NULL); |
329 EXPECT_NOT_ERROR(res); | 500 EXPECT_NOT_ERROR(res); |
330 EXPECT(Dart_IsString(func_name)); | 501 EXPECT(Dart_IsString(func_name)); |
331 const char* name_chars; | 502 const char* name_chars; |
332 Dart_StringToCString(func_name, &name_chars); | 503 Dart_StringToCString(func_name, &name_chars); |
333 EXPECT_STREQ(expected_trace[i], name_chars); | 504 EXPECT_STREQ(expected_trace[i], name_chars); |
334 if (verbose) printf(" >> %d: %s\n", i, name_chars); | 505 if (verbose) OS::Print(" >> %d: %s\n", i, name_chars); |
335 } | 506 } |
336 } | 507 } |
337 | 508 |
338 | 509 |
339 TEST_CASE(Debug_ClosureBreakpoint) { | 510 TEST_CASE(Debug_ClosureBreakpoint) { |
340 const char* kScriptChars = | 511 const char* kScriptChars = |
341 "callback(s) { \n" | 512 "callback(s) { \n" |
342 " return 111; \n" | 513 " return 111; \n" |
343 "} \n" | 514 "} \n" |
344 " \n" | 515 " \n" |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
383 Dart_ActivationFrame frame; | 554 Dart_ActivationFrame frame; |
384 res = Dart_GetActivationFrame(trace, i, &frame); | 555 res = Dart_GetActivationFrame(trace, i, &frame); |
385 EXPECT_NOT_ERROR(res); | 556 EXPECT_NOT_ERROR(res); |
386 Dart_Handle func_name; | 557 Dart_Handle func_name; |
387 res = Dart_ActivationFrameInfo(frame, &func_name, NULL, NULL); | 558 res = Dart_ActivationFrameInfo(frame, &func_name, NULL, NULL); |
388 EXPECT_NOT_ERROR(res); | 559 EXPECT_NOT_ERROR(res); |
389 EXPECT(Dart_IsString(func_name)); | 560 EXPECT(Dart_IsString(func_name)); |
390 const char* name_chars; | 561 const char* name_chars; |
391 Dart_StringToCString(func_name, &name_chars); | 562 Dart_StringToCString(func_name, &name_chars); |
392 EXPECT_STREQ(expected_trace[i], name_chars); | 563 EXPECT_STREQ(expected_trace[i], name_chars); |
393 if (verbose) printf(" >> %d: %s\n", i, name_chars); | 564 if (verbose) OS::Print(" >> %d: %s\n", i, name_chars); |
394 } | 565 } |
395 // Remove the breakpoint after we've hit it twice | 566 // Remove the breakpoint after we've hit it twice |
396 if (breakpoint_hit_counter == 2) { | 567 if (breakpoint_hit_counter == 2) { |
397 if (verbose) printf("uninstalling breakpoint\n"); | 568 if (verbose) OS::Print("uninstalling breakpoint\n"); |
398 Dart_Handle res = Dart_DeleteBreakpoint(bpt); | 569 Dart_Handle res = Dart_DeleteBreakpoint(bpt); |
399 EXPECT_NOT_ERROR(res); | 570 EXPECT_NOT_ERROR(res); |
400 } | 571 } |
401 } | 572 } |
402 | 573 |
403 | 574 |
404 TEST_CASE(Debug_DeleteBreakpoint) { | 575 TEST_CASE(Debug_DeleteBreakpoint) { |
405 const char* kScriptChars = | 576 const char* kScriptChars = |
406 "moo(s) { } \n" | 577 "moo(s) { } \n" |
407 " \n" | 578 " \n" |
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
463 EXPECT_NOT_ERROR(object_b); | 634 EXPECT_NOT_ERROR(object_b); |
464 | 635 |
465 Dart_Handle fields = Dart_GetInstanceFields(object_b); | 636 Dart_Handle fields = Dart_GetInstanceFields(object_b); |
466 EXPECT_NOT_ERROR(fields); | 637 EXPECT_NOT_ERROR(fields); |
467 EXPECT(Dart_IsList(fields)); | 638 EXPECT(Dart_IsList(fields)); |
468 intptr_t list_length = 0; | 639 intptr_t list_length = 0; |
469 Dart_Handle retval = Dart_ListLength(fields, &list_length); | 640 Dart_Handle retval = Dart_ListLength(fields, &list_length); |
470 EXPECT_NOT_ERROR(retval); | 641 EXPECT_NOT_ERROR(retval); |
471 int num_fields = list_length / 2; | 642 int num_fields = list_length / 2; |
472 EXPECT_EQ(kNumObjectFields, num_fields); | 643 EXPECT_EQ(kNumObjectFields, num_fields); |
473 printf("Object has %d fields:\n", num_fields); | 644 OS::Print("Object has %d fields:\n", num_fields); |
474 for (int i = 0; i + 1 < list_length; i += 2) { | 645 for (int i = 0; i + 1 < list_length; i += 2) { |
475 Dart_Handle name_handle = Dart_ListGetAt(fields, i); | 646 Dart_Handle name_handle = Dart_ListGetAt(fields, i); |
476 EXPECT_NOT_ERROR(name_handle); | 647 EXPECT_NOT_ERROR(name_handle); |
477 EXPECT(Dart_IsString(name_handle)); | 648 EXPECT(Dart_IsString(name_handle)); |
478 char const* name; | 649 char const* name; |
479 Dart_StringToCString(name_handle, &name); | 650 Dart_StringToCString(name_handle, &name); |
480 Dart_Handle value_handle = Dart_ListGetAt(fields, i + 1); | 651 Dart_Handle value_handle = Dart_ListGetAt(fields, i + 1); |
481 EXPECT_NOT_ERROR(value_handle); | 652 EXPECT_NOT_ERROR(value_handle); |
482 value_handle = Dart_ToString(value_handle); | 653 value_handle = Dart_ToString(value_handle); |
483 EXPECT_NOT_ERROR(value_handle); | 654 EXPECT_NOT_ERROR(value_handle); |
484 EXPECT(Dart_IsString(value_handle)); | 655 EXPECT(Dart_IsString(value_handle)); |
485 char const* value; | 656 char const* value; |
486 Dart_StringToCString(value_handle, &value); | 657 Dart_StringToCString(value_handle, &value); |
487 printf(" %s: %s\n", name, value); | 658 OS::Print(" %s: %s\n", name, value); |
488 } | 659 } |
489 | 660 |
490 // Check that an integer value returns an empty list of fields. | 661 // Check that an integer value returns an empty list of fields. |
491 Dart_Handle triple_six = Invoke(lib, "get_int"); | 662 Dart_Handle triple_six = Invoke(lib, "get_int"); |
492 EXPECT_NOT_ERROR(triple_six); | 663 EXPECT_NOT_ERROR(triple_six); |
493 EXPECT(Dart_IsInteger(triple_six)); | 664 EXPECT(Dart_IsInteger(triple_six)); |
494 int64_t int_value = 0; | 665 int64_t int_value = 0; |
495 Dart_IntegerToInt64(triple_six, &int_value); | 666 Dart_IntegerToInt64(triple_six, &int_value); |
496 EXPECT_EQ(666, int_value); | 667 EXPECT_EQ(666, int_value); |
497 fields = Dart_GetInstanceFields(triple_six); | 668 fields = Dart_GetInstanceFields(triple_six); |
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
603 Dart_Handle libs = Dart_GetLibraryURLs(); | 774 Dart_Handle libs = Dart_GetLibraryURLs(); |
604 EXPECT(Dart_IsList(libs)); | 775 EXPECT(Dart_IsList(libs)); |
605 intptr_t num_libs; | 776 intptr_t num_libs; |
606 Dart_ListLength(libs, &num_libs); | 777 Dart_ListLength(libs, &num_libs); |
607 EXPECT(num_libs > 0); | 778 EXPECT(num_libs > 0); |
608 for (int i = 0; i < num_libs; i++) { | 779 for (int i = 0; i < num_libs; i++) { |
609 Dart_Handle lib_url = Dart_ListGetAt(libs, i); | 780 Dart_Handle lib_url = Dart_ListGetAt(libs, i); |
610 EXPECT(Dart_IsString(lib_url)); | 781 EXPECT(Dart_IsString(lib_url)); |
611 char const* chars; | 782 char const* chars; |
612 Dart_StringToCString(lib_url, &chars); | 783 Dart_StringToCString(lib_url, &chars); |
613 printf("Lib %d: %s\n", i, chars); | 784 OS::Print("Lib %d: %s\n", i, chars); |
614 | 785 |
615 Dart_Handle scripts = Dart_GetScriptURLs(lib_url); | 786 Dart_Handle scripts = Dart_GetScriptURLs(lib_url); |
616 EXPECT(Dart_IsList(scripts)); | 787 EXPECT(Dart_IsList(scripts)); |
617 intptr_t num_scripts; | 788 intptr_t num_scripts; |
618 Dart_ListLength(scripts, &num_scripts); | 789 Dart_ListLength(scripts, &num_scripts); |
619 EXPECT(num_scripts >= 0); | 790 EXPECT(num_scripts >= 0); |
620 for (int i = 0; i < num_scripts; i++) { | 791 for (int i = 0; i < num_scripts; i++) { |
621 Dart_Handle script_url = Dart_ListGetAt(scripts, i); | 792 Dart_Handle script_url = Dart_ListGetAt(scripts, i); |
622 char const* chars; | 793 char const* chars; |
623 Dart_StringToCString(script_url, &chars); | 794 Dart_StringToCString(script_url, &chars); |
624 printf(" script %d: '%s'\n", i + 1, chars); | 795 OS::Print(" script %d: '%s'\n", i + 1, chars); |
625 } | 796 } |
626 } | 797 } |
627 | 798 |
628 Dart_Handle lib_url = Dart_NewString(TestCase::url()); | 799 Dart_Handle lib_url = Dart_NewString(TestCase::url()); |
629 Dart_Handle source = Dart_GetScriptSource(lib_url, lib_url); | 800 Dart_Handle source = Dart_GetScriptSource(lib_url, lib_url); |
630 EXPECT(Dart_IsString(source)); | 801 EXPECT(Dart_IsString(source)); |
631 char const* source_chars; | 802 char const* source_chars; |
632 Dart_StringToCString(source, &source_chars); | 803 Dart_StringToCString(source, &source_chars); |
633 printf("\n=== source: ===\n%s", source_chars); | 804 OS::Print("\n=== source: ===\n%s", source_chars); |
634 EXPECT_STREQ(kScriptChars, source_chars); | 805 EXPECT_STREQ(kScriptChars, source_chars); |
635 } | 806 } |
636 | 807 |
637 #endif // defined(TARGET_ARCH_IA32) || defined(TARGET_ARCH_X64). | 808 #endif // defined(TARGET_ARCH_IA32) || defined(TARGET_ARCH_X64). |
638 | 809 |
639 } // namespace dart | 810 } // namespace dart |
OLD | NEW |