| 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 |