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 |