Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2013, 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 "vm/dart_api_impl.h" | 6 #include "vm/dart_api_impl.h" |
| 7 #include "vm/dart_entry.h" | 7 #include "vm/dart_entry.h" |
| 8 #include "vm/debugger.h" | 8 #include "vm/debugger.h" |
| 9 #include "vm/globals.h" | 9 #include "vm/globals.h" |
| 10 #include "vm/message_handler.h" | 10 #include "vm/message_handler.h" |
| (...skipping 314 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 325 EXPECT_STREQ( | 325 EXPECT_STREQ( |
| 326 "{\"type\":\"Error\",\"text\":\"999999 is not a valid class id.\"," | 326 "{\"type\":\"Error\",\"text\":\"999999 is not a valid class id.\"," |
| 327 "\"message\":{\"arguments\":[\"classes\",\"999999\"]," | 327 "\"message\":{\"arguments\":[\"classes\",\"999999\"]," |
| 328 "\"option_keys\":[],\"option_values\":[]}}", handler.msg()); | 328 "\"option_keys\":[],\"option_values\":[]}}", handler.msg()); |
| 329 | 329 |
| 330 // Request the class A over the service. | 330 // Request the class A over the service. |
| 331 service_msg = EvalF(h_lib, "[port, ['classes', '%" Pd "'], [], []]", cid); | 331 service_msg = EvalF(h_lib, "[port, ['classes', '%" Pd "'], [], []]", cid); |
| 332 Service::HandleIsolateMessage(isolate, service_msg); | 332 Service::HandleIsolateMessage(isolate, service_msg); |
| 333 handler.HandleNextMessage(); | 333 handler.HandleNextMessage(); |
| 334 EXPECT_STREQ( | 334 EXPECT_STREQ( |
| 335 "{\"type\":\"Class\",\"id\":\"classes\\/1009\",\"name\":\"A\"," | 335 "{\"type\":\"Class\",\"id\":\"classes\\/1010\",\"name\":\"A\"," |
|
floitsch
2014/01/31 14:37:24
Lasse just committed a similar change.
You might n
Lasse Reichstein Nielsen
2014/01/31 18:19:26
I know :)
| |
| 336 "\"user_name\":\"A\",\"implemented\":false,\"abstract\":false," | 336 "\"user_name\":\"A\",\"implemented\":false,\"abstract\":false," |
| 337 "\"patch\":false,\"finalized\":true,\"const\":false,\"super\":" | 337 "\"patch\":false,\"finalized\":true,\"const\":false,\"super\":" |
| 338 "{\"type\":\"@Class\",\"id\":\"classes\\/35\",\"name\":\"Object\"," | 338 "{\"type\":\"@Class\",\"id\":\"classes\\/35\",\"name\":\"Object\"," |
| 339 "\"user_name\":\"Object\"},\"library\":{\"type\":\"@Library\",\"id\":" | 339 "\"user_name\":\"Object\"},\"library\":{\"type\":\"@Library\",\"id\":" |
| 340 "\"libraries\\/12\",\"name\":\"\",\"user_name\":\"dart:test-lib\"}," | 340 "\"libraries\\/12\",\"name\":\"\",\"user_name\":\"dart:test-lib\"}," |
| 341 "\"fields\":[{\"type\":\"@Field\",\"id\":\"classes\\/1009\\/fields\\/0\"," | 341 "\"fields\":[{\"type\":\"@Field\",\"id\":\"classes\\/1010\\/fields\\/0\"," |
| 342 "\"name\":\"a\",\"user_name\":\"a\",\"owner\":{\"type\":\"@Class\"," | 342 "\"name\":\"a\",\"user_name\":\"a\",\"owner\":{\"type\":\"@Class\"," |
| 343 "\"id\":\"classes\\/1009\",\"name\":\"A\",\"user_name\":\"A\"}," | 343 "\"id\":\"classes\\/1010\",\"name\":\"A\",\"user_name\":\"A\"}," |
| 344 "\"declared_type\":{\"type\":\"@Class\",\"id\":\"classes\\/106\"," | 344 "\"declared_type\":{\"type\":\"@Class\",\"id\":\"classes\\/106\"," |
| 345 "\"name\":\"dynamic\",\"user_name\":\"dynamic\"},\"static\":false," | 345 "\"name\":\"dynamic\",\"user_name\":\"dynamic\"},\"static\":false," |
| 346 "\"final\":false,\"const\":false}],\"functions\":[" | 346 "\"final\":false,\"const\":false}],\"functions\":[" |
| 347 "{\"type\":\"@Function\",\"id\":\"classes\\/1009\\/functions\\/0\"," | 347 "{\"type\":\"@Function\",\"id\":\"classes\\/1010\\/functions\\/0\"," |
| 348 "\"name\":\"get:a\",\"user_name\":\"A.a\"},{\"type\":\"@Function\"," | 348 "\"name\":\"get:a\",\"user_name\":\"A.a\"},{\"type\":\"@Function\"," |
| 349 "\"id\":\"classes\\/1009\\/functions\\/1\",\"name\":\"set:a\"," | 349 "\"id\":\"classes\\/1010\\/functions\\/1\",\"name\":\"set:a\"," |
| 350 "\"user_name\":\"A.a=\"},{\"type\":\"@Function\",\"id\":" | 350 "\"user_name\":\"A.a=\"},{\"type\":\"@Function\",\"id\":" |
| 351 "\"classes\\/1009\\/functions\\/2\",\"name\":\"b\",\"user_name\":\"A.b\"}" | 351 "\"classes\\/1010\\/functions\\/2\",\"name\":\"b\",\"user_name\":\"A.b\"}" |
| 352 ",{\"type\":\"@Function\",\"id\":\"classes\\/1009\\/functions\\/3\"," | 352 ",{\"type\":\"@Function\",\"id\":\"classes\\/1010\\/functions\\/3\"," |
| 353 "\"name\":\"c\",\"user_name\":\"A.c\"},{\"type\":\"@Function\",\"id\":" | 353 "\"name\":\"c\",\"user_name\":\"A.c\"},{\"type\":\"@Function\",\"id\":" |
| 354 "\"classes\\/1009\\/functions\\/4\",\"name\":\"A.\",\"user_name\":" | 354 "\"classes\\/1010\\/functions\\/4\",\"name\":\"A.\",\"user_name\":" |
| 355 "\"A.A\"}]}", | 355 "\"A.A\"}]}", |
| 356 handler.msg()); | 356 handler.msg()); |
| 357 | 357 |
| 358 // Request function 0 from class A. | 358 // Request function 0 from class A. |
| 359 service_msg = EvalF(h_lib, "[port, ['classes', '%" Pd "', 'functions', '0']," | 359 service_msg = EvalF(h_lib, "[port, ['classes', '%" Pd "', 'functions', '0']," |
| 360 "[], []]", cid); | 360 "[], []]", cid); |
| 361 Service::HandleIsolateMessage(isolate, service_msg); | 361 Service::HandleIsolateMessage(isolate, service_msg); |
| 362 handler.HandleNextMessage(); | 362 handler.HandleNextMessage(); |
| 363 EXPECT_STREQ( | 363 EXPECT_STREQ( |
| 364 "{\"type\":\"Function\",\"id\":\"classes\\/1009\\/functions\\/0\",\"name\":" | 364 "{\"type\":\"Function\",\"id\":\"classes\\/1010\\/functions\\/0\",\"name\":" |
| 365 "\"get:a\",\"user_name\":\"A.a\",\"is_static\":false,\"is_const\":false," | 365 "\"get:a\",\"user_name\":\"A.a\",\"is_static\":false,\"is_const\":false," |
| 366 "\"is_optimizable\":true,\"is_inlinable\":false,\"kind\":" | 366 "\"is_optimizable\":true,\"is_inlinable\":false,\"kind\":" |
| 367 "\"kImplicitGetter\",\"unoptimized_code\":{\"type\":\"null\"}," | 367 "\"kImplicitGetter\",\"unoptimized_code\":{\"type\":\"null\"}," |
| 368 "\"usage_counter\":0,\"optimized_call_site_count\":0,\"code\":" | 368 "\"usage_counter\":0,\"optimized_call_site_count\":0,\"code\":" |
| 369 "{\"type\":\"null\"},\"deoptimizations\":0}", handler.msg()); | 369 "{\"type\":\"null\"},\"deoptimizations\":0}", handler.msg()); |
| 370 | 370 |
| 371 // Request field 0 from class A. | 371 // Request field 0 from class A. |
| 372 service_msg = EvalF(h_lib, "[port, ['classes', '%" Pd "', 'fields', '0']," | 372 service_msg = EvalF(h_lib, "[port, ['classes', '%" Pd "', 'fields', '0']," |
| 373 "[], []]", cid); | 373 "[], []]", cid); |
| 374 Service::HandleIsolateMessage(isolate, service_msg); | 374 Service::HandleIsolateMessage(isolate, service_msg); |
| 375 handler.HandleNextMessage(); | 375 handler.HandleNextMessage(); |
| 376 EXPECT_STREQ( | 376 EXPECT_STREQ( |
| 377 "{\"type\":\"Field\",\"id\":\"classes\\/1009\\/fields\\/0\",\"name\":\"a\"," | 377 "{\"type\":\"Field\",\"id\":\"classes\\/1010\\/fields\\/0\",\"name\":\"a\"," |
| 378 "\"user_name\":\"a\",\"owner\":{\"type\":\"@Class\",\"id\":" | 378 "\"user_name\":\"a\",\"owner\":{\"type\":\"@Class\",\"id\":" |
| 379 "\"classes\\/1009\",\"name\":\"A\",\"user_name\":\"A\"},\"declared_type\":" | 379 "\"classes\\/1010\",\"name\":\"A\",\"user_name\":\"A\"},\"declared_type\":" |
| 380 "{\"type\":\"@Class\",\"id\":\"classes\\/106\",\"name\":\"dynamic\"," | 380 "{\"type\":\"@Class\",\"id\":\"classes\\/106\",\"name\":\"dynamic\"," |
| 381 "\"user_name\":\"dynamic\"},\"static\":false,\"final\":false,\"const\":" | 381 "\"user_name\":\"dynamic\"},\"static\":false,\"final\":false,\"const\":" |
| 382 "false,\"guard_nullable\":true,\"guard_class\":{\"type\":\"@Class\"," | 382 "false,\"guard_nullable\":true,\"guard_class\":{\"type\":\"@Class\"," |
| 383 "\"id\":\"classes\\/105\",\"name\":\"Null\",\"user_name\":\"Null\"}," | 383 "\"id\":\"classes\\/105\",\"name\":\"Null\",\"user_name\":\"Null\"}," |
| 384 "\"guard_length\":\"variable\"}", handler.msg()); | 384 "\"guard_length\":\"variable\"}", handler.msg()); |
| 385 | 385 |
| 386 // Invalid sub command. | 386 // Invalid sub command. |
| 387 service_msg = EvalF(h_lib, "[port, ['classes', '%" Pd "', 'huh', '0']," | 387 service_msg = EvalF(h_lib, "[port, ['classes', '%" Pd "', 'huh', '0']," |
| 388 "[], []]", cid); | 388 "[], []]", cid); |
| 389 Service::HandleIsolateMessage(isolate, service_msg); | 389 Service::HandleIsolateMessage(isolate, service_msg); |
| 390 handler.HandleNextMessage(); | 390 handler.HandleNextMessage(); |
| 391 EXPECT_STREQ( | 391 EXPECT_STREQ( |
| 392 "{\"type\":\"Error\",\"text\":\"Invalid sub collection huh\",\"message\":" | 392 "{\"type\":\"Error\",\"text\":\"Invalid sub collection huh\",\"message\":" |
| 393 "{\"arguments\":[\"classes\",\"1009\",\"huh\",\"0\"],\"option_keys\":[]," | 393 "{\"arguments\":[\"classes\",\"1010\",\"huh\",\"0\"],\"option_keys\":[]," |
| 394 "\"option_values\":[]}}", handler.msg()); | 394 "\"option_values\":[]}}", handler.msg()); |
| 395 | 395 |
| 396 // Invalid field request. | 396 // Invalid field request. |
| 397 service_msg = EvalF(h_lib, "[port, ['classes', '%" Pd "', 'fields', '9']," | 397 service_msg = EvalF(h_lib, "[port, ['classes', '%" Pd "', 'fields', '9']," |
| 398 "[], []]", cid); | 398 "[], []]", cid); |
| 399 Service::HandleIsolateMessage(isolate, service_msg); | 399 Service::HandleIsolateMessage(isolate, service_msg); |
| 400 handler.HandleNextMessage(); | 400 handler.HandleNextMessage(); |
| 401 EXPECT_STREQ( | 401 EXPECT_STREQ( |
| 402 "{\"type\":\"Error\",\"text\":\"Field 9 not found\"," | 402 "{\"type\":\"Error\",\"text\":\"Field 9 not found\"," |
| 403 "\"message\":{\"arguments\":[\"classes\",\"1009\",\"fields\",\"9\"]," | 403 "\"message\":{\"arguments\":[\"classes\",\"1010\",\"fields\",\"9\"]," |
| 404 "\"option_keys\":[],\"option_values\":[]}}", handler.msg()); | 404 "\"option_keys\":[],\"option_values\":[]}}", handler.msg()); |
| 405 | 405 |
| 406 // Invalid function request. | 406 // Invalid function request. |
| 407 service_msg = EvalF(h_lib, "[port, ['classes', '%" Pd "', 'functions', '9']," | 407 service_msg = EvalF(h_lib, "[port, ['classes', '%" Pd "', 'functions', '9']," |
| 408 "[], []]", cid); | 408 "[], []]", cid); |
| 409 Service::HandleIsolateMessage(isolate, service_msg); | 409 Service::HandleIsolateMessage(isolate, service_msg); |
| 410 handler.HandleNextMessage(); | 410 handler.HandleNextMessage(); |
| 411 EXPECT_STREQ( | 411 EXPECT_STREQ( |
| 412 "{\"type\":\"Error\",\"text\":\"Function 9 not found\"," | 412 "{\"type\":\"Error\",\"text\":\"Function 9 not found\"," |
| 413 "\"message\":{\"arguments\":[\"classes\",\"1009\",\"functions\",\"9\"]," | 413 "\"message\":{\"arguments\":[\"classes\",\"1010\",\"functions\",\"9\"]," |
| 414 "\"option_keys\":[],\"option_values\":[]}}", handler.msg()); | 414 "\"option_keys\":[],\"option_values\":[]}}", handler.msg()); |
| 415 | 415 |
| 416 | 416 |
| 417 // Invalid field subcommand. | 417 // Invalid field subcommand. |
| 418 service_msg = EvalF(h_lib, "[port, ['classes', '%" Pd "', 'fields', '9', 'x']" | 418 service_msg = EvalF(h_lib, "[port, ['classes', '%" Pd "', 'fields', '9', 'x']" |
| 419 ",[], []]", cid); | 419 ",[], []]", cid); |
| 420 Service::HandleIsolateMessage(isolate, service_msg); | 420 Service::HandleIsolateMessage(isolate, service_msg); |
| 421 handler.HandleNextMessage(); | 421 handler.HandleNextMessage(); |
| 422 EXPECT_STREQ( | 422 EXPECT_STREQ( |
| 423 "{\"type\":\"Error\",\"text\":\"Command too long\",\"message\":" | 423 "{\"type\":\"Error\",\"text\":\"Command too long\",\"message\":" |
| 424 "{\"arguments\":[\"classes\",\"1009\",\"fields\",\"9\",\"x\"]," | 424 "{\"arguments\":[\"classes\",\"1010\",\"fields\",\"9\",\"x\"]," |
| 425 "\"option_keys\":[],\"option_values\":[]}}", | 425 "\"option_keys\":[],\"option_values\":[]}}", |
| 426 handler.msg()); | 426 handler.msg()); |
| 427 | 427 |
| 428 // Invalid function request. | 428 // Invalid function request. |
| 429 service_msg = EvalF(h_lib, "[port, ['classes', '%" Pd "', 'functions', '9'," | 429 service_msg = EvalF(h_lib, "[port, ['classes', '%" Pd "', 'functions', '9'," |
| 430 "'x'], [], []]", cid); | 430 "'x'], [], []]", cid); |
| 431 Service::HandleIsolateMessage(isolate, service_msg); | 431 Service::HandleIsolateMessage(isolate, service_msg); |
| 432 handler.HandleNextMessage(); | 432 handler.HandleNextMessage(); |
| 433 EXPECT_STREQ( | 433 EXPECT_STREQ( |
| 434 "{\"type\":\"Error\",\"text\":\"Command too long\",\"message\":" | 434 "{\"type\":\"Error\",\"text\":\"Command too long\",\"message\":" |
| 435 "{\"arguments\":[\"classes\",\"1009\",\"functions\",\"9\",\"x\"]," | 435 "{\"arguments\":[\"classes\",\"1010\",\"functions\",\"9\",\"x\"]," |
| 436 "\"option_keys\":[],\"option_values\":[]}}", | 436 "\"option_keys\":[],\"option_values\":[]}}", |
| 437 handler.msg()); | 437 handler.msg()); |
| 438 } | 438 } |
| 439 | 439 |
| 440 | 440 |
| 441 TEST_CASE(Service_Code) { | 441 TEST_CASE(Service_Code) { |
| 442 const char* kScript = | 442 const char* kScript = |
| 443 "var port;\n" // Set to our mock port by C++. | 443 "var port;\n" // Set to our mock port by C++. |
| 444 "\n" | 444 "\n" |
| 445 "class A {\n" | 445 "class A {\n" |
| (...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 619 handler.HandleNextMessage(); | 619 handler.HandleNextMessage(); |
| 620 EXPECT_SUBSTRING( | 620 EXPECT_SUBSTRING( |
| 621 "{\"source\":\"dart:test-lib\",\"script\":{" | 621 "{\"source\":\"dart:test-lib\",\"script\":{" |
| 622 "\"type\":\"@Script\",\"id\":\"scripts\\/dart%3Atest-lib\"," | 622 "\"type\":\"@Script\",\"id\":\"scripts\\/dart%3Atest-lib\"," |
| 623 "\"name\":\"dart:test-lib\",\"user_name\":\"dart:test-lib\"," | 623 "\"name\":\"dart:test-lib\",\"user_name\":\"dart:test-lib\"," |
| 624 "\"kind\":\"script\"},\"hits\":" | 624 "\"kind\":\"script\"},\"hits\":" |
| 625 "[3,0,3,1,5,1,5,1,5,1,6,1,6,1]}", handler.msg()); | 625 "[3,0,3,1,5,1,5,1,5,1,6,1,6,1]}", handler.msg()); |
| 626 } | 626 } |
| 627 | 627 |
| 628 } // namespace dart | 628 } // namespace dart |
| OLD | NEW |