Chromium Code Reviews| 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 |