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 1015 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1046 Service::HandleRootMessage(service_msg); | 1049 Service::HandleRootMessage(service_msg); |
1047 handler.HandleNextMessage(); | 1050 handler.HandleNextMessage(); |
1048 EXPECT_SUBSTRING("\"type\":\"VM\",\"id\":\"vm\"", handler.msg()); | 1051 EXPECT_SUBSTRING("\"type\":\"VM\",\"id\":\"vm\"", handler.msg()); |
1049 EXPECT_SUBSTRING("\"architecture\"", handler.msg()); | 1052 EXPECT_SUBSTRING("\"architecture\"", handler.msg()); |
1050 EXPECT_SUBSTRING("\"version\"", handler.msg()); | 1053 EXPECT_SUBSTRING("\"version\"", handler.msg()); |
1051 EXPECT_SUBSTRING("\"uptime\"", handler.msg()); | 1054 EXPECT_SUBSTRING("\"uptime\"", handler.msg()); |
1052 EXPECT_SUBSTRING("\"isolates\"", handler.msg()); | 1055 EXPECT_SUBSTRING("\"isolates\"", handler.msg()); |
1053 } | 1056 } |
1054 | 1057 |
1055 | 1058 |
| 1059 TEST_CASE(Service_Flags) { |
| 1060 const char* kScript = |
| 1061 "var port;\n" // Set to our mock port by C++. |
| 1062 "\n" |
| 1063 "main() {\n" |
| 1064 "}"; |
| 1065 |
| 1066 Isolate* isolate = Isolate::Current(); |
| 1067 Dart_Handle lib = TestCase::LoadTestScript(kScript, NULL); |
| 1068 EXPECT_VALID(lib); |
| 1069 |
| 1070 // Build a mock message handler and wrap it in a dart port. |
| 1071 ServiceTestMessageHandler handler; |
| 1072 Dart_Port port_id = PortMap::CreatePort(&handler); |
| 1073 Dart_Handle port = Api::NewHandle(isolate, SendPort::New(port_id)); |
| 1074 EXPECT_VALID(port); |
| 1075 EXPECT_VALID(Dart_SetField(lib, NewString("port"), port)); |
| 1076 |
| 1077 Instance& service_msg = Instance::Handle(); |
| 1078 service_msg = Eval(lib, "[port, ['flags'], [], []]"); |
| 1079 |
| 1080 // Make sure we can get the FlagList. |
| 1081 Service::HandleRootMessage(service_msg); |
| 1082 handler.HandleNextMessage(); |
| 1083 EXPECT_SUBSTRING("\"type\":\"FlagList\",\"id\":\"flags\"", handler.msg()); |
| 1084 EXPECT_SUBSTRING( |
| 1085 "\"name\":\"service_testing_flag\",\"comment\":\"Comment\"," |
| 1086 "\"flagType\":\"bool\",\"valueAsString\":\"false\"", |
| 1087 handler.msg()); |
| 1088 |
| 1089 // Modify a flag through the vm service. |
| 1090 service_msg = Eval(lib, |
| 1091 "[port, ['flags', 'set'], " |
| 1092 "['name', 'value'], ['service_testing_flag', 'true']]"); |
| 1093 Service::HandleRootMessage(service_msg); |
| 1094 handler.HandleNextMessage(); |
| 1095 EXPECT_SUBSTRING("Success", handler.msg()); |
| 1096 |
| 1097 // Make sure that the flag changed. |
| 1098 service_msg = Eval(lib, "[port, ['flags'], [], []]"); |
| 1099 Service::HandleRootMessage(service_msg); |
| 1100 handler.HandleNextMessage(); |
| 1101 EXPECT_SUBSTRING( |
| 1102 "\"name\":\"service_testing_flag\",\"comment\":\"Comment\"," |
| 1103 "\"flagType\":\"bool\",\"valueAsString\":\"true\"", |
| 1104 handler.msg()); |
| 1105 } |
| 1106 |
| 1107 |
1056 TEST_CASE(Service_Scripts) { | 1108 TEST_CASE(Service_Scripts) { |
1057 const char* kScript = | 1109 const char* kScript = |
1058 "var port;\n" // Set to our mock port by C++. | 1110 "var port;\n" // Set to our mock port by C++. |
1059 "\n" | 1111 "\n" |
1060 "main() {\n" | 1112 "main() {\n" |
1061 "}"; | 1113 "}"; |
1062 | 1114 |
1063 Isolate* isolate = Isolate::Current(); | 1115 Isolate* isolate = Isolate::Current(); |
1064 Dart_Handle h_lib = TestCase::LoadTestScript(kScript, NULL); | 1116 Dart_Handle h_lib = TestCase::LoadTestScript(kScript, NULL); |
1065 EXPECT_VALID(h_lib); | 1117 EXPECT_VALID(h_lib); |
(...skipping 353 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1419 service_msg = Eval(h_lib, "[port, ['profile'], ['tags'], ['hidden']]"); | 1471 service_msg = Eval(h_lib, "[port, ['profile'], ['tags'], ['hidden']]"); |
1420 Service::HandleIsolateMessage(isolate, service_msg); | 1472 Service::HandleIsolateMessage(isolate, service_msg); |
1421 handler.HandleNextMessage(); | 1473 handler.HandleNextMessage(); |
1422 // Expect error. | 1474 // Expect error. |
1423 EXPECT_SUBSTRING("\"type\":\"Error\"", handler.msg()); | 1475 EXPECT_SUBSTRING("\"type\":\"Error\"", handler.msg()); |
1424 } | 1476 } |
1425 | 1477 |
1426 #endif // !defined(TARGET_ARCH_ARM64) | 1478 #endif // !defined(TARGET_ARCH_ARM64) |
1427 | 1479 |
1428 } // namespace dart | 1480 } // namespace dart |
OLD | NEW |