Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(141)

Unified Diff: runtime/vm/service_test.cc

Issue 823403004: Begin migrating the vm service from a rest-style interface to a json-rpc style interface. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: remove old-style standalone tests. Created 5 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « runtime/vm/service/vmservice.dart ('k') | tests/standalone/vmservice/isolate_class_test.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/vm/service_test.cc
diff --git a/runtime/vm/service_test.cc b/runtime/vm/service_test.cc
index e77eded68441cd27ce3ceada63f48a456e591be6..ffb46af3b6a4efc82958169af9a814511512d28c 100644
--- a/runtime/vm/service_test.cc
+++ b/runtime/vm/service_test.cc
@@ -213,277 +213,6 @@ TEST_CASE(Service_Isolate) {
}
-TEST_CASE(Service_StackTrace) {
- // TODO(turnidge): Extend this test to cover a non-trivial stack trace.
- const char* kScript =
- "var port;\n" // Set to our mock port by C++.
- "\n"
- "main() {\n"
- "}";
-
- Isolate* isolate = Isolate::Current();
- Dart_Handle lib = TestCase::LoadTestScript(kScript, NULL);
- EXPECT_VALID(lib);
-
- // Build a mock message handler and wrap it in a dart port.
- ServiceTestMessageHandler handler;
- Dart_Port port_id = PortMap::CreatePort(&handler);
- Dart_Handle port = Api::NewHandle(isolate, SendPort::New(port_id));
- EXPECT_VALID(port);
- EXPECT_VALID(Dart_SetField(lib, NewString("port"), port));
-
- Array& service_msg = Array::Handle();
-
- // Get the stacktrace.
- service_msg = Eval(lib, "[0, port, ['stacktrace'], [], []]");
- Service::HandleIsolateMessage(isolate, service_msg);
- handler.HandleNextMessage();
- EXPECT_STREQ(
- "{\"type\":\"StackTrace\",\"id\":\"stacktrace\",\"members\":[]}",
- handler.msg());
-
- // Malformed request.
- service_msg = Eval(lib, "[0, port, ['stacktrace', 'jamboree'], [], []]");
- Service::HandleIsolateMessage(isolate, service_msg);
- handler.HandleNextMessage();
- EXPECT_STREQ(
- "{\"type\":\"Error\",\"id\":\"\",\"message\":\"Command too long\","
- "\"request\":{\"arguments\":[\"stacktrace\",\"jamboree\"],"
- "\"option_keys\":[],\"option_values\":[]}}",
- handler.msg());
-}
-
-
-TEST_CASE(Service_DebugBreakpoints) {
- const char* kScript =
- "var port;\n" // Set to our mock port by C++.
- "\n"
- "main() {\n" // We set breakpoint here.
- "}";
-
- Isolate* isolate = Isolate::Current();
- Dart_Handle lib = TestCase::LoadTestScript(kScript, NULL);
- EXPECT_VALID(lib);
- Library& vmlib = Library::Handle();
- vmlib ^= Api::UnwrapHandle(lib);
- EXPECT(!vmlib.IsNull());
-
- // Build a mock message handler and wrap it in a dart port.
- ServiceTestMessageHandler handler;
- Dart_Port port_id = PortMap::CreatePort(&handler);
- Dart_Handle port = Api::NewHandle(isolate, SendPort::New(port_id));
- EXPECT_VALID(port);
- EXPECT_VALID(Dart_SetField(lib, NewString("port"), port));
-
- Array& service_msg = Array::Handle();
-
- // Add a breakpoint.
- service_msg = EvalF(lib,
- "[0, port, ['libraries', '%" Pd "', "
- "'scripts', 'test-lib', 'setBreakpoint'], "
- "['line'], ['3']]",
- vmlib.index());
- Service::HandleIsolateMessage(isolate, service_msg);
- handler.HandleNextMessage();
- ExpectSubstringF(
- handler.msg(),
- "{\"type\":\"Breakpoint\",\"id\":\"debug\\/breakpoints\\/1\","
- "\"breakpointNumber\":1,\"enabled\":true,\"resolved\":false,"
- "\"location\":{\"type\":\"Location\","
- "\"script\":{\"type\":\"@Script\","
- "\"id\":\"libraries\\/%" Pd "\\/scripts\\/test-lib\","
- "\"name\":\"test-lib\",\"kind\":\"script\"},"
- "\"tokenPos\":5}}",
- vmlib.index());
-
- // Get the breakpoint list.
- service_msg = Eval(lib, "[0, port, ['debug', 'breakpoints'], [], []]");
- Service::HandleIsolateMessage(isolate, service_msg);
- handler.HandleNextMessage();
- ExpectSubstringF(
- handler.msg(),
- "{\"type\":\"BreakpointList\",\"id\":\"debug\\/breakpoints\","
- "\"breakpoints\":["
- "{\"type\":\"Breakpoint\",\"id\":\"debug\\/breakpoints\\/1\","
- "\"breakpointNumber\":1,\"enabled\":true,\"resolved\":false,"
- "\"location\":{\"type\":\"Location\","
- "\"script\":{\"type\":\"@Script\","
- "\"id\":\"libraries\\/%" Pd "\\/scripts\\/test-lib\","
- "\"name\":\"test-lib\",\"kind\":\"script\"},"
- "\"tokenPos\":5}}]}",
- vmlib.index());
-
- // Lookup individual breakpoint.
- service_msg = Eval(lib, "[0, port, ['debug', 'breakpoints', '1'], [], []]");
- Service::HandleIsolateMessage(isolate, service_msg);
- handler.HandleNextMessage();
- ExpectSubstringF(
- handler.msg(),
- "{\"type\":\"Breakpoint\",\"id\":\"debug\\/breakpoints\\/1\","
- "\"breakpointNumber\":1,\"enabled\":true,\"resolved\":false,"
- "\"location\":{\"type\":\"Location\","
- "\"script\":{\"type\":\"@Script\","
- "\"id\":\"libraries\\/%" Pd "\\/scripts\\/test-lib\","
- "\"name\":\"test-lib\",\"kind\":\"script\"},"
- "\"tokenPos\":5}}",
- vmlib.index());
-
- // Unrecognized breakpoint subcommand.
- service_msg =
- Eval(lib, "[0, port, ['debug', 'breakpoints', '1', 'green'], [], []]");
- Service::HandleIsolateMessage(isolate, service_msg);
- handler.HandleNextMessage();
- EXPECT_STREQ("{\"type\":\"Error\",\"id\":\"\","
- "\"message\":\"Unrecognized subcommand: green\","
- "\"request\":{\"arguments\":[\"debug\",\"breakpoints\","
- "\"1\",\"green\"],"
- "\"option_keys\":[],\"option_values\":[]}}",
- handler.msg());
-
- // Clear breakpoint.
- service_msg =
- Eval(lib, "[0, port, ['debug', 'breakpoints', '1', 'clear'], [], []]");
- Service::HandleIsolateMessage(isolate, service_msg);
- handler.HandleNextMessage();
- EXPECT_STREQ("{\"type\":\"Success\",\"id\":\"\"}",
- handler.msg());
-
- // Get the breakpoint list.
- service_msg = Eval(lib, "[0, port, ['debug', 'breakpoints'], [], []]");
- Service::HandleIsolateMessage(isolate, service_msg);
- handler.HandleNextMessage();
- EXPECT_STREQ(
- "{\"type\":\"BreakpointList\",\"id\":\"debug\\/breakpoints\","
- "\"breakpoints\":[]}",
- handler.msg());
-
- // Missing sub-command.
- service_msg = Eval(lib, "[0, port, ['debug'], [], []]");
- Service::HandleIsolateMessage(isolate, service_msg);
- handler.HandleNextMessage();
- EXPECT_STREQ(
- "{\"type\":\"Error\",\"id\":\"\","
- "\"message\":\"Must specify a subcommand\","
- "\"request\":{\"arguments\":[\"debug\"],\"option_keys\":[],"
- "\"option_values\":[]}}",
- handler.msg());
-
- // Unrecognized breakpoint.
- service_msg = Eval(lib,
- "[0, port, ['debug', 'breakpoints', '1111'], [], []]");
- Service::HandleIsolateMessage(isolate, service_msg);
- handler.HandleNextMessage();
- EXPECT_STREQ("{\"type\":\"Error\",\"id\":\"\","
- "\"message\":\"Unrecognized breakpoint id: 1111\","
- "\"request\":{"
- "\"arguments\":[\"debug\",\"breakpoints\",\"1111\"],"
- "\"option_keys\":[],\"option_values\":[]}}",
- handler.msg());
-
- // Unrecognized subcommand.
- service_msg = Eval(lib, "[0, port, ['debug', 'nosferatu'], [], []]");
- Service::HandleIsolateMessage(isolate, service_msg);
- handler.HandleNextMessage();
- EXPECT_STREQ("{\"type\":\"Error\",\"id\":\"\","
- "\"message\":\"Unrecognized subcommand 'nosferatu'\","
- "\"request\":{\"arguments\":[\"debug\",\"nosferatu\"],"
- "\"option_keys\":[],\"option_values\":[]}}",
- handler.msg());
-}
-
-
-// Globals used to communicate with HandlerPausedEvent.
-static intptr_t pause_line_number = 0;
-static Dart_Handle saved_lib;
-static ServiceTestMessageHandler* saved_handler = NULL;
-
-static void HandlePausedEvent(Dart_IsolateId isolate_id,
- intptr_t bp_id,
- const Dart_CodeLocation& loc) {
- Isolate* isolate = Isolate::Current();
- Debugger* debugger = isolate->debugger();
-
- // The debugger knows that it is paused, and why.
- EXPECT(debugger->IsPaused());
- const DebuggerEvent* event = debugger->PauseEvent();
- EXPECT(event != NULL);
- EXPECT(event->type() == DebuggerEvent::kBreakpointReached);
-
- // Save the last line number seen by this handler.
- pause_line_number = event->top_frame()->LineNumber();
-
- // Single step
- Array& service_msg = Array::Handle();
- service_msg = Eval(saved_lib,
- "[0, port, ['debug', 'resume'], "
- "['step'], ['into']]");
- Service::HandleIsolateMessage(isolate, service_msg);
- saved_handler->HandleNextMessage();
- EXPECT_STREQ("{\"type\":\"Success\",\"id\":\"\"}",
- saved_handler->msg());
-}
-
-
-TEST_CASE(Service_Stepping) {
- const char* kScript =
- "var port;\n" // Set to our mock port by C++.
- "var value = 0;\n"
- "\n"
- "main() {\n" // We set breakpoint here.
- " value++;\n"
- " value++;\n"
- " value++;\n"
- "}"; // We step up to here.
-
- Isolate* isolate = Isolate::Current();
- Dart_Handle lib = TestCase::LoadTestScript(kScript, NULL);
- EXPECT_VALID(lib);
- Library& vmlib = Library::Handle();
- vmlib ^= Api::UnwrapHandle(lib);
- EXPECT(!vmlib.IsNull());
- saved_lib = lib;
-
- // Build a mock message handler and wrap it in a dart port.
- ServiceTestMessageHandler handler;
- saved_handler = &handler;
- Dart_Port port_id = PortMap::CreatePort(&handler);
- Dart_Handle port = Api::NewHandle(isolate, SendPort::New(port_id));
- EXPECT_VALID(port);
- EXPECT_VALID(Dart_SetField(lib, NewString("port"), port));
-
- Array& service_msg = Array::Handle();
-
- // Add a breakpoint.
- service_msg = EvalF(lib,
- "[0, port, ['libraries', '%" Pd "', "
- "'scripts', 'test-lib', 'setBreakpoint'], "
- "['line'], ['4']]",
- vmlib.index());
- Service::HandleIsolateMessage(isolate, service_msg);
- handler.HandleNextMessage();
- ExpectSubstringF(
- handler.msg(),
- "{\"type\":\"Breakpoint\",\"id\":\"debug\\/breakpoints\\/1\","
- "\"breakpointNumber\":1,\"enabled\":true,\"resolved\":false,"
- "\"location\":{\"type\":\"Location\","
- "\"script\":{\"type\":\"@Script\","
- "\"id\":\"libraries\\/%" Pd "\\/scripts\\/test-lib\","
- "\"name\":\"test-lib\",\"kind\":\"script\"},"
- "\"tokenPos\":11}}",
- vmlib.index());
-
- pause_line_number = -1;
- Dart_SetPausedEventHandler(HandlePausedEvent);
-
- // Run the program.
- Dart_Handle result = Dart_Invoke(lib, NewString("main"), 0, NULL);
- EXPECT_VALID(result);
-
- // We were able to step to the last line in main.
- EXPECT_EQ(8, pause_line_number);
-}
-
-
TEST_CASE(Service_Objects) {
// TODO(turnidge): Extend this test to cover a non-trivial stack trace.
const char* kScript =
@@ -636,75 +365,11 @@ TEST_CASE(Service_Objects) {
"\"valueAsString\":\"<expired>\"}",
handler.msg());
- // expired/eval => error
- service_msg = Eval(lib, "[0, port, ['objects', 'expired', 'eval'], [], []]");
- Service::HandleIsolateMessage(isolate, service_msg);
- handler.HandleNextMessage();
- handler.filterMsg("_vmName");
- EXPECT_STREQ(
- "{\"type\":\"Error\",\"id\":\"\","
- "\"message\":\"expected at most 2 arguments but found 3\\n\","
- "\"request\":{\"arguments\":[\"objects\",\"expired\",\"eval\"],"
- "\"option_keys\":[],\"option_values\":[]}}",
- handler.msg());
-
- // int/eval => good
- service_msg = Eval(lib,
- "[0, port, ['objects', 'int-123', 'eval'], "
- "['expr'], ['this+99']]");
- Service::HandleIsolateMessage(isolate, service_msg);
- handler.HandleNextMessage();
- handler.filterMsg("_vmName");
- EXPECT_STREQ(
- "{\"type\":\"@int\",\"_vmType\":\"@Smi\","
- "\"class\":{\"type\":\"@Class\",\"id\":\"classes\\/42\","
- "\"name\":\"_Smi\",},"
- "\"id\":\"objects\\/int-222\","
- "\"valueAsString\":\"222\"}",
- handler.msg());
-
- // eval returning null works
- service_msg = Eval(lib,
- "[0, port, ['objects', 'int-123', 'eval'], "
- "['expr'], ['null']]");
- Service::HandleIsolateMessage(isolate, service_msg);
- handler.HandleNextMessage();
- handler.filterMsg("_vmName");
- EXPECT_STREQ(
- "{\"type\":\"@null\",\"id\":\"objects\\/null\","
- "\"valueAsString\":\"null\"}",
- handler.msg());
-
- // object id ring / invalid => expired
- service_msg = Eval(lib, "[0, port, ['objects', '99999999', 'eval'], "
- "['expr'], ['this']]");
- Service::HandleIsolateMessage(isolate, service_msg);
- handler.HandleNextMessage();
- handler.filterMsg("_vmName");
- EXPECT_STREQ(
- "{\"type\":\"Error\",\"id\":\"\",\"kind\":\"EvalExpired\","
- "\"message\":\"attempt to evaluate against expired object\\n\","
- "\"request\":{\"arguments\":[\"objects\",\"99999999\",\"eval\"],"
- "\"option_keys\":[\"expr\"],\"option_values\":[\"this\"]}}",
- handler.msg());
-
- // Extra arg to eval.
- service_msg = Eval(lib,
- "[0, port, ['objects', 'int-123', 'eval', 'foo'], "
- "['expr'], ['this+99']]");
- Service::HandleIsolateMessage(isolate, service_msg);
- handler.HandleNextMessage();
- handler.filterMsg("_vmName");
- EXPECT_STREQ(
- "{\"type\":\"Error\",\"id\":\"\","
- "\"message\":\"expected at most 3 arguments but found 4\\n\","
- "\"request\":{\"arguments\":[\"objects\",\"int-123\",\"eval\",\"foo\"],"
- "\"option_keys\":[\"expr\"],\"option_values\":[\"this+99\"]}}",
- handler.msg());
-
// Retained by single instance.
- service_msg = Eval(lib,
- "[0, port, ['objects', '$validId', 'retained'], [], []]");
+ service_msg = Eval(
+ lib,
+ "[0, port, 'getRetainedSize', "
+ "['targetId'], ['objects/$validId']]");
Service::HandleIsolateMessage(isolate, service_msg);
handler.HandleNextMessage();
handler.filterMsg("_vmName");
@@ -715,35 +380,23 @@ TEST_CASE(Service_Objects) {
// Retaining path to 'arr', limit 1.
service_msg = Eval(
lib,
- "[0, port, ['objects', '$validId', 'retaining_path'], ['limit'], ['1']]");
+ "[0, port, 'getRetainingPath', "
+ "['targetId', 'limit'], ['objects/$validId', '1']]");
Service::HandleIsolateMessage(isolate, service_msg);
handler.HandleNextMessage();
ExpectSubstringF(
handler.msg(),
- "{\"type\":\"RetainingPath\",\"id\":\"retaining_path\",\"length\":1,"
+ "{\"type\":\"RetainingPath\",\"length\":1,"
"\"elements\":[{\"index\":0,\"value\":{\"type\":\"@List\"");
// Retaining path missing limit.
service_msg = Eval(
lib,
- "[0, port, ['objects', '$validId', 'retaining_path'], [], []]");
+ "[0, port, 'getRetainingPath', "
+ "['targetId'], ['objects/$validId']]");
Service::HandleIsolateMessage(isolate, service_msg);
handler.HandleNextMessage();
ExpectSubstringF(handler.msg(), "{\"type\":\"Error\"");
-
- // eval against list containing an internal object.
- Object& internal_object = Object::Handle();
- internal_object = LiteralToken::New();
- arr.SetAt(0, internal_object);
- service_msg = Eval(lib,
- "[0, port, ['objects', '$validId', 'eval'], "
- "['expr'], ['toString()']]");
- Service::HandleIsolateMessage(isolate, service_msg);
- handler.HandleNextMessage();
- ExpectSubstringF(handler.msg(), "\"type\":\"Error\"");
- ExpectSubstringF(
- handler.msg(),
- "\"message\":\"attempt to evaluate against internal VM object\\n\"");
}
@@ -817,12 +470,13 @@ TEST_CASE(Service_RetainingPath) {
// Retaining path to 'foo0', limit 2.
service_msg = Eval(
lib,
- "[0, port, ['objects', '$id0', 'retaining_path'], ['limit'], ['2']]");
+ "[0, port, 'getRetainingPath', "
+ "['targetId', 'limit'], ['objects/$id0', '2']]");
Service::HandleIsolateMessage(isolate, service_msg);
handler.HandleNextMessage();
ExpectSubstringF(
handler.msg(),
- "{\"type\":\"RetainingPath\",\"id\":\"retaining_path\",\"length\":2,"
+ "{\"type\":\"RetainingPath\",\"length\":2,"
"\"elements\":[{\"index\":0,\"value\":{\"type\":\"@String\"");
ExpectSubstringF(handler.msg(), "\"parentField\":{\"type\":\"@Field\"");
ExpectSubstringF(handler.msg(), "\"name\":\"f0\"");
@@ -832,12 +486,13 @@ TEST_CASE(Service_RetainingPath) {
// Retaining path to 'foo1', limit 2.
service_msg = Eval(
lib,
- "[0, port, ['objects', '$id1', 'retaining_path'], ['limit'], ['2']]");
+ "[0, port, 'getRetainingPath', "
+ "['targetId', 'limit'], ['objects/$id1', '2']]");
Service::HandleIsolateMessage(isolate, service_msg);
handler.HandleNextMessage();
ExpectSubstringF(
handler.msg(),
- "{\"type\":\"RetainingPath\",\"id\":\"retaining_path\",\"length\":2,"
+ "{\"type\":\"RetainingPath\",\"length\":2,"
"\"elements\":[{\"index\":0,\"value\":{\"type\":\"@String\"");
ExpectSubstringF(handler.msg(), "\"parentField\":{\"type\":\"@Field\"");
ExpectSubstringF(handler.msg(), "\"name\":\"f1\"");
@@ -847,12 +502,13 @@ TEST_CASE(Service_RetainingPath) {
// Retaining path to 'elem', limit 2.
service_msg = Eval(
lib,
- "[0, port, ['objects', '$idElem', 'retaining_path'], ['limit'], ['2']]");
+ "[0, port, 'getRetainingPath', "
+ "['targetId', 'limit'], ['objects/$idElem', '2']]");
Service::HandleIsolateMessage(isolate, service_msg);
handler.HandleNextMessage();
ExpectSubstringF(
handler.msg(),
- "{\"type\":\"RetainingPath\",\"id\":\"retaining_path\",\"length\":2,"
+ "{\"type\":\"RetainingPath\",\"length\":2,"
"\"elements\":[{\"index\":0,\"value\":{\"type\":\"@String\"");
ExpectSubstringF(handler.msg(), "\"parentListIndex\":%" Pd, kElemIndex);
ExpectSubstringF(handler.msg(),
@@ -892,21 +548,6 @@ TEST_CASE(Service_Libraries) {
handler.HandleNextMessage();
EXPECT_SUBSTRING("\"type\":\"Library\"", handler.msg());
EXPECT_SUBSTRING("\"url\":\"test-lib\"", handler.msg());
-
- // Evaluate an expression from a library.
- service_msg = EvalF(lib,
- "[0, port, ['libraries', '%" Pd "', 'eval'], "
- "['expr'], ['libVar - 1']]",
- vmlib.index());
- Service::HandleIsolateMessage(isolate, service_msg);
- handler.HandleNextMessage();
- handler.filterMsg("_vmName");
- EXPECT_STREQ(
- "{\"type\":\"@int\",\"_vmType\":\"@Smi\","
- "\"class\":{\"type\":\"@Class\",\"id\":\"classes\\/42\","
- "\"name\":\"_Smi\",},\"id\":\"objects\\/int-54320\","
- "\"valueAsString\":\"54320\"}",
- handler.msg());
}
@@ -957,7 +598,7 @@ TEST_CASE(Service_Classes) {
Service::HandleIsolateMessage(isolate, service_msg);
handler.HandleNextMessage();
EXPECT_STREQ(
- "{\"type\":\"Error\",\"id\":\"\","
+ "{\"type\":\"Error\","
"\"message\":\"999999 is not a valid class id.\","
"\"request\":{\"arguments\":[\"classes\",\"999999\"],"
"\"option_keys\":[],\"option_values\":[]}}", handler.msg());
@@ -973,21 +614,6 @@ TEST_CASE(Service_Classes) {
ExpectSubstringF(handler.msg(), "\"tokenPos\":");
ExpectSubstringF(handler.msg(), "\"endTokenPos\":");
- // Evaluate an expression from class A.
- service_msg = EvalF(lib,
- "[0, port, ['classes', '%" Pd "', 'eval'], "
- "['expr'], ['cobra + 100000']]", cid);
- Service::HandleIsolateMessage(isolate, service_msg);
- handler.HandleNextMessage();
- handler.filterMsg("_vmName");
- EXPECT_STREQ(
- "{\"type\":\"@int\",\"_vmType\":\"@Smi\","
- "\"class\":{\"type\":\"@Class\",\"id\":\"classes\\/42\","
- "\"name\":\"_Smi\",},"
- "\"id\":\"objects\\/int-111235\","
- "\"valueAsString\":\"111235\"}",
- handler.msg());
-
// Request function 'b' from class A.
service_msg = EvalF(lib,
"[0, port, ['classes', '%" Pd "', 'functions', 'b'],"
@@ -1015,7 +641,7 @@ TEST_CASE(Service_Classes) {
Service::HandleIsolateMessage(isolate, service_msg);
handler.HandleNextMessage();
ExpectSubstringF(handler.msg(),
- "{\"type\":\"Error\",\"id\":\"\",\"message\":\"Invalid sub collection huh\""
+ "{\"type\":\"Error\",\"message\":\"Invalid sub collection huh\""
",\"request\":"
"{\"arguments\":[\"classes\",\"%" Pd "\",\"huh\",\"0\"],\"option_keys\":[],"
"\"option_values\":[]}}", cid);
@@ -1026,7 +652,7 @@ TEST_CASE(Service_Classes) {
Service::HandleIsolateMessage(isolate, service_msg);
handler.HandleNextMessage();
ExpectSubstringF(handler.msg(),
- "{\"type\":\"Error\",\"id\":\"\",\"message\":\"Field 9 not found\","
+ "{\"type\":\"Error\",\"message\":\"Field 9 not found\","
"\"request\":{\"arguments\":[\"classes\",\"%" Pd "\",\"fields\",\"9\"],"
"\"option_keys\":[],\"option_values\":[]}}", cid);
@@ -1037,7 +663,7 @@ TEST_CASE(Service_Classes) {
Service::HandleIsolateMessage(isolate, service_msg);
handler.HandleNextMessage();
ExpectSubstringF(handler.msg(),
- "{\"type\":\"Error\",\"id\":\"\",\"message\":\"Function 9 not found\","
+ "{\"type\":\"Error\",\"message\":\"Function 9 not found\","
"\"request\":{\"arguments\":[\"classes\",\"%" Pd "\",\"functions\",\"9\"],"
"\"option_keys\":[],\"option_values\":[]}}", cid);
@@ -1049,7 +675,7 @@ TEST_CASE(Service_Classes) {
Service::HandleIsolateMessage(isolate, service_msg);
handler.HandleNextMessage();
ExpectSubstringF(handler.msg(),
- "{\"type\":\"Error\",\"id\":\"\",\"message\":\"Command too long\","
+ "{\"type\":\"Error\",\"message\":\"Command too long\","
"\"request\":"
"{\"arguments\":[\"classes\",\"%" Pd "\",\"fields\",\"9\",\"x\"],"
"\"option_keys\":[],\"option_values\":[]}}", cid);
@@ -1061,7 +687,7 @@ TEST_CASE(Service_Classes) {
Service::HandleIsolateMessage(isolate, service_msg);
handler.HandleNextMessage();
ExpectSubstringF(handler.msg(),
- "{\"type\":\"Error\",\"id\":\"\","
+ "{\"type\":\"Error\","
"\"message\":\"Command should have 4 or 5 arguments\","
"\"request\":"
"{\"arguments\":[\"classes\",\"%" Pd "\",\"functions\",\"0\",\"x\",\"y\"],"
@@ -1074,7 +700,7 @@ TEST_CASE(Service_Classes) {
Service::HandleIsolateMessage(isolate, service_msg);
handler.HandleNextMessage();
ExpectSubstringF(handler.msg(),
- "{\"type\":\"Error\",\"id\":\"\",\"message\":\"Invalid sub command x\","
+ "{\"type\":\"Error\",\"message\":\"Invalid sub command x\","
"\"request\":"
"{\"arguments\":[\"classes\",\"%" Pd "\",\"functions\",\"b\",\"x\"],"
"\"option_keys\":[],\"option_values\":[]}}", cid);
@@ -1084,16 +710,17 @@ TEST_CASE(Service_Classes) {
EXPECT(!class_b.IsNull());
const Instance& b0 = Instance::Handle(Instance::New(class_b));
const Instance& b1 = Instance::Handle(Instance::New(class_b));
- service_msg = EvalF(lib, "[0, port, ['classes', '%" Pd "', 'retained'],"
- "[], []]", class_b.id());
+ service_msg = EvalF(lib, "[0, port, 'getRetainedSize', "
+ "['targetId'], ['classes/%" Pd "']]", class_b.id());
Service::HandleIsolateMessage(isolate, service_msg);
handler.HandleNextMessage();
ExpectSubstringF(handler.msg(),
"\"id\":\"objects\\/int-%" Pd "\"",
b0.raw()->Size() + b1.raw()->Size());
// ... and list the instances of class B.
- service_msg = EvalF(lib, "[0, port, ['classes', '%" Pd "', 'instances'],"
- "['limit'], ['3']]", class_b.id());
+ service_msg = EvalF(lib, "[0, port, 'getInstances', "
+ "['classId', 'limit'], ['classes/%" Pd "', '3']]",
+ class_b.id());
Service::HandleIsolateMessage(isolate, service_msg);
handler.HandleNextMessage();
ExpectSubstringF(handler.msg(), "\"type\":\"InstanceSet\"");
@@ -1111,8 +738,9 @@ TEST_CASE(Service_Classes) {
EXPECT((list.At(0) == b0.raw() && list.At(1) == b1.raw()) ||
(list.At(0) == b1.raw() && list.At(1) == b0.raw()));
// ... and if limit is 1, we one get one of them.
- service_msg = EvalF(lib, "[0, port, ['classes', '%" Pd "', 'instances'],"
- "['limit'], ['1']]", class_b.id());
+ service_msg = EvalF(lib, "[0, port, 'getInstances', "
+ "['classId', 'limit'], ['classes/%" Pd "', '1']]",
+ class_b.id());
Service::HandleIsolateMessage(isolate, service_msg);
handler.HandleNextMessage();
ExpectSubstringF(handler.msg(), "\"totalCount\":2");
@@ -1307,7 +935,7 @@ TEST_CASE(Service_Types) {
Service::HandleIsolateMessage(isolate, service_msg);
handler.HandleNextMessage();
ExpectSubstringF(handler.msg(),
- "{\"type\":\"Error\",\"id\":\"\","
+ "{\"type\":\"Error\","
"\"message\":\"Canonical type 42 not found\""
",\"request\":"
"{\"arguments\":[\"classes\",\"%" Pd "\",\"types\",\"42\"],"
@@ -1383,7 +1011,7 @@ TEST_CASE(Service_Code) {
Service::HandleIsolateMessage(isolate, service_msg);
handler.HandleNextMessage();
EXPECT_STREQ(
- "{\"type\":\"Error\",\"id\":\"\",\"message\":\"Malformed code id: 0\","
+ "{\"type\":\"Error\",\"message\":\"Malformed code id: 0\","
"\"request\":{\"arguments\":[\"code\",\"0\"],"
"\"option_keys\":[],\"option_values\":[]}}", handler.msg());
@@ -1755,281 +1383,6 @@ TEST_CASE(Service_Scripts) {
}
-// TODO(zra): Remove when tests are ready to enable.
-#if !defined(TARGET_ARCH_ARM64)
-
-TEST_CASE(Service_Coverage) {
- const char* kScript =
- "var port;\n" // Set to our mock port by C++.
- "\n"
- "var x = 7;\n"
- "main() {\n"
- " x = x * x;\n"
- " x = x / 13;\n"
- "}";
-
- Isolate* isolate = Isolate::Current();
- Dart_Handle lib = TestCase::LoadTestScript(kScript, NULL);
- EXPECT_VALID(lib);
- Library& vmlib = Library::Handle();
- vmlib ^= Api::UnwrapHandle(lib);
- EXPECT(!vmlib.IsNull());
- Dart_Handle result = Dart_Invoke(lib, NewString("main"), 0, NULL);
- EXPECT_VALID(result);
-
- // Build a mock message handler and wrap it in a dart port.
- ServiceTestMessageHandler handler;
- Dart_Port port_id = PortMap::CreatePort(&handler);
- Dart_Handle port = Api::NewHandle(isolate, SendPort::New(port_id));
- EXPECT_VALID(port);
- EXPECT_VALID(Dart_SetField(lib, NewString("port"), port));
-
- Array& service_msg = Array::Handle();
- service_msg = Eval(lib, "[0, port, ['coverage'], [], []]");
- Service::HandleIsolateMessage(isolate, service_msg);
- handler.HandleNextMessage();
-
- char buf[1024];
- OS::SNPrint(buf, sizeof(buf),
- "{\"source\":\"test-lib\",\"script\":{\"type\":\"@Script\","
- "\"id\":\"libraries\\/%" Pd "\\/scripts\\/test-lib\","
- "\"name\":\"test-lib\","
- "\"kind\":\"script\"},\"hits\":"
- "[5,1,6,1]}",
- vmlib.index());
- EXPECT_SUBSTRING(buf, handler.msg());
-}
-
-
-TEST_CASE(Service_LibrariesScriptsCoverage) {
- const char* kScript =
- "var port;\n" // Set to our mock port by C++.
- "\n"
- "var x = 7;\n"
- "main() {\n"
- " x = x * x;\n"
- " x = x / 13;\n"
- "}";
-
- Isolate* isolate = Isolate::Current();
- Dart_Handle lib = TestCase::LoadTestScript(kScript, NULL);
- EXPECT_VALID(lib);
- Library& vmlib = Library::Handle();
- vmlib ^= Api::UnwrapHandle(lib);
- EXPECT(!vmlib.IsNull());
- Dart_Handle result = Dart_Invoke(lib, NewString("main"), 0, NULL);
- EXPECT_VALID(result);
-
- // Build a mock message handler and wrap it in a dart port.
- ServiceTestMessageHandler handler;
- Dart_Port port_id = PortMap::CreatePort(&handler);
- Dart_Handle port = Api::NewHandle(isolate, SendPort::New(port_id));
- EXPECT_VALID(port);
- EXPECT_VALID(Dart_SetField(lib, NewString("port"), port));
-
- Array& service_msg = Array::Handle();
- char buf[1024];
- OS::SNPrint(buf, sizeof(buf),
- "[0, port, ['libraries', '%" Pd "', 'scripts', 'test-lib', 'coverage'], "
- "[], []]",
- vmlib.index());
-
- service_msg = Eval(lib, buf);
- Service::HandleIsolateMessage(isolate, service_msg);
- handler.HandleNextMessage();
- OS::SNPrint(buf, sizeof(buf),
- "{\"type\":\"CodeCoverage\",\"id\":\"coverage\",\"coverage\":["
- "{\"source\":\"test-lib\",\"script\":{\"type\":\"@Script\","
- "\"id\":\"libraries\\/%" Pd "\\/scripts\\/test-lib\","
- "\"name\":\"test-lib\","
- "\"kind\":\"script\"},\"hits\":[5,1,6,1]}]}", vmlib.index());
- EXPECT_STREQ(buf, handler.msg());
-}
-
-
-TEST_CASE(Service_LibrariesCoverage) {
- const char* kScript =
- "var port;\n" // Set to our mock port by C++.
- "\n"
- "var x = 7;\n"
- "main() {\n"
- " x = x * x;\n"
- " x = x / 13;\n"
- "}";
-
- Isolate* isolate = Isolate::Current();
- Dart_Handle lib = TestCase::LoadTestScript(kScript, NULL);
- EXPECT_VALID(lib);
- Library& vmlib = Library::Handle();
- vmlib ^= Api::UnwrapHandle(lib);
- EXPECT(!vmlib.IsNull());
- Dart_Handle result = Dart_Invoke(lib, NewString("main"), 0, NULL);
- EXPECT_VALID(result);
-
- // Build a mock message handler and wrap it in a dart port.
- ServiceTestMessageHandler handler;
- Dart_Port port_id = PortMap::CreatePort(&handler);
- Dart_Handle port = Api::NewHandle(isolate, SendPort::New(port_id));
- EXPECT_VALID(port);
- EXPECT_VALID(Dart_SetField(lib, NewString("port"), port));
-
- char buf[1024];
- OS::SNPrint(buf, sizeof(buf),
- "[0, port, ['libraries', '%" Pd "', 'coverage'], [], []]",
- vmlib.index());
-
- Array& service_msg = Array::Handle();
- service_msg = Eval(lib, buf);
- Service::HandleIsolateMessage(isolate, service_msg);
- handler.HandleNextMessage();
- OS::SNPrint(buf, sizeof(buf),
- "{\"type\":\"CodeCoverage\",\"id\":\"coverage\",\"coverage\":["
- "{\"source\":\"test-lib\",\"script\":{\"type\":\"@Script\","
- "\"id\":\"libraries\\/%" Pd "\\/scripts\\/test-lib\","
- "\"name\":\"test-lib\","
- "\"kind\":\"script\"},\"hits\":[5,1,6,1]}]}",
- vmlib.index());
- EXPECT_STREQ(buf, handler.msg());
-}
-
-
-TEST_CASE(Service_ClassesCoverage) {
- const char* kScript =
- "var port;\n" // Set to our mock port by C++.
- "\n"
- "class Foo {\n"
- " var x;\n"
- " Foo(this.x);\n"
- " bar() {\n"
- " x = x * x;\n"
- " x = x / 13;\n"
- " }\n"
- "}\n"
- "main() {\n"
- " var foo = new Foo(7);\n"
- " foo.bar();\n"
- "}";
-
- Isolate* isolate = Isolate::Current();
- Dart_Handle lib = TestCase::LoadTestScript(kScript, NULL);
- EXPECT_VALID(lib);
- Library& vmlib = Library::Handle();
- vmlib ^= Api::UnwrapHandle(lib);
- EXPECT(!vmlib.IsNull());
- Dart_Handle result = Dart_Invoke(lib, NewString("main"), 0, NULL);
- EXPECT_VALID(result);
-
- // Build a mock message handler and wrap it in a dart port.
- ServiceTestMessageHandler handler;
- Dart_Port port_id = PortMap::CreatePort(&handler);
- Dart_Handle port = Api::NewHandle(isolate, SendPort::New(port_id));
- EXPECT_VALID(port);
- EXPECT_VALID(Dart_SetField(lib, NewString("port"), port));
-
- // Look up the service id of Foo.
- const Class& cls = Class::Handle(
- vmlib.LookupClass(String::Handle(String::New("Foo"))));
- ASSERT(!cls.IsNull());
- ClassTable* table = isolate->class_table();
- intptr_t i;
- for (i = 1; i < table->NumCids(); i++) {
- if (table->HasValidClassAt(i) && table->At(i) == cls.raw()) {
- break;
- }
- }
- ASSERT(i != table->NumCids());
- char buf[1024];
- OS::SNPrint(buf, sizeof(buf),
- "[0, port, ['classes', '%" Pd "', 'coverage'], [], []]", i);
-
- Array& service_msg = Array::Handle();
- service_msg = Eval(lib, buf);
- Service::HandleIsolateMessage(isolate, service_msg);
- handler.HandleNextMessage();
- OS::SNPrint(buf, sizeof(buf),
- "{\"type\":\"CodeCoverage\",\"id\":\"coverage\",\"coverage\":["
- "{\"source\":\"test-lib\",\"script\":{\"type\":\"@Script\","
- "\"id\":\"libraries\\/%" Pd "\\/scripts\\/test-lib\","
- "\"name\":\"test-lib\","
- "\"kind\":\"script\"},\"hits\":[5,1,7,4,8,3]}]}",
- vmlib.index());
- EXPECT_STREQ(buf, handler.msg());
-}
-
-
-TEST_CASE(Service_ClassesFunctionsCoverage) {
- const char* kScript =
- "var port;\n" // Set to our mock port by C++.
- "\n"
- "class Foo {\n"
- " var x;\n"
- " Foo(this.x);\n"
- " bar() {\n"
- " x = x * x;\n"
- " x = x / 13;\n"
- " }\n"
- " badum(var a) => 4 + a;\n"
- "}\n"
- "main() {\n"
- " var foo = new Foo(7);\n"
- " foo.bar();\n"
- "}";
-
- Isolate* isolate = Isolate::Current();
- Dart_Handle lib = TestCase::LoadTestScript(kScript, NULL);
- EXPECT_VALID(lib);
- Library& vmlib = Library::Handle();
- vmlib ^= Api::UnwrapHandle(lib);
- EXPECT(!vmlib.IsNull());
- Dart_Handle result = Dart_Invoke(lib, NewString("main"), 0, NULL);
- EXPECT_VALID(result);
-
- // Build a mock message handler and wrap it in a dart port.
- ServiceTestMessageHandler handler;
- Dart_Port port_id = PortMap::CreatePort(&handler);
- Dart_Handle port = Api::NewHandle(isolate, SendPort::New(port_id));
- EXPECT_VALID(port);
- EXPECT_VALID(Dart_SetField(lib, NewString("port"), port));
-
- // Look up the service id of Foo.
- const Class& cls = Class::Handle(
- vmlib.LookupClass(String::Handle(String::New("Foo"))));
- ASSERT(!cls.IsNull());
- ClassTable* table = isolate->class_table();
- intptr_t i;
- for (i = 1; i < table->NumCids(); i++) {
- if (table->HasValidClassAt(i) && table->At(i) == cls.raw()) {
- break;
- }
- }
- ASSERT(i != table->NumCids());
-
- // Look up the service if of the function Foo.bar.
- const Function& func = Function::Handle(
- cls.LookupFunction(String::Handle(String::New("bar"))));
- ASSERT(!func.IsNull());
-
- char buf[1024];
- OS::SNPrint(buf, sizeof(buf),
- "[0, port, ['classes', '%" Pd "', 'functions',"
- "'bar', 'coverage'], [], []]", i);
-
- Array& service_msg = Array::Handle();
- service_msg = Eval(lib, buf);
- Service::HandleIsolateMessage(isolate, service_msg);
- handler.HandleNextMessage();
- OS::SNPrint(buf, sizeof(buf),
- "{\"type\":\"CodeCoverage\",\"id\":\"coverage\",\"coverage\":["
- "{\"source\":\"test-lib\",\"script\":{\"type\":\"@Script\","
- "\"id\":\"libraries\\/%" Pd "\\/scripts\\/test-lib\","
- "\"name\":\"test-lib\","
- "\"kind\":\"script\"},\"hits\":[7,4,8,3]}]}", vmlib.index());
- EXPECT_STREQ(buf, handler.msg());
-}
-
-#endif
-
-
TEST_CASE(Service_AllocationProfile) {
const char* kScript =
"var port;\n" // Set to our mock port by C++.
@@ -2054,48 +1407,44 @@ TEST_CASE(Service_AllocationProfile) {
EXPECT_VALID(Dart_SetField(lib, NewString("port"), port));
Array& service_msg = Array::Handle();
- service_msg = Eval(lib, "[0, port, ['allocationprofile'], [], []]");
+ service_msg = Eval(lib, "[0, port, 'getAllocationProfile', [], []]");
Service::HandleIsolateMessage(isolate, service_msg);
handler.HandleNextMessage();
EXPECT_SUBSTRING("\"type\":\"AllocationProfile\"", handler.msg());
- // Too long.
- service_msg = Eval(lib, "[0, port, ['allocationprofile', 'foo'], [], []]");
- Service::HandleIsolateMessage(isolate, service_msg);
- handler.HandleNextMessage();
- EXPECT_SUBSTRING("\"type\":\"Error\"", handler.msg());
-
// Bad gc option.
service_msg = Eval(lib,
- "[0, port, ['allocationprofile'], ['gc'], ['cat']]");
+ "[0, port, 'getAllocationProfile', "
+ "['gc'], ['cat']]");
Service::HandleIsolateMessage(isolate, service_msg);
handler.HandleNextMessage();
EXPECT_SUBSTRING("\"type\":\"Error\"", handler.msg());
// Bad reset option.
- service_msg = Eval(lib,
- "[0, port, ['allocationprofile'], ['reset'], ['ff']]");
+ service_msg = Eval(lib, "[0, port, 'getAllocationProfile', "
+ "['reset'], ['ff']]");
Service::HandleIsolateMessage(isolate, service_msg);
handler.HandleNextMessage();
EXPECT_SUBSTRING("\"type\":\"Error\"", handler.msg());
// Good reset.
service_msg =
- Eval(lib, "[0, port, ['allocationprofile'], ['reset'], ['true']]");
+ Eval(lib,
+ "[0, port, 'getAllocationProfile', ['reset'], ['true']]");
Service::HandleIsolateMessage(isolate, service_msg);
handler.HandleNextMessage();
EXPECT_SUBSTRING("\"type\":\"AllocationProfile\"", handler.msg());
// Good GC.
service_msg =
- Eval(lib, "[0, port, ['allocationprofile'], ['gc'], ['full']]");
+ Eval(lib, "[0, port, 'getAllocationProfile', ['gc'], ['full']]");
Service::HandleIsolateMessage(isolate, service_msg);
handler.HandleNextMessage();
EXPECT_SUBSTRING("\"type\":\"AllocationProfile\"", handler.msg());
// Good GC and reset.
- service_msg = Eval(lib,
- "[0, port, ['allocationprofile'], ['gc', 'reset'], ['full', 'true']]");
+ service_msg = Eval(lib, "[0, port, 'getAllocationProfile', "
+ "['gc', 'reset'], ['full', 'true']]");
Service::HandleIsolateMessage(isolate, service_msg);
handler.HandleNextMessage();
EXPECT_SUBSTRING("\"type\":\"AllocationProfile\"", handler.msg());
@@ -2121,7 +1470,7 @@ TEST_CASE(Service_HeapMap) {
EXPECT_VALID(Dart_SetField(lib, NewString("port"), port));
Array& service_msg = Array::Handle();
- service_msg = Eval(lib, "[0, port, ['heapmap'], [], []]");
+ service_msg = Eval(lib, "[0, port, 'getHeapMap', [], []]");
Service::HandleIsolateMessage(isolate, service_msg);
handler.HandleNextMessage();
EXPECT_SUBSTRING("\"type\":\"HeapMap\"", handler.msg());
@@ -2306,19 +1655,21 @@ TEST_CASE(Service_Profile) {
EXPECT_VALID(Dart_SetField(lib, NewString("port"), port));
Array& service_msg = Array::Handle();
- service_msg = Eval(lib, "[0, port, ['profile'], [], []]");
+ service_msg = Eval(lib, "[0, port, 'getCpuProfile', [], []]");
Service::HandleIsolateMessage(isolate, service_msg);
handler.HandleNextMessage();
// Expect profile
- EXPECT_SUBSTRING("\"type\":\"Profile\"", handler.msg());
+ EXPECT_SUBSTRING("\"type\":\"CpuProfile\"", handler.msg());
- service_msg = Eval(lib, "[0, port, ['profile'], ['tags'], ['hide']]");
+ service_msg =
+ Eval(lib, "[0, port, 'getCpuProfile', ['tags'], ['None']]");
Service::HandleIsolateMessage(isolate, service_msg);
handler.HandleNextMessage();
// Expect profile
- EXPECT_SUBSTRING("\"type\":\"Profile\"", handler.msg());
+ EXPECT_SUBSTRING("\"type\":\"CpuProfile\"", handler.msg());
- service_msg = Eval(lib, "[0, port, ['profile'], ['tags'], ['hidden']]");
+ service_msg =
+ Eval(lib, "[0, port, 'getCpuProfile', ['tags'], ['Bogus']]");
Service::HandleIsolateMessage(isolate, service_msg);
handler.HandleNextMessage();
// Expect error.
« no previous file with comments | « runtime/vm/service/vmservice.dart ('k') | tests/standalone/vmservice/isolate_class_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698