| 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" |
| 11 #include "vm/globals.h" | 11 #include "vm/globals.h" |
| 12 #include "vm/message_handler.h" | 12 #include "vm/message_handler.h" |
| 13 #include "vm/object_id_ring.h" | 13 #include "vm/object_id_ring.h" |
| 14 #include "vm/os.h" | 14 #include "vm/os.h" |
| 15 #include "vm/port.h" | 15 #include "vm/port.h" |
| 16 #include "vm/service.h" | 16 #include "vm/service.h" |
| 17 #include "vm/unit_test.h" | 17 #include "vm/unit_test.h" |
| 18 | 18 |
| 19 namespace dart { | 19 namespace dart { |
| 20 | 20 |
| 21 // This flag is used in the Service_Flags test below. |
| 22 DEFINE_FLAG(bool, service_testing_flag, false, "Comment"); |
| 23 |
| 21 class ServiceTestMessageHandler : public MessageHandler { | 24 class ServiceTestMessageHandler : public MessageHandler { |
| 22 public: | 25 public: |
| 23 ServiceTestMessageHandler() : _msg(NULL) {} | 26 ServiceTestMessageHandler() : _msg(NULL) {} |
| 24 | 27 |
| 25 ~ServiceTestMessageHandler() { | 28 ~ServiceTestMessageHandler() { |
| 26 free(_msg); | 29 free(_msg); |
| 27 } | 30 } |
| 28 | 31 |
| 29 bool HandleMessage(Message* message) { | 32 bool HandleMessage(Message* message) { |
| 30 if (_msg != NULL) { | 33 if (_msg != NULL) { |
| (...skipping 1027 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1058 Dart_Handle port = Api::NewHandle(isolate, SendPort::New(port_id)); | 1061 Dart_Handle port = Api::NewHandle(isolate, SendPort::New(port_id)); |
| 1059 EXPECT_VALID(port); | 1062 EXPECT_VALID(port); |
| 1060 EXPECT_VALID(Dart_SetField(lib, NewString("port"), port)); | 1063 EXPECT_VALID(Dart_SetField(lib, NewString("port"), port)); |
| 1061 | 1064 |
| 1062 Instance& service_msg = Instance::Handle(); | 1065 Instance& service_msg = Instance::Handle(); |
| 1063 service_msg = Eval(lib, "[port, ['vm'], [], []]"); | 1066 service_msg = Eval(lib, "[port, ['vm'], [], []]"); |
| 1064 | 1067 |
| 1065 Service::HandleRootMessage(service_msg); | 1068 Service::HandleRootMessage(service_msg); |
| 1066 handler.HandleNextMessage(); | 1069 handler.HandleNextMessage(); |
| 1067 EXPECT_SUBSTRING("\"type\":\"VM\",\"id\":\"vm\"", handler.msg()); | 1070 EXPECT_SUBSTRING("\"type\":\"VM\",\"id\":\"vm\"", handler.msg()); |
| 1068 EXPECT_SUBSTRING("\"architecture\"", handler.msg()); | 1071 EXPECT_SUBSTRING("\"targetCPU\"", handler.msg()); |
| 1072 EXPECT_SUBSTRING("\"hostCPU\"", handler.msg()); |
| 1069 EXPECT_SUBSTRING("\"version\"", handler.msg()); | 1073 EXPECT_SUBSTRING("\"version\"", handler.msg()); |
| 1070 EXPECT_SUBSTRING("\"uptime\"", handler.msg()); | 1074 EXPECT_SUBSTRING("\"uptime\"", handler.msg()); |
| 1071 EXPECT_SUBSTRING("\"isolates\"", handler.msg()); | 1075 EXPECT_SUBSTRING("\"isolates\"", handler.msg()); |
| 1072 } | 1076 } |
| 1073 | 1077 |
| 1074 | 1078 |
| 1079 TEST_CASE(Service_Flags) { |
| 1080 const char* kScript = |
| 1081 "var port;\n" // Set to our mock port by C++. |
| 1082 "\n" |
| 1083 "main() {\n" |
| 1084 "}"; |
| 1085 |
| 1086 Isolate* isolate = Isolate::Current(); |
| 1087 Dart_Handle lib = TestCase::LoadTestScript(kScript, NULL); |
| 1088 EXPECT_VALID(lib); |
| 1089 |
| 1090 // Build a mock message handler and wrap it in a dart port. |
| 1091 ServiceTestMessageHandler handler; |
| 1092 Dart_Port port_id = PortMap::CreatePort(&handler); |
| 1093 Dart_Handle port = Api::NewHandle(isolate, SendPort::New(port_id)); |
| 1094 EXPECT_VALID(port); |
| 1095 EXPECT_VALID(Dart_SetField(lib, NewString("port"), port)); |
| 1096 |
| 1097 Instance& service_msg = Instance::Handle(); |
| 1098 service_msg = Eval(lib, "[port, ['flags'], [], []]"); |
| 1099 |
| 1100 // Make sure we can get the FlagList. |
| 1101 Service::HandleRootMessage(service_msg); |
| 1102 handler.HandleNextMessage(); |
| 1103 EXPECT_SUBSTRING("\"type\":\"FlagList\",\"id\":\"flags\"", handler.msg()); |
| 1104 EXPECT_SUBSTRING( |
| 1105 "\"name\":\"service_testing_flag\",\"comment\":\"Comment\"," |
| 1106 "\"flagType\":\"bool\",\"valueAsString\":\"false\"", |
| 1107 handler.msg()); |
| 1108 |
| 1109 // Modify a flag through the vm service. |
| 1110 service_msg = Eval(lib, |
| 1111 "[port, ['flags', 'set'], " |
| 1112 "['name', 'value'], ['service_testing_flag', 'true']]"); |
| 1113 Service::HandleRootMessage(service_msg); |
| 1114 handler.HandleNextMessage(); |
| 1115 EXPECT_SUBSTRING("Success", handler.msg()); |
| 1116 |
| 1117 // Make sure that the flag changed. |
| 1118 service_msg = Eval(lib, "[port, ['flags'], [], []]"); |
| 1119 Service::HandleRootMessage(service_msg); |
| 1120 handler.HandleNextMessage(); |
| 1121 EXPECT_SUBSTRING( |
| 1122 "\"name\":\"service_testing_flag\",\"comment\":\"Comment\"," |
| 1123 "\"flagType\":\"bool\",\"valueAsString\":\"true\"", |
| 1124 handler.msg()); |
| 1125 } |
| 1126 |
| 1127 |
| 1075 TEST_CASE(Service_Scripts) { | 1128 TEST_CASE(Service_Scripts) { |
| 1076 const char* kScript = | 1129 const char* kScript = |
| 1077 "var port;\n" // Set to our mock port by C++. | 1130 "var port;\n" // Set to our mock port by C++. |
| 1078 "\n" | 1131 "\n" |
| 1079 "main() {\n" | 1132 "main() {\n" |
| 1080 "}"; | 1133 "}"; |
| 1081 | 1134 |
| 1082 Isolate* isolate = Isolate::Current(); | 1135 Isolate* isolate = Isolate::Current(); |
| 1083 Dart_Handle h_lib = TestCase::LoadTestScript(kScript, NULL); | 1136 Dart_Handle h_lib = TestCase::LoadTestScript(kScript, NULL); |
| 1084 EXPECT_VALID(h_lib); | 1137 EXPECT_VALID(h_lib); |
| (...skipping 353 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1438 service_msg = Eval(h_lib, "[port, ['profile'], ['tags'], ['hidden']]"); | 1491 service_msg = Eval(h_lib, "[port, ['profile'], ['tags'], ['hidden']]"); |
| 1439 Service::HandleIsolateMessage(isolate, service_msg); | 1492 Service::HandleIsolateMessage(isolate, service_msg); |
| 1440 handler.HandleNextMessage(); | 1493 handler.HandleNextMessage(); |
| 1441 // Expect error. | 1494 // Expect error. |
| 1442 EXPECT_SUBSTRING("\"type\":\"Error\"", handler.msg()); | 1495 EXPECT_SUBSTRING("\"type\":\"Error\"", handler.msg()); |
| 1443 } | 1496 } |
| 1444 | 1497 |
| 1445 #endif // !defined(TARGET_ARCH_ARM64) | 1498 #endif // !defined(TARGET_ARCH_ARM64) |
| 1446 | 1499 |
| 1447 } // namespace dart | 1500 } // namespace dart |
| OLD | NEW |