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 531 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1870 Service::HandleIsolateMessage(isolate, service_msg); | 1872 Service::HandleIsolateMessage(isolate, service_msg); |
1871 handler.HandleNextMessage(); | 1873 handler.HandleNextMessage(); |
1872 EXPECT_SUBSTRING("\"type\":\"@String\"", handler.msg()); | 1874 EXPECT_SUBSTRING("\"type\":\"@String\"", handler.msg()); |
1873 EXPECT_SUBSTRING("foobar", handler.msg()); | 1875 EXPECT_SUBSTRING("foobar", handler.msg()); |
1874 } | 1876 } |
1875 // Expect null when no object is found. | 1877 // Expect null when no object is found. |
1876 service_msg = Eval(lib, "[0, port, ['address', '7'], [], []]"); | 1878 service_msg = Eval(lib, "[0, port, ['address', '7'], [], []]"); |
1877 Service::HandleIsolateMessage(isolate, service_msg); | 1879 Service::HandleIsolateMessage(isolate, service_msg); |
1878 handler.HandleNextMessage(); | 1880 handler.HandleNextMessage(); |
1879 // TODO(turnidge): Should this be a ServiceException instead? | 1881 // TODO(turnidge): Should this be a ServiceException instead? |
1880 EXPECT_STREQ("{\"type\":\"@Null\",\"id\":\"objects\\/null\"," | 1882 EXPECT_STREQ("{\"type\":\"@null\",\"id\":\"objects\\/null\"," |
1881 "\"valueAsString\":\"null\"}", | 1883 "\"valueAsString\":\"null\"}", |
1882 handler.msg()); | 1884 handler.msg()); |
1883 } | 1885 } |
1884 | 1886 |
1885 | 1887 |
1886 static const char* alpha_callback( | 1888 static const char* alpha_callback( |
1887 const char* name, | 1889 const char* name, |
1888 const char** arguments, | 1890 const char** arguments, |
1889 intptr_t num_arguments, | 1891 intptr_t num_arguments, |
1890 const char** option_keys, | 1892 const char** option_keys, |
(...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2025 service_msg = Eval(lib, "[0, port, ['profile'], ['tags'], ['hidden']]"); | 2027 service_msg = Eval(lib, "[0, port, ['profile'], ['tags'], ['hidden']]"); |
2026 Service::HandleIsolateMessage(isolate, service_msg); | 2028 Service::HandleIsolateMessage(isolate, service_msg); |
2027 handler.HandleNextMessage(); | 2029 handler.HandleNextMessage(); |
2028 // Expect error. | 2030 // Expect error. |
2029 EXPECT_SUBSTRING("\"type\":\"Error\"", handler.msg()); | 2031 EXPECT_SUBSTRING("\"type\":\"Error\"", handler.msg()); |
2030 } | 2032 } |
2031 | 2033 |
2032 #endif // !defined(TARGET_ARCH_ARM64) | 2034 #endif // !defined(TARGET_ARCH_ARM64) |
2033 | 2035 |
2034 } // namespace dart | 2036 } // namespace dart |
OLD | NEW |