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 "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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 |
OLD | NEW |