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

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

Issue 547703002: Rework how types work in the VM Service. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: gen js Created 6 years, 3 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/protocol.md ('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 "platform/globals.h" 5 #include "platform/globals.h"
6 6
7 #include "include/dart_debugger_api.h" 7 #include "include/dart_debugger_api.h"
8 #include "vm/dart_api_impl.h" 8 #include "vm/dart_api_impl.h"
9 #include "vm/dart_entry.h" 9 #include "vm/dart_entry.h"
10 #include "vm/debugger.h" 10 #include "vm/debugger.h"
(...skipping 504 matching lines...) Expand 10 before | Expand all | Expand 10 after
515 Dart_Handle valid_id = Dart_NewInteger(arr_id); 515 Dart_Handle valid_id = Dart_NewInteger(arr_id);
516 EXPECT_VALID(valid_id); 516 EXPECT_VALID(valid_id);
517 EXPECT_VALID(Dart_SetField(lib, NewString("validId"), valid_id)); 517 EXPECT_VALID(Dart_SetField(lib, NewString("validId"), valid_id));
518 518
519 Array& service_msg = Array::Handle(); 519 Array& service_msg = Array::Handle();
520 520
521 // null 521 // null
522 service_msg = Eval(lib, "[0, port, ['objects', 'null'], [], []]"); 522 service_msg = Eval(lib, "[0, port, ['objects', 'null'], [], []]");
523 Service::HandleIsolateMessage(isolate, service_msg); 523 Service::HandleIsolateMessage(isolate, service_msg);
524 handler.HandleNextMessage(); 524 handler.HandleNextMessage();
525 handler.filterMsg("vmName"); 525 handler.filterMsg("_vmName");
526 EXPECT_SUBSTRING( 526 EXPECT_SUBSTRING(
527 "{\"type\":\"Null\",\"id\":\"objects\\/null\"," 527 "{\"type\":\"null\",\"id\":\"objects\\/null\","
528 "\"valueAsString\":\"null\",\"class\":", 528 "\"valueAsString\":\"null\",\"class\":",
529 handler.msg()); 529 handler.msg());
530 530
531 // not initialized 531 // not initialized
532 service_msg = Eval(lib, "[0, port, ['objects', 'not-initialized'], [], []]"); 532 service_msg = Eval(lib, "[0, port, ['objects', 'not-initialized'], [], []]");
533 Service::HandleIsolateMessage(isolate, service_msg); 533 Service::HandleIsolateMessage(isolate, service_msg);
534 handler.HandleNextMessage(); 534 handler.HandleNextMessage();
535 handler.filterMsg("vmName"); 535 handler.filterMsg("_vmName");
536 EXPECT_STREQ( 536 EXPECT_STREQ(
537 "{\"type\":\"Sentinel\",\"id\":\"objects\\/not-initialized\"," 537 "{\"type\":\"Sentinel\",\"id\":\"objects\\/not-initialized\","
538 "\"valueAsString\":\"<not initialized>\"}", 538 "\"valueAsString\":\"<not initialized>\"}",
539 handler.msg()); 539 handler.msg());
540 540
541 // being initialized 541 // being initialized
542 service_msg = Eval(lib, 542 service_msg = Eval(lib,
543 "[0, port, ['objects', 'being-initialized'], [], []]"); 543 "[0, port, ['objects', 'being-initialized'], [], []]");
544 Service::HandleIsolateMessage(isolate, service_msg); 544 Service::HandleIsolateMessage(isolate, service_msg);
545 handler.HandleNextMessage(); 545 handler.HandleNextMessage();
546 handler.filterMsg("vmName"); 546 handler.filterMsg("_vmName");
547 EXPECT_STREQ( 547 EXPECT_STREQ(
548 "{\"type\":\"Sentinel\",\"id\":\"objects\\/being-initialized\"," 548 "{\"type\":\"Sentinel\",\"id\":\"objects\\/being-initialized\","
549 "\"valueAsString\":\"<being initialized>\"}", 549 "\"valueAsString\":\"<being initialized>\"}",
550 handler.msg()); 550 handler.msg());
551 551
552 // optimized out 552 // optimized out
553 service_msg = Eval(lib, "[0, port, ['objects', 'optimized-out'], [], []]"); 553 service_msg = Eval(lib, "[0, port, ['objects', 'optimized-out'], [], []]");
554 Service::HandleIsolateMessage(isolate, service_msg); 554 Service::HandleIsolateMessage(isolate, service_msg);
555 handler.HandleNextMessage(); 555 handler.HandleNextMessage();
556 handler.filterMsg("vmName"); 556 handler.filterMsg("_vmName");
557 EXPECT_STREQ( 557 EXPECT_STREQ(
558 "{\"type\":\"Sentinel\",\"id\":\"objects\\/optimized-out\"," 558 "{\"type\":\"Sentinel\",\"id\":\"objects\\/optimized-out\","
559 "\"valueAsString\":\"<optimized out>\"}", 559 "\"valueAsString\":\"<optimized out>\"}",
560 handler.msg()); 560 handler.msg());
561 561
562 // collected 562 // collected
563 service_msg = Eval(lib, "[0, port, ['objects', 'collected'], [], []]"); 563 service_msg = Eval(lib, "[0, port, ['objects', 'collected'], [], []]");
564 Service::HandleIsolateMessage(isolate, service_msg); 564 Service::HandleIsolateMessage(isolate, service_msg);
565 handler.HandleNextMessage(); 565 handler.HandleNextMessage();
566 handler.filterMsg("vmName"); 566 handler.filterMsg("_vmName");
567 EXPECT_STREQ( 567 EXPECT_STREQ(
568 "{\"type\":\"Sentinel\",\"id\":\"objects\\/collected\"," 568 "{\"type\":\"Sentinel\",\"id\":\"objects\\/collected\","
569 "\"valueAsString\":\"<collected>\"}", 569 "\"valueAsString\":\"<collected>\"}",
570 handler.msg()); 570 handler.msg());
571 571
572 // expired 572 // expired
573 service_msg = Eval(lib, "[0, port, ['objects', 'expired'], [], []]"); 573 service_msg = Eval(lib, "[0, port, ['objects', 'expired'], [], []]");
574 Service::HandleIsolateMessage(isolate, service_msg); 574 Service::HandleIsolateMessage(isolate, service_msg);
575 handler.HandleNextMessage(); 575 handler.HandleNextMessage();
576 handler.filterMsg("vmName"); 576 handler.filterMsg("_vmName");
577 EXPECT_STREQ( 577 EXPECT_STREQ(
578 "{\"type\":\"Sentinel\",\"id\":\"objects\\/expired\"," 578 "{\"type\":\"Sentinel\",\"id\":\"objects\\/expired\","
579 "\"valueAsString\":\"<expired>\"}", 579 "\"valueAsString\":\"<expired>\"}",
580 handler.msg()); 580 handler.msg());
581 581
582 // bool 582 // bool
583 service_msg = Eval(lib, "[0, port, ['objects', 'bool-true'], [], []]"); 583 service_msg = Eval(lib, "[0, port, ['objects', 'bool-true'], [], []]");
584 Service::HandleIsolateMessage(isolate, service_msg); 584 Service::HandleIsolateMessage(isolate, service_msg);
585 handler.HandleNextMessage(); 585 handler.HandleNextMessage();
586 handler.filterMsg("vmName"); 586 handler.filterMsg("_vmName");
587 EXPECT_STREQ( 587 EXPECT_STREQ(
588 "{\"type\":\"Bool\",\"id\":\"objects\\/bool-true\"," 588 "{\"type\":\"bool\","
589 "\"class\":{\"type\":\"@Class\",\"id\":\"classes\\/46\"," 589 "\"class\":{\"type\":\"@Class\",\"id\":\"classes\\/46\","
590 "\"name\":\"bool\"},\"valueAsString\":\"true\"}", 590 "\"name\":\"bool\"},"
591 "\"size\":8,\"fields\":[],\"id\":\"objects\\/bool-true\","
592 "\"valueAsString\":\"true\"}",
591 handler.msg()); 593 handler.msg());
592 594
593 // int 595 // int
594 service_msg = Eval(lib, "[0, port, ['objects', 'int-123'], [], []]"); 596 service_msg = Eval(lib, "[0, port, ['objects', 'int-123'], [], []]");
595 Service::HandleIsolateMessage(isolate, service_msg); 597 Service::HandleIsolateMessage(isolate, service_msg);
596 handler.HandleNextMessage(); 598 handler.HandleNextMessage();
597 handler.filterMsg("vmName"); 599 handler.filterMsg("_vmName");
598 EXPECT_STREQ( 600 EXPECT_STREQ(
599 "{\"type\":\"Smi\"," 601 "{\"type\":\"int\",\"_vmType\":\"Smi\","
600 "\"class\":{\"type\":\"@Class\",\"id\":\"classes\\/42\"," 602 "\"class\":{\"type\":\"@Class\",\"id\":\"classes\\/42\","
601 "\"name\":\"_Smi\",}," 603 "\"name\":\"_Smi\",},"
602 "\"fields\":[]," 604 "\"fields\":[],"
603 "\"id\":\"objects\\/int-123\"," 605 "\"id\":\"objects\\/int-123\","
604 "\"valueAsString\":\"123\"}", 606 "\"valueAsString\":\"123\"}",
605 handler.msg()); 607 handler.msg());
606 608
607 // object id ring / valid 609 // object id ring / valid
608 service_msg = Eval(lib, "[0, port, ['objects', '$validId'], [], []]"); 610 service_msg = Eval(lib, "[0, port, ['objects', '$validId'], [], []]");
609 Service::HandleIsolateMessage(isolate, service_msg); 611 Service::HandleIsolateMessage(isolate, service_msg);
610 handler.HandleNextMessage(); 612 handler.HandleNextMessage();
611 handler.filterMsg("vmName"); 613 handler.filterMsg("_vmName");
612 handler.filterMsg("size"); 614 handler.filterMsg("size");
613 handler.filterMsg("id"); 615 handler.filterMsg("id");
614 EXPECT_STREQ( 616 EXPECT_STREQ(
615 "{\"type\":\"Array\"," 617 "{\"type\":\"List\",\"_vmType\":\"Array\","
616 "\"class\":{\"type\":\"@Class\",\"name\":\"_List\",}," 618 "\"class\":{\"type\":\"@Class\",\"name\":\"_List\",},"
617 "\"fields\":[]," 619 "\"fields\":[],"
618 "\"length\":1," 620 "\"length\":1,"
619 "\"elements\":[{" 621 "\"elements\":[{"
620 "\"index\":0," 622 "\"index\":0,"
621 "\"value\":{\"type\":\"@String\"," 623 "\"value\":{\"type\":\"@String\","
622 "\"class\":{\"type\":\"@Class\",\"name\":\"_OneByteString\",}," 624 "\"class\":{\"type\":\"@Class\",\"name\":\"_OneByteString\",},"
623 "\"valueAsString\":\"\\\"value\\\"\"}}]}", 625 "\"valueAsString\":\"\\\"value\\\"\"}}]}",
624 handler.msg()); 626 handler.msg());
625 627
626 // object id ring / invalid => expired 628 // object id ring / invalid => expired
627 service_msg = Eval(lib, "[0, port, ['objects', '99999999'], [], []]"); 629 service_msg = Eval(lib, "[0, port, ['objects', '99999999'], [], []]");
628 Service::HandleIsolateMessage(isolate, service_msg); 630 Service::HandleIsolateMessage(isolate, service_msg);
629 handler.HandleNextMessage(); 631 handler.HandleNextMessage();
630 handler.filterMsg("vmName"); 632 handler.filterMsg("_vmName");
631 EXPECT_STREQ( 633 EXPECT_STREQ(
632 "{\"type\":\"Sentinel\",\"id\":\"objects\\/expired\"," 634 "{\"type\":\"Sentinel\",\"id\":\"objects\\/expired\","
633 "\"valueAsString\":\"<expired>\"}", 635 "\"valueAsString\":\"<expired>\"}",
634 handler.msg()); 636 handler.msg());
635 637
636 // expired/eval => error 638 // expired/eval => error
637 service_msg = Eval(lib, "[0, port, ['objects', 'expired', 'eval'], [], []]"); 639 service_msg = Eval(lib, "[0, port, ['objects', 'expired', 'eval'], [], []]");
638 Service::HandleIsolateMessage(isolate, service_msg); 640 Service::HandleIsolateMessage(isolate, service_msg);
639 handler.HandleNextMessage(); 641 handler.HandleNextMessage();
640 handler.filterMsg("vmName"); 642 handler.filterMsg("_vmName");
641 EXPECT_STREQ( 643 EXPECT_STREQ(
642 "{\"type\":\"Error\",\"id\":\"\"," 644 "{\"type\":\"Error\",\"id\":\"\","
643 "\"message\":\"expected at most 2 arguments but found 3\\n\"," 645 "\"message\":\"expected at most 2 arguments but found 3\\n\","
644 "\"request\":{\"arguments\":[\"objects\",\"expired\",\"eval\"]," 646 "\"request\":{\"arguments\":[\"objects\",\"expired\",\"eval\"],"
645 "\"option_keys\":[],\"option_values\":[]}}", 647 "\"option_keys\":[],\"option_values\":[]}}",
646 handler.msg()); 648 handler.msg());
647 649
648 // int/eval => good 650 // int/eval => good
649 service_msg = Eval(lib, 651 service_msg = Eval(lib,
650 "[0, port, ['objects', 'int-123', 'eval'], " 652 "[0, port, ['objects', 'int-123', 'eval'], "
651 "['expr'], ['this+99']]"); 653 "['expr'], ['this+99']]");
652 Service::HandleIsolateMessage(isolate, service_msg); 654 Service::HandleIsolateMessage(isolate, service_msg);
653 handler.HandleNextMessage(); 655 handler.HandleNextMessage();
654 handler.filterMsg("vmName"); 656 handler.filterMsg("_vmName");
655 EXPECT_STREQ( 657 EXPECT_STREQ(
656 "{\"type\":\"@Smi\"," 658 "{\"type\":\"@int\",\"_vmType\":\"@Smi\","
657 "\"class\":{\"type\":\"@Class\",\"id\":\"classes\\/42\"," 659 "\"class\":{\"type\":\"@Class\",\"id\":\"classes\\/42\","
658 "\"name\":\"_Smi\",}," 660 "\"name\":\"_Smi\",},"
659 "\"id\":\"objects\\/int-222\"," 661 "\"id\":\"objects\\/int-222\","
660 "\"valueAsString\":\"222\"}", 662 "\"valueAsString\":\"222\"}",
661 handler.msg()); 663 handler.msg());
662 664
663 // eval returning null works 665 // eval returning null works
664 service_msg = Eval(lib, 666 service_msg = Eval(lib,
665 "[0, port, ['objects', 'int-123', 'eval'], " 667 "[0, port, ['objects', 'int-123', 'eval'], "
666 "['expr'], ['null']]"); 668 "['expr'], ['null']]");
667 Service::HandleIsolateMessage(isolate, service_msg); 669 Service::HandleIsolateMessage(isolate, service_msg);
668 handler.HandleNextMessage(); 670 handler.HandleNextMessage();
669 handler.filterMsg("vmName"); 671 handler.filterMsg("_vmName");
670 EXPECT_STREQ( 672 EXPECT_STREQ(
671 "{\"type\":\"@Null\",\"id\":\"objects\\/null\"," 673 "{\"type\":\"@null\",\"id\":\"objects\\/null\","
672 "\"valueAsString\":\"null\"}", 674 "\"valueAsString\":\"null\"}",
673 handler.msg()); 675 handler.msg());
674 676
675 // object id ring / invalid => expired 677 // object id ring / invalid => expired
676 service_msg = Eval(lib, "[0, port, ['objects', '99999999', 'eval'], " 678 service_msg = Eval(lib, "[0, port, ['objects', '99999999', 'eval'], "
677 "['expr'], ['this']]"); 679 "['expr'], ['this']]");
678 Service::HandleIsolateMessage(isolate, service_msg); 680 Service::HandleIsolateMessage(isolate, service_msg);
679 handler.HandleNextMessage(); 681 handler.HandleNextMessage();
680 handler.filterMsg("vmName"); 682 handler.filterMsg("_vmName");
681 EXPECT_STREQ( 683 EXPECT_STREQ(
682 "{\"type\":\"Error\",\"id\":\"\",\"kind\":\"EvalExpired\"," 684 "{\"type\":\"Error\",\"id\":\"\",\"kind\":\"EvalExpired\","
683 "\"message\":\"attempt to evaluate against expired object\\n\"," 685 "\"message\":\"attempt to evaluate against expired object\\n\","
684 "\"request\":{\"arguments\":[\"objects\",\"99999999\",\"eval\"]," 686 "\"request\":{\"arguments\":[\"objects\",\"99999999\",\"eval\"],"
685 "\"option_keys\":[\"expr\"],\"option_values\":[\"this\"]}}", 687 "\"option_keys\":[\"expr\"],\"option_values\":[\"this\"]}}",
686 handler.msg()); 688 handler.msg());
687 689
688 // Extra arg to eval. 690 // Extra arg to eval.
689 service_msg = Eval(lib, 691 service_msg = Eval(lib,
690 "[0, port, ['objects', 'int-123', 'eval', 'foo'], " 692 "[0, port, ['objects', 'int-123', 'eval', 'foo'], "
691 "['expr'], ['this+99']]"); 693 "['expr'], ['this+99']]");
692 Service::HandleIsolateMessage(isolate, service_msg); 694 Service::HandleIsolateMessage(isolate, service_msg);
693 handler.HandleNextMessage(); 695 handler.HandleNextMessage();
694 handler.filterMsg("vmName"); 696 handler.filterMsg("_vmName");
695 EXPECT_STREQ( 697 EXPECT_STREQ(
696 "{\"type\":\"Error\",\"id\":\"\"," 698 "{\"type\":\"Error\",\"id\":\"\","
697 "\"message\":\"expected at most 3 arguments but found 4\\n\"," 699 "\"message\":\"expected at most 3 arguments but found 4\\n\","
698 "\"request\":{\"arguments\":[\"objects\",\"int-123\",\"eval\",\"foo\"]," 700 "\"request\":{\"arguments\":[\"objects\",\"int-123\",\"eval\",\"foo\"],"
699 "\"option_keys\":[\"expr\"],\"option_values\":[\"this+99\"]}}", 701 "\"option_keys\":[\"expr\"],\"option_values\":[\"this+99\"]}}",
700 handler.msg()); 702 handler.msg());
701 703
702 // Retained by single instance. 704 // Retained by single instance.
703 service_msg = Eval(lib, 705 service_msg = Eval(lib,
704 "[0, port, ['objects', '$validId', 'retained'], [], []]"); 706 "[0, port, ['objects', '$validId', 'retained'], [], []]");
705 Service::HandleIsolateMessage(isolate, service_msg); 707 Service::HandleIsolateMessage(isolate, service_msg);
706 handler.HandleNextMessage(); 708 handler.HandleNextMessage();
707 handler.filterMsg("vmName"); 709 handler.filterMsg("_vmName");
708 ExpectSubstringF(handler.msg(), 710 ExpectSubstringF(handler.msg(),
709 "\"id\":\"objects\\/int-%" Pd "\"", 711 "\"id\":\"objects\\/int-%" Pd "\"",
710 arr.raw()->Size() + arr.At(0)->Size()); 712 arr.raw()->Size() + arr.At(0)->Size());
711 713
712 // Retaining path to 'arr', limit 1. 714 // Retaining path to 'arr', limit 1.
713 service_msg = Eval( 715 service_msg = Eval(
714 lib, 716 lib,
715 "[0, port, ['objects', '$validId', 'retaining_path'], ['limit'], ['1']]"); 717 "[0, port, ['objects', '$validId', 'retaining_path'], ['limit'], ['1']]");
716 Service::HandleIsolateMessage(isolate, service_msg); 718 Service::HandleIsolateMessage(isolate, service_msg);
717 handler.HandleNextMessage(); 719 handler.HandleNextMessage();
718 ExpectSubstringF( 720 ExpectSubstringF(
719 handler.msg(), 721 handler.msg(),
720 "{\"type\":\"RetainingPath\",\"id\":\"retaining_path\",\"length\":1," 722 "{\"type\":\"RetainingPath\",\"id\":\"retaining_path\",\"length\":1,"
721 "\"elements\":[{\"index\":0,\"value\":{\"type\":\"@Array\""); 723 "\"elements\":[{\"index\":0,\"value\":{\"type\":\"@List\"");
722 724
723 // Retaining path missing limit. 725 // Retaining path missing limit.
724 service_msg = Eval( 726 service_msg = Eval(
725 lib, 727 lib,
726 "[0, port, ['objects', '$validId', 'retaining_path'], [], []]"); 728 "[0, port, ['objects', '$validId', 'retaining_path'], [], []]");
727 Service::HandleIsolateMessage(isolate, service_msg); 729 Service::HandleIsolateMessage(isolate, service_msg);
728 handler.HandleNextMessage(); 730 handler.HandleNextMessage();
729 ExpectSubstringF(handler.msg(), "{\"type\":\"Error\""); 731 ExpectSubstringF(handler.msg(), "{\"type\":\"Error\"");
730 732
731 // eval against list containing an internal object. 733 // eval against list containing an internal object.
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after
846 lib, 848 lib,
847 "[0, port, ['objects', '$idElem', 'retaining_path'], ['limit'], ['2']]"); 849 "[0, port, ['objects', '$idElem', 'retaining_path'], ['limit'], ['2']]");
848 Service::HandleIsolateMessage(isolate, service_msg); 850 Service::HandleIsolateMessage(isolate, service_msg);
849 handler.HandleNextMessage(); 851 handler.HandleNextMessage();
850 ExpectSubstringF( 852 ExpectSubstringF(
851 handler.msg(), 853 handler.msg(),
852 "{\"type\":\"RetainingPath\",\"id\":\"retaining_path\",\"length\":2," 854 "{\"type\":\"RetainingPath\",\"id\":\"retaining_path\",\"length\":2,"
853 "\"elements\":[{\"index\":0,\"value\":{\"type\":\"@String\""); 855 "\"elements\":[{\"index\":0,\"value\":{\"type\":\"@String\"");
854 ExpectSubstringF(handler.msg(), "\"parentListIndex\":%" Pd, kElemIndex); 856 ExpectSubstringF(handler.msg(), "\"parentListIndex\":%" Pd, kElemIndex);
855 ExpectSubstringF(handler.msg(), 857 ExpectSubstringF(handler.msg(),
856 "{\"index\":1,\"value\":{\"type\":\"@Array\""); 858 "{\"index\":1,\"value\":{\"type\":\"@List\"");
857 } 859 }
858 860
859 861
860 TEST_CASE(Service_Libraries) { 862 TEST_CASE(Service_Libraries) {
861 const char* kScript = 863 const char* kScript =
862 "var port;\n" // Set to our mock port by C++. 864 "var port;\n" // Set to our mock port by C++.
863 "var libVar = 54321;\n" 865 "var libVar = 54321;\n"
864 "\n" 866 "\n"
865 "main() {\n" 867 "main() {\n"
866 "}"; 868 "}";
(...skipping 23 matching lines...) Expand all
890 EXPECT_SUBSTRING("\"type\":\"Library\"", handler.msg()); 892 EXPECT_SUBSTRING("\"type\":\"Library\"", handler.msg());
891 EXPECT_SUBSTRING("\"url\":\"test-lib\"", handler.msg()); 893 EXPECT_SUBSTRING("\"url\":\"test-lib\"", handler.msg());
892 894
893 // Evaluate an expression from a library. 895 // Evaluate an expression from a library.
894 service_msg = EvalF(lib, 896 service_msg = EvalF(lib,
895 "[0, port, ['libraries', '%" Pd "', 'eval'], " 897 "[0, port, ['libraries', '%" Pd "', 'eval'], "
896 "['expr'], ['libVar - 1']]", 898 "['expr'], ['libVar - 1']]",
897 vmlib.index()); 899 vmlib.index());
898 Service::HandleIsolateMessage(isolate, service_msg); 900 Service::HandleIsolateMessage(isolate, service_msg);
899 handler.HandleNextMessage(); 901 handler.HandleNextMessage();
900 handler.filterMsg("vmName"); 902 handler.filterMsg("_vmName");
901 EXPECT_STREQ( 903 EXPECT_STREQ(
902 "{\"type\":\"@Smi\"," 904 "{\"type\":\"@int\",\"_vmType\":\"@Smi\","
903 "\"class\":{\"type\":\"@Class\",\"id\":\"classes\\/42\"," 905 "\"class\":{\"type\":\"@Class\",\"id\":\"classes\\/42\","
904 "\"name\":\"_Smi\",},\"id\":\"objects\\/int-54320\"," 906 "\"name\":\"_Smi\",},\"id\":\"objects\\/int-54320\","
905 "\"valueAsString\":\"54320\"}", 907 "\"valueAsString\":\"54320\"}",
906 handler.msg()); 908 handler.msg());
907 } 909 }
908 910
909 911
910 TEST_CASE(Service_Classes) { 912 TEST_CASE(Service_Classes) {
911 const char* kScript = 913 const char* kScript =
912 "var port;\n" // Set to our mock port by C++. 914 "var port;\n" // Set to our mock port by C++.
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
969 ExpectSubstringF(handler.msg(), "\"allocationStats\":"); 971 ExpectSubstringF(handler.msg(), "\"allocationStats\":");
970 ExpectSubstringF(handler.msg(), "\"tokenPos\":"); 972 ExpectSubstringF(handler.msg(), "\"tokenPos\":");
971 ExpectSubstringF(handler.msg(), "\"endTokenPos\":"); 973 ExpectSubstringF(handler.msg(), "\"endTokenPos\":");
972 974
973 // Evaluate an expression from class A. 975 // Evaluate an expression from class A.
974 service_msg = EvalF(lib, 976 service_msg = EvalF(lib,
975 "[0, port, ['classes', '%" Pd "', 'eval'], " 977 "[0, port, ['classes', '%" Pd "', 'eval'], "
976 "['expr'], ['cobra + 100000']]", cid); 978 "['expr'], ['cobra + 100000']]", cid);
977 Service::HandleIsolateMessage(isolate, service_msg); 979 Service::HandleIsolateMessage(isolate, service_msg);
978 handler.HandleNextMessage(); 980 handler.HandleNextMessage();
979 handler.filterMsg("vmName"); 981 handler.filterMsg("_vmName");
980 EXPECT_STREQ( 982 EXPECT_STREQ(
981 "{\"type\":\"@Smi\"," 983 "{\"type\":\"@int\",\"_vmType\":\"@Smi\","
982 "\"class\":{\"type\":\"@Class\",\"id\":\"classes\\/42\"," 984 "\"class\":{\"type\":\"@Class\",\"id\":\"classes\\/42\","
983 "\"name\":\"_Smi\",}," 985 "\"name\":\"_Smi\",},"
984 "\"id\":\"objects\\/int-111235\"," 986 "\"id\":\"objects\\/int-111235\","
985 "\"valueAsString\":\"111235\"}", 987 "\"valueAsString\":\"111235\"}",
986 handler.msg()); 988 handler.msg());
987 989
988 // Request function 'b' from class A. 990 // Request function 'b' from class A.
989 service_msg = EvalF(lib, 991 service_msg = EvalF(lib,
990 "[0, port, ['classes', '%" Pd "', 'functions', 'b']," 992 "[0, port, ['classes', '%" Pd "', 'functions', 'b'],"
991 "[], []]", cid); 993 "[], []]", cid);
(...skipping 326 matching lines...) Expand 10 before | Expand all | Expand 10 after
1318 address); 1320 address);
1319 EXPECT_SUBSTRING(buffer, handler.msg()); 1321 EXPECT_SUBSTRING(buffer, handler.msg());
1320 } 1322 }
1321 1323
1322 // Request native code at address. Expect the null code object back. 1324 // Request native code at address. Expect the null code object back.
1323 address = last; 1325 address = last;
1324 service_msg = EvalF(lib, "[0, port, ['code', 'native-%" Px "'], [], []]", 1326 service_msg = EvalF(lib, "[0, port, ['code', 'native-%" Px "'], [], []]",
1325 address); 1327 address);
1326 Service::HandleIsolateMessage(isolate, service_msg); 1328 Service::HandleIsolateMessage(isolate, service_msg);
1327 handler.HandleNextMessage(); 1329 handler.HandleNextMessage();
1328 EXPECT_SUBSTRING("{\"type\":\"Null\",\"id\":\"objects\\/null\"," 1330 EXPECT_SUBSTRING("{\"type\":\"null\",\"id\":\"objects\\/null\","
1329 "\"valueAsString\":\"null\"", 1331 "\"valueAsString\":\"null\"",
1330 handler.msg()); 1332 handler.msg());
1331 1333
1332 // Request malformed native code. 1334 // Request malformed native code.
1333 service_msg = EvalF(lib, "[0, port, ['code', 'native%" Px "'], [], []]", 1335 service_msg = EvalF(lib, "[0, port, ['code', 'native%" Px "'], [], []]",
1334 address); 1336 address);
1335 Service::HandleIsolateMessage(isolate, service_msg); 1337 Service::HandleIsolateMessage(isolate, service_msg);
1336 handler.HandleNextMessage(); 1338 handler.HandleNextMessage();
1337 EXPECT_SUBSTRING("\"message\":\"Malformed code id:", handler.msg()); 1339 EXPECT_SUBSTRING("\"message\":\"Malformed code id:", handler.msg());
1338 } 1340 }
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
1371 EXPECT_VALID(Dart_SetField(lib, NewString("port"), port)); 1373 EXPECT_VALID(Dart_SetField(lib, NewString("port"), port));
1372 1374
1373 Array& service_msg = Array::Handle(); 1375 Array& service_msg = Array::Handle();
1374 1376
1375 // Fetch object. 1377 // Fetch object.
1376 service_msg = EvalF(lib, "[0, port, ['objects', '%" Pd "'], [], []]", id); 1378 service_msg = EvalF(lib, "[0, port, ['objects', '%" Pd "'], [], []]", id);
1377 Service::HandleIsolateMessage(isolate, service_msg); 1379 Service::HandleIsolateMessage(isolate, service_msg);
1378 handler.HandleNextMessage(); 1380 handler.HandleNextMessage();
1379 1381
1380 // Check type. 1382 // Check type.
1381 EXPECT_SUBSTRING("\"type\":\"TokenStream\"", handler.msg()); 1383 EXPECT_SUBSTRING("\"type\":\"Object\"", handler.msg());
1384 EXPECT_SUBSTRING("\"_vmType\":\"TokenStream\"", handler.msg());
1382 // Check for members array. 1385 // Check for members array.
1383 EXPECT_SUBSTRING("\"members\":[", handler.msg()); 1386 EXPECT_SUBSTRING("\"members\":[", handler.msg());
1384 } 1387 }
1385 1388
1386 1389
1387 TEST_CASE(Service_PcDescriptors) { 1390 TEST_CASE(Service_PcDescriptors) {
1388 const char* kScript = 1391 const char* kScript =
1389 "var port;\n" // Set to our mock port by C++. 1392 "var port;\n" // Set to our mock port by C++.
1390 "\n" 1393 "\n"
1391 "class A {\n" 1394 "class A {\n"
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
1430 EXPECT_VALID(port); 1433 EXPECT_VALID(port);
1431 EXPECT_VALID(Dart_SetField(lib, NewString("port"), port)); 1434 EXPECT_VALID(Dart_SetField(lib, NewString("port"), port));
1432 1435
1433 Array& service_msg = Array::Handle(); 1436 Array& service_msg = Array::Handle();
1434 1437
1435 // Fetch object. 1438 // Fetch object.
1436 service_msg = EvalF(lib, "[0, port, ['objects', '%" Pd "'], [], []]", id); 1439 service_msg = EvalF(lib, "[0, port, ['objects', '%" Pd "'], [], []]", id);
1437 Service::HandleIsolateMessage(isolate, service_msg); 1440 Service::HandleIsolateMessage(isolate, service_msg);
1438 handler.HandleNextMessage(); 1441 handler.HandleNextMessage();
1439 // Check type. 1442 // Check type.
1440 EXPECT_SUBSTRING("\"type\":\"PcDescriptors\"", handler.msg()); 1443 EXPECT_SUBSTRING("\"type\":\"Object\"", handler.msg());
1444 EXPECT_SUBSTRING("\"_vmType\":\"PcDescriptors\"", handler.msg());
1441 // Check for members array. 1445 // Check for members array.
1442 EXPECT_SUBSTRING("\"members\":[", handler.msg()); 1446 EXPECT_SUBSTRING("\"members\":[", handler.msg());
1443 } 1447 }
1444 1448
1445 1449
1446 TEST_CASE(Service_LocalVarDescriptors) { 1450 TEST_CASE(Service_LocalVarDescriptors) {
1447 const char* kScript = 1451 const char* kScript =
1448 "var port;\n" // Set to our mock port by C++. 1452 "var port;\n" // Set to our mock port by C++.
1449 "\n" 1453 "\n"
1450 "class A {\n" 1454 "class A {\n"
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
1489 EXPECT_VALID(port); 1493 EXPECT_VALID(port);
1490 EXPECT_VALID(Dart_SetField(lib, NewString("port"), port)); 1494 EXPECT_VALID(Dart_SetField(lib, NewString("port"), port));
1491 1495
1492 Array& service_msg = Array::Handle(); 1496 Array& service_msg = Array::Handle();
1493 1497
1494 // Fetch object. 1498 // Fetch object.
1495 service_msg = EvalF(lib, "[0, port, ['objects', '%" Pd "'], [], []]", id); 1499 service_msg = EvalF(lib, "[0, port, ['objects', '%" Pd "'], [], []]", id);
1496 Service::HandleIsolateMessage(isolate, service_msg); 1500 Service::HandleIsolateMessage(isolate, service_msg);
1497 handler.HandleNextMessage(); 1501 handler.HandleNextMessage();
1498 // Check type. 1502 // Check type.
1499 EXPECT_SUBSTRING("\"type\":\"LocalVarDescriptors\"", handler.msg()); 1503 EXPECT_SUBSTRING("\"type\":\"Object\"", handler.msg());
1504 EXPECT_SUBSTRING("\"_vmType\":\"LocalVarDescriptors\"", handler.msg());
1500 // Check for members array. 1505 // Check for members array.
1501 EXPECT_SUBSTRING("\"members\":[", handler.msg()); 1506 EXPECT_SUBSTRING("\"members\":[", handler.msg());
1502 } 1507 }
1503 1508
1504 1509
1505 TEST_CASE(Service_VM) { 1510 TEST_CASE(Service_VM) {
1506 const char* kScript = 1511 const char* kScript =
1507 "var port;\n" // Set to our mock port by C++. 1512 "var port;\n" // Set to our mock port by C++.
1508 "\n" 1513 "\n"
1509 "main() {\n" 1514 "main() {\n"
(...skipping 524 matching lines...) Expand 10 before | Expand all | Expand 10 after
2034 Service::HandleIsolateMessage(isolate, service_msg); 2039 Service::HandleIsolateMessage(isolate, service_msg);
2035 handler.HandleNextMessage(); 2040 handler.HandleNextMessage();
2036 EXPECT_SUBSTRING("\"type\":\"@String\"", handler.msg()); 2041 EXPECT_SUBSTRING("\"type\":\"@String\"", handler.msg());
2037 EXPECT_SUBSTRING("foobar", handler.msg()); 2042 EXPECT_SUBSTRING("foobar", handler.msg());
2038 } 2043 }
2039 // Expect null when no object is found. 2044 // Expect null when no object is found.
2040 service_msg = Eval(lib, "[0, port, ['address', '7'], [], []]"); 2045 service_msg = Eval(lib, "[0, port, ['address', '7'], [], []]");
2041 Service::HandleIsolateMessage(isolate, service_msg); 2046 Service::HandleIsolateMessage(isolate, service_msg);
2042 handler.HandleNextMessage(); 2047 handler.HandleNextMessage();
2043 // TODO(turnidge): Should this be a ServiceException instead? 2048 // TODO(turnidge): Should this be a ServiceException instead?
2044 EXPECT_STREQ("{\"type\":\"@Null\",\"id\":\"objects\\/null\"," 2049 EXPECT_STREQ("{\"type\":\"@null\",\"id\":\"objects\\/null\","
2045 "\"valueAsString\":\"null\"}", 2050 "\"valueAsString\":\"null\"}",
2046 handler.msg()); 2051 handler.msg());
2047 } 2052 }
2048 2053
2049 2054
2050 static const char* alpha_callback( 2055 static const char* alpha_callback(
2051 const char* name, 2056 const char* name,
2052 const char** arguments, 2057 const char** arguments,
2053 intptr_t num_arguments, 2058 intptr_t num_arguments,
2054 const char** option_keys, 2059 const char** option_keys,
(...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after
2189 service_msg = Eval(lib, "[0, port, ['profile'], ['tags'], ['hidden']]"); 2194 service_msg = Eval(lib, "[0, port, ['profile'], ['tags'], ['hidden']]");
2190 Service::HandleIsolateMessage(isolate, service_msg); 2195 Service::HandleIsolateMessage(isolate, service_msg);
2191 handler.HandleNextMessage(); 2196 handler.HandleNextMessage();
2192 // Expect error. 2197 // Expect error.
2193 EXPECT_SUBSTRING("\"type\":\"Error\"", handler.msg()); 2198 EXPECT_SUBSTRING("\"type\":\"Error\"", handler.msg());
2194 } 2199 }
2195 2200
2196 #endif // !defined(TARGET_ARCH_ARM64) 2201 #endif // !defined(TARGET_ARCH_ARM64)
2197 2202
2198 } // namespace dart 2203 } // namespace dart
OLDNEW
« no previous file with comments | « runtime/vm/service/protocol.md ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698