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

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

Issue 219333011: Change how we provide value previews in the vm service. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: fix tests / gen js Created 6 years, 8 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
« no previous file with comments | « runtime/vm/service.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 359 matching lines...) Expand 10 before | Expand all | Expand 10 after
370 370
371 Instance& service_msg = Instance::Handle(); 371 Instance& service_msg = Instance::Handle();
372 372
373 // null 373 // null
374 service_msg = Eval(lib, "[port, ['objects', 'null'], [], []]"); 374 service_msg = Eval(lib, "[port, ['objects', 'null'], [], []]");
375 Service::HandleIsolateMessage(isolate, service_msg); 375 Service::HandleIsolateMessage(isolate, service_msg);
376 handler.HandleNextMessage(); 376 handler.HandleNextMessage();
377 handler.filterMsg("name"); 377 handler.filterMsg("name");
378 EXPECT_STREQ( 378 EXPECT_STREQ(
379 "{\"type\":\"Null\",\"id\":\"objects\\/null\"," 379 "{\"type\":\"Null\",\"id\":\"objects\\/null\","
380 "\"preview\":\"null\"}", 380 "\"valueAsString\":\"null\"}",
381 handler.msg()); 381 handler.msg());
382 382
383 // not initialized 383 // not initialized
384 service_msg = Eval(lib, "[port, ['objects', 'not-initialized'], [], []]"); 384 service_msg = Eval(lib, "[port, ['objects', 'not-initialized'], [], []]");
385 Service::HandleIsolateMessage(isolate, service_msg); 385 Service::HandleIsolateMessage(isolate, service_msg);
386 handler.HandleNextMessage(); 386 handler.HandleNextMessage();
387 handler.filterMsg("name"); 387 handler.filterMsg("name");
388 EXPECT_STREQ( 388 EXPECT_STREQ(
389 "{\"type\":\"Null\",\"id\":\"objects\\/not-initialized\"," 389 "{\"type\":\"Null\",\"id\":\"objects\\/not-initialized\","
390 "\"preview\":\"<not initialized>\"}", 390 "\"valueAsString\":\"<not initialized>\"}",
391 handler.msg()); 391 handler.msg());
392 392
393 // being initialized 393 // being initialized
394 service_msg = Eval(lib, "[port, ['objects', 'being-initialized'], [], []]"); 394 service_msg = Eval(lib, "[port, ['objects', 'being-initialized'], [], []]");
395 Service::HandleIsolateMessage(isolate, service_msg); 395 Service::HandleIsolateMessage(isolate, service_msg);
396 handler.HandleNextMessage(); 396 handler.HandleNextMessage();
397 handler.filterMsg("name"); 397 handler.filterMsg("name");
398 EXPECT_STREQ( 398 EXPECT_STREQ(
399 "{\"type\":\"Null\",\"id\":\"objects\\/being-initialized\"," 399 "{\"type\":\"Null\",\"id\":\"objects\\/being-initialized\","
400 "\"preview\":\"<being initialized>\"}", 400 "\"valueAsString\":\"<being initialized>\"}",
401 handler.msg()); 401 handler.msg());
402 402
403 // optimized out 403 // optimized out
404 service_msg = Eval(lib, "[port, ['objects', 'optimized-out'], [], []]"); 404 service_msg = Eval(lib, "[port, ['objects', 'optimized-out'], [], []]");
405 Service::HandleIsolateMessage(isolate, service_msg); 405 Service::HandleIsolateMessage(isolate, service_msg);
406 handler.HandleNextMessage(); 406 handler.HandleNextMessage();
407 handler.filterMsg("name"); 407 handler.filterMsg("name");
408 EXPECT_STREQ( 408 EXPECT_STREQ(
409 "{\"type\":\"Null\",\"id\":\"objects\\/optimized-out\"," 409 "{\"type\":\"Null\",\"id\":\"objects\\/optimized-out\","
410 "\"preview\":\"<optimized out>\"}", 410 "\"valueAsString\":\"<optimized out>\"}",
411 handler.msg()); 411 handler.msg());
412 412
413 // collected 413 // collected
414 service_msg = Eval(lib, "[port, ['objects', 'collected'], [], []]"); 414 service_msg = Eval(lib, "[port, ['objects', 'collected'], [], []]");
415 Service::HandleIsolateMessage(isolate, service_msg); 415 Service::HandleIsolateMessage(isolate, service_msg);
416 handler.HandleNextMessage(); 416 handler.HandleNextMessage();
417 handler.filterMsg("name"); 417 handler.filterMsg("name");
418 EXPECT_STREQ( 418 EXPECT_STREQ(
419 "{\"type\":\"Null\",\"id\":\"objects\\/collected\"," 419 "{\"type\":\"Null\",\"id\":\"objects\\/collected\","
420 "\"preview\":\"<collected>\"}", 420 "\"valueAsString\":\"<collected>\"}",
421 handler.msg()); 421 handler.msg());
422 422
423 // expired 423 // expired
424 service_msg = Eval(lib, "[port, ['objects', 'expired'], [], []]"); 424 service_msg = Eval(lib, "[port, ['objects', 'expired'], [], []]");
425 Service::HandleIsolateMessage(isolate, service_msg); 425 Service::HandleIsolateMessage(isolate, service_msg);
426 handler.HandleNextMessage(); 426 handler.HandleNextMessage();
427 handler.filterMsg("name"); 427 handler.filterMsg("name");
428 EXPECT_STREQ( 428 EXPECT_STREQ(
429 "{\"type\":\"Null\",\"id\":\"objects\\/expired\"," 429 "{\"type\":\"Null\",\"id\":\"objects\\/expired\","
430 "\"preview\":\"<expired>\"}", 430 "\"valueAsString\":\"<expired>\"}",
431 handler.msg()); 431 handler.msg());
432 432
433 // bool 433 // bool
434 service_msg = Eval(lib, "[port, ['objects', 'bool-true'], [], []]"); 434 service_msg = Eval(lib, "[port, ['objects', 'bool-true'], [], []]");
435 Service::HandleIsolateMessage(isolate, service_msg); 435 Service::HandleIsolateMessage(isolate, service_msg);
436 handler.HandleNextMessage(); 436 handler.HandleNextMessage();
437 handler.filterMsg("name"); 437 handler.filterMsg("name");
438 EXPECT_STREQ( 438 EXPECT_STREQ(
439 "{\"type\":\"Bool\",\"id\":\"objects\\/bool-true\"," 439 "{\"type\":\"Bool\",\"id\":\"objects\\/bool-true\","
440 "\"class\":{\"type\":\"@Class\",\"id\":\"classes\\/46\"," 440 "\"class\":{\"type\":\"@Class\",\"id\":\"classes\\/46\","
441 "\"user_name\":\"bool\"},\"preview\":\"true\"}", 441 "\"user_name\":\"bool\"},\"valueAsString\":\"true\"}",
442 handler.msg()); 442 handler.msg());
443 443
444 // int 444 // int
445 service_msg = Eval(lib, "[port, ['objects', 'int-123'], [], []]"); 445 service_msg = Eval(lib, "[port, ['objects', 'int-123'], [], []]");
446 Service::HandleIsolateMessage(isolate, service_msg); 446 Service::HandleIsolateMessage(isolate, service_msg);
447 handler.HandleNextMessage(); 447 handler.HandleNextMessage();
448 handler.filterMsg("name"); 448 handler.filterMsg("name");
449 EXPECT_STREQ( 449 EXPECT_STREQ(
450 "{\"type\":\"Smi\",\"id\":\"objects\\/int-123\"," 450 "{\"type\":\"Smi\","
451 "\"class\":{\"type\":\"@Class\",\"id\":\"classes\\/42\"," 451 "\"class\":{\"type\":\"@Class\",\"id\":\"classes\\/42\","
452 "\"user_name\":\"int\"},\"preview\":\"123\"}", 452 "\"user_name\":\"int\"},"
453 "\"fields\":[],"
454 "\"id\":\"objects\\/int-123\","
455 "\"valueAsString\":\"123\"}",
453 handler.msg()); 456 handler.msg());
454 457
455 // object id ring / valid 458 // object id ring / valid
456 service_msg = Eval(lib, "[port, ['objects', '$validId'], [], []]"); 459 service_msg = Eval(lib, "[port, ['objects', '$validId'], [], []]");
457 Service::HandleIsolateMessage(isolate, service_msg); 460 Service::HandleIsolateMessage(isolate, service_msg);
458 handler.HandleNextMessage(); 461 handler.HandleNextMessage();
459 handler.filterMsg("name"); 462 handler.filterMsg("name");
460 handler.filterMsg("size"); 463 handler.filterMsg("size");
464 handler.filterMsg("id");
461 EXPECT_STREQ( 465 EXPECT_STREQ(
462 "{\"type\":\"String\"," 466 "{\"type\":\"String\","
463 "\"class\":{\"type\":\"@Class\",\"id\":\"classes\\/60\"," 467 "\"class\":{\"type\":\"@Class\","
464 "\"user_name\":\"String\"},\"fields\":[]," 468 "\"user_name\":\"String\"},\"fields\":[],"
465 "\"id\":\"objects\\/1\",\"preview\":\"\\\"value\\\"\"}", 469 "\"valueAsString\":\"\\\"value\\\"\"}",
466 handler.msg()); 470 handler.msg());
467 471
468 // object id ring / invalid => expired 472 // object id ring / invalid => expired
469 service_msg = Eval(lib, "[port, ['objects', '99999999'], [], []]"); 473 service_msg = Eval(lib, "[port, ['objects', '99999999'], [], []]");
470 Service::HandleIsolateMessage(isolate, service_msg); 474 Service::HandleIsolateMessage(isolate, service_msg);
471 handler.HandleNextMessage(); 475 handler.HandleNextMessage();
472 handler.filterMsg("name"); 476 handler.filterMsg("name");
473 EXPECT_STREQ( 477 EXPECT_STREQ(
474 "{\"type\":\"Null\",\"id\":\"objects\\/expired\"," 478 "{\"type\":\"Null\",\"id\":\"objects\\/expired\","
475 "\"preview\":\"<expired>\"}", 479 "\"valueAsString\":\"<expired>\"}",
476 handler.msg()); 480 handler.msg());
477 481
478 // expired/eval => error 482 // expired/eval => error
479 service_msg = Eval(lib, "[port, ['objects', 'expired', 'eval'], [], []]"); 483 service_msg = Eval(lib, "[port, ['objects', 'expired', 'eval'], [], []]");
480 Service::HandleIsolateMessage(isolate, service_msg); 484 Service::HandleIsolateMessage(isolate, service_msg);
481 handler.HandleNextMessage(); 485 handler.HandleNextMessage();
482 handler.filterMsg("name"); 486 handler.filterMsg("name");
483 EXPECT_STREQ( 487 EXPECT_STREQ(
484 "{\"type\":\"Error\",\"id\":\"\"," 488 "{\"type\":\"Error\",\"id\":\"\","
485 "\"message\":\"expected at most 2 arguments but found 3\\n\"," 489 "\"message\":\"expected at most 2 arguments but found 3\\n\","
486 "\"request\":{\"arguments\":[\"objects\",\"expired\",\"eval\"]," 490 "\"request\":{\"arguments\":[\"objects\",\"expired\",\"eval\"],"
487 "\"option_keys\":[],\"option_values\":[]}}", 491 "\"option_keys\":[],\"option_values\":[]}}",
488 handler.msg()); 492 handler.msg());
489 493
490 // int/eval => good 494 // int/eval => good
491 service_msg = Eval(lib, 495 service_msg = Eval(lib,
492 "[port, ['objects', 'int-123', 'eval'], " 496 "[port, ['objects', 'int-123', 'eval'], "
493 "['expr'], ['this+99']]"); 497 "['expr'], ['this+99']]");
494 Service::HandleIsolateMessage(isolate, service_msg); 498 Service::HandleIsolateMessage(isolate, service_msg);
495 handler.HandleNextMessage(); 499 handler.HandleNextMessage();
496 handler.filterMsg("name"); 500 handler.filterMsg("name");
497 EXPECT_STREQ( 501 EXPECT_STREQ(
498 "{\"type\":\"@Smi\",\"id\":\"objects\\/int-222\"," 502 "{\"type\":\"@Smi\","
499 "\"class\":{\"type\":\"@Class\",\"id\":\"classes\\/42\"," 503 "\"class\":{\"type\":\"@Class\",\"id\":\"classes\\/42\","
500 "\"user_name\":\"int\"},\"preview\":\"222\"}", 504 "\"user_name\":\"int\"},"
505 "\"id\":\"objects\\/int-222\","
506 "\"valueAsString\":\"222\"}",
501 handler.msg()); 507 handler.msg());
502 508
503 // eval returning null works 509 // eval returning null works
504 service_msg = Eval(lib, 510 service_msg = Eval(lib,
505 "[port, ['objects', 'int-123', 'eval'], " 511 "[port, ['objects', 'int-123', 'eval'], "
506 "['expr'], ['null']]"); 512 "['expr'], ['null']]");
507 Service::HandleIsolateMessage(isolate, service_msg); 513 Service::HandleIsolateMessage(isolate, service_msg);
508 handler.HandleNextMessage(); 514 handler.HandleNextMessage();
509 handler.filterMsg("name"); 515 handler.filterMsg("name");
510 EXPECT_STREQ( 516 EXPECT_STREQ(
511 "{\"type\":\"@Null\",\"id\":\"objects\\/null\",\"preview\":\"null\"}", 517 "{\"type\":\"@Null\",\"id\":\"objects\\/null\","
518 "\"valueAsString\":\"null\"}",
512 handler.msg()); 519 handler.msg());
513 520
514 // object id ring / invalid => expired 521 // object id ring / invalid => expired
515 service_msg = Eval(lib, "[port, ['objects', '99999999', 'eval'], " 522 service_msg = Eval(lib, "[port, ['objects', '99999999', 'eval'], "
516 "['expr'], ['this']]"); 523 "['expr'], ['this']]");
517 Service::HandleIsolateMessage(isolate, service_msg); 524 Service::HandleIsolateMessage(isolate, service_msg);
518 handler.HandleNextMessage(); 525 handler.HandleNextMessage();
519 handler.filterMsg("name"); 526 handler.filterMsg("name");
520 EXPECT_STREQ( 527 EXPECT_STREQ(
521 "{\"type\":\"Error\",\"id\":\"\",\"kind\":\"EvalExpired\"," 528 "{\"type\":\"Error\",\"id\":\"\",\"kind\":\"EvalExpired\","
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
585 EXPECT_SUBSTRING("\"url\":\"dart:test-lib\"", handler.msg()); 592 EXPECT_SUBSTRING("\"url\":\"dart:test-lib\"", handler.msg());
586 593
587 // Evaluate an expression from a library. 594 // Evaluate an expression from a library.
588 service_msg = EvalF(h_lib, 595 service_msg = EvalF(h_lib,
589 "[port, ['libraries', '%" Pd "', 'eval'], " 596 "[port, ['libraries', '%" Pd "', 'eval'], "
590 "['expr'], ['libVar - 1']]", lib_id); 597 "['expr'], ['libVar - 1']]", lib_id);
591 Service::HandleIsolateMessage(isolate, service_msg); 598 Service::HandleIsolateMessage(isolate, service_msg);
592 handler.HandleNextMessage(); 599 handler.HandleNextMessage();
593 handler.filterMsg("name"); 600 handler.filterMsg("name");
594 EXPECT_STREQ( 601 EXPECT_STREQ(
595 "{\"type\":\"@Smi\",\"id\":\"objects\\/int-54320\"," 602 "{\"type\":\"@Smi\","
596 "\"class\":{\"type\":\"@Class\",\"id\":\"classes\\/42\"," 603 "\"class\":{\"type\":\"@Class\",\"id\":\"classes\\/42\","
597 "\"user_name\":\"int\"},\"preview\":\"54320\"}", 604 "\"user_name\":\"int\"},\"id\":\"objects\\/int-54320\","
605 "\"valueAsString\":\"54320\"}",
598 handler.msg()); 606 handler.msg());
599 } 607 }
600 608
601 609
602 TEST_CASE(Service_Classes) { 610 TEST_CASE(Service_Classes) {
603 const char* kScript = 611 const char* kScript =
604 "var port;\n" // Set to our mock port by C++. 612 "var port;\n" // Set to our mock port by C++.
605 "\n" 613 "\n"
606 "class A {\n" 614 "class A {\n"
607 " var a;\n" 615 " var a;\n"
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
659 "\"id\":\"classes\\/%" Pd "\",\"name\":\"A\",", cid); 667 "\"id\":\"classes\\/%" Pd "\",\"name\":\"A\",", cid);
660 668
661 // Evaluate an expression from class A. 669 // Evaluate an expression from class A.
662 service_msg = EvalF(h_lib, 670 service_msg = EvalF(h_lib,
663 "[port, ['classes', '%" Pd "', 'eval'], " 671 "[port, ['classes', '%" Pd "', 'eval'], "
664 "['expr'], ['cobra + 100000']]", cid); 672 "['expr'], ['cobra + 100000']]", cid);
665 Service::HandleIsolateMessage(isolate, service_msg); 673 Service::HandleIsolateMessage(isolate, service_msg);
666 handler.HandleNextMessage(); 674 handler.HandleNextMessage();
667 handler.filterMsg("name"); 675 handler.filterMsg("name");
668 EXPECT_STREQ( 676 EXPECT_STREQ(
669 "{\"type\":\"@Smi\",\"id\":\"objects\\/int-111235\"," 677 "{\"type\":\"@Smi\","
670 "\"class\":{\"type\":\"@Class\",\"id\":\"classes\\/42\"," 678 "\"class\":{\"type\":\"@Class\",\"id\":\"classes\\/42\","
671 "\"user_name\":\"int\"},\"preview\":\"111235\"}", 679 "\"user_name\":\"int\"},"
680 "\"id\":\"objects\\/int-111235\","
681 "\"valueAsString\":\"111235\"}",
672 handler.msg()); 682 handler.msg());
673 683
674 // Request function 0 from class A. 684 // Request function 0 from class A.
675 service_msg = EvalF(h_lib, "[port, ['classes', '%" Pd "', 'functions', '0']," 685 service_msg = EvalF(h_lib, "[port, ['classes', '%" Pd "', 'functions', '0'],"
676 "[], []]", cid); 686 "[], []]", cid);
677 Service::HandleIsolateMessage(isolate, service_msg); 687 Service::HandleIsolateMessage(isolate, service_msg);
678 handler.HandleNextMessage(); 688 handler.HandleNextMessage();
679 EXPECT_SUBSTRING("\"type\":\"Function\"", handler.msg()); 689 EXPECT_SUBSTRING("\"type\":\"Function\"", handler.msg());
680 ExpectSubstringF(handler.msg(), 690 ExpectSubstringF(handler.msg(),
681 "\"id\":\"classes\\/%" Pd "\\/functions\\/0\"," 691 "\"id\":\"classes\\/%" Pd "\\/functions\\/0\","
(...skipping 638 matching lines...) Expand 10 before | Expand all | Expand 10 after
1320 EXPECT_SUBSTRING("\"type\":\"Profile\"", handler.msg()); 1330 EXPECT_SUBSTRING("\"type\":\"Profile\"", handler.msg());
1321 1331
1322 service_msg = Eval(h_lib, "[port, ['profile'], ['tags'], ['hidden']]"); 1332 service_msg = Eval(h_lib, "[port, ['profile'], ['tags'], ['hidden']]");
1323 Service::HandleIsolateMessage(isolate, service_msg); 1333 Service::HandleIsolateMessage(isolate, service_msg);
1324 handler.HandleNextMessage(); 1334 handler.HandleNextMessage();
1325 // Expect error. 1335 // Expect error.
1326 EXPECT_SUBSTRING("\"type\":\"Error\"", handler.msg()); 1336 EXPECT_SUBSTRING("\"type\":\"Error\"", handler.msg());
1327 } 1337 }
1328 1338
1329 } // namespace dart 1339 } // namespace dart
OLDNEW
« no previous file with comments | « runtime/vm/service.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698