Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(15)

Side by Side Diff: runtime/vm/debugger_api_impl_test.cc

Issue 9668036: Teach debugger to ignore breakpoints (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 8 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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
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
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
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
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
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
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
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
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
OLDNEW
« runtime/vm/debugger.cc ('K') | « runtime/vm/debugger.cc ('k') | runtime/vm/debugger_x64.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698