| Index: runtime/vm/service_test.cc
|
| diff --git a/runtime/vm/service_test.cc b/runtime/vm/service_test.cc
|
| index 385c05727ba04b7ed33c56afd396534fa8b6579f..4e695632cb465bc1bcc44726046260502a3a0fb4 100644
|
| --- a/runtime/vm/service_test.cc
|
| +++ b/runtime/vm/service_test.cc
|
| @@ -125,7 +125,7 @@ static RawArray* EvalF(Dart_Handle lib, const char* fmt, ...) {
|
| }
|
|
|
|
|
| -// Search for the formatted string in buff.
|
| +// Search for the formatted string in buffer.
|
| //
|
| // TODO(turnidge): This function obscures the line number of failing
|
| // EXPECTs. Rework this.
|
| @@ -264,6 +264,9 @@ TEST_CASE(Service_DebugBreakpoints) {
|
| 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;
|
| @@ -275,30 +278,83 @@ TEST_CASE(Service_DebugBreakpoints) {
|
| Array& service_msg = Array::Handle();
|
|
|
| // Add a breakpoint.
|
| - const String& url = String::Handle(String::New(TestCase::url()));
|
| - isolate->debugger()->SetBreakpointAtLine(url, 3);
|
| + 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\",\"user_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();
|
| - EXPECT_STREQ(
|
| - "{\"type\":\"BreakpointList\",\"breakpoints\":[{"
|
| - "\"type\":\"Breakpoint\",\"id\":1,\"enabled\":true,"
|
| - "\"resolved\":false,"
|
| - "\"location\":{\"type\":\"Location\","
|
| - "\"script\":\"test-lib\",\"tokenPos\":5}}]}",
|
| - handler.msg());
|
| + 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\",\"user_name\":\"test-lib\",\"kind\":\"script\"},"
|
| + "\"tokenPos\":5}}]}",
|
| + vmlib.index());
|
|
|
| - // Individual breakpoint.
|
| + // 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\",\"user_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\":\"Breakpoint\",\"id\":1,\"enabled\":true,"
|
| - "\"resolved\":false,"
|
| - "\"location\":{\"type\":\"Location\","
|
| - "\"script\":\"test-lib\",\"tokenPos\":5}}",
|
| + "{\"type\":\"BreakpointList\",\"id\":\"debug\\/breakpoints\","
|
| + "\"breakpoints\":[]}",
|
| handler.msg());
|
|
|
| // Missing sub-command.
|
| @@ -318,24 +374,12 @@ TEST_CASE(Service_DebugBreakpoints) {
|
| Service::HandleIsolateMessage(isolate, service_msg);
|
| handler.HandleNextMessage();
|
| EXPECT_STREQ("{\"type\":\"Error\",\"id\":\"\","
|
| - "\"message\":\"Unrecognized breakpoint id 1111\","
|
| + "\"message\":\"Unrecognized breakpoint id: 1111\","
|
| "\"request\":{"
|
| "\"arguments\":[\"debug\",\"breakpoints\",\"1111\"],"
|
| "\"option_keys\":[],\"option_values\":[]}}",
|
| handler.msg());
|
|
|
| - // Command too long.
|
| - service_msg =
|
| - Eval(lib, "[0, port, ['debug', 'breakpoints', '1111', 'green'], [], []]");
|
| - Service::HandleIsolateMessage(isolate, service_msg);
|
| - handler.HandleNextMessage();
|
| - EXPECT_STREQ("{\"type\":\"Error\",\"id\":\"\","
|
| - "\"message\":\"Command too long\","
|
| - "\"request\":{\"arguments\":[\"debug\",\"breakpoints\","
|
| - "\"1111\",\"green\"],"
|
| - "\"option_keys\":[],\"option_values\":[]}}",
|
| - handler.msg());
|
| -
|
| // Unrecognized subcommand.
|
| service_msg = Eval(lib, "[0, port, ['debug', 'nosferatu'], [], []]");
|
| Service::HandleIsolateMessage(isolate, service_msg);
|
| @@ -348,6 +392,98 @@ TEST_CASE(Service_DebugBreakpoints) {
|
| }
|
|
|
|
|
| +// 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\",\"user_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 =
|
| @@ -625,17 +761,17 @@ TEST_CASE(Service_RetainingPath) {
|
| " lst = new List<String>(100);\n"
|
| "}\n";
|
| Isolate* isolate = Isolate::Current();
|
| - Dart_Handle h_lib = TestCase::LoadTestScript(kScript, NULL);
|
| - EXPECT_VALID(h_lib);
|
| - Library& lib = Library::Handle();
|
| - lib ^= Api::UnwrapHandle(h_lib);
|
| - EXPECT(!lib.IsNull());
|
| - Dart_Handle result = Dart_Invoke(h_lib, NewString("main"), 0, NULL);
|
| + Dart_Handle lib = TestCase::LoadTestScript(kScript, NULL);
|
| + EXPECT_VALID(lib);
|
| + Dart_Handle result = Dart_Invoke(lib, NewString("main"), 0, NULL);
|
| EXPECT_VALID(result);
|
| - const Class& class_foo = Class::Handle(GetClass(lib, "Foo"));
|
| + Library& vmlib = Library::Handle();
|
| + vmlib ^= Api::UnwrapHandle(lib);
|
| + EXPECT(!vmlib.IsNull());
|
| + const Class& class_foo = Class::Handle(GetClass(vmlib, "Foo"));
|
| EXPECT(!class_foo.IsNull());
|
| - Dart_Handle foo = Dart_GetField(h_lib, NewString("foo"));
|
| - Dart_Handle lst = Dart_GetField(h_lib, NewString("lst"));
|
| + Dart_Handle foo = Dart_GetField(lib, NewString("foo"));
|
| + Dart_Handle lst = Dart_GetField(lib, NewString("lst"));
|
| const intptr_t kElemIndex = 42;
|
| {
|
| Dart_EnterScope();
|
| @@ -646,7 +782,7 @@ TEST_CASE(Service_RetainingPath) {
|
| EXPECT_VALID(Dart_SetField(foo, NewString("f0"), h_foo0));
|
| Dart_Handle id0 = Dart_NewInteger(ring->GetIdForObject(foo0.raw()));
|
| EXPECT_VALID(id0);
|
| - EXPECT_VALID(Dart_SetField(h_lib, NewString("id0"), id0));
|
| + EXPECT_VALID(Dart_SetField(lib, NewString("id0"), id0));
|
| }
|
| {
|
| const String& foo1 = String::Handle(String::New("foo1", Heap::kOld));
|
| @@ -654,7 +790,7 @@ TEST_CASE(Service_RetainingPath) {
|
| EXPECT_VALID(Dart_SetField(foo, NewString("f1"), h_foo1));
|
| Dart_Handle id1 = Dart_NewInteger(ring->GetIdForObject(foo1.raw()));
|
| EXPECT_VALID(id1);
|
| - EXPECT_VALID(Dart_SetField(h_lib, NewString("id1"), id1));
|
| + EXPECT_VALID(Dart_SetField(lib, NewString("id1"), id1));
|
| }
|
| {
|
| const String& elem = String::Handle(String::New("elem", Heap::kOld));
|
| @@ -662,7 +798,7 @@ TEST_CASE(Service_RetainingPath) {
|
| EXPECT_VALID(Dart_ListSetAt(lst, kElemIndex, h_elem));
|
| Dart_Handle idElem = Dart_NewInteger(ring->GetIdForObject(elem.raw()));
|
| EXPECT_VALID(idElem);
|
| - EXPECT_VALID(Dart_SetField(h_lib, NewString("idElem"), idElem));
|
| + EXPECT_VALID(Dart_SetField(lib, NewString("idElem"), idElem));
|
| }
|
| Dart_ExitScope();
|
| }
|
| @@ -672,12 +808,12 @@ TEST_CASE(Service_RetainingPath) {
|
| Dart_Port port_id = PortMap::CreatePort(&handler);
|
| Dart_Handle port = Api::NewHandle(isolate, SendPort::New(port_id));
|
| EXPECT_VALID(port);
|
| - EXPECT_VALID(Dart_SetField(h_lib, NewString("port"), port));
|
| + EXPECT_VALID(Dart_SetField(lib, NewString("port"), port));
|
| Array& service_msg = Array::Handle();
|
|
|
| // Retaining path to 'foo0', limit 2.
|
| service_msg = Eval(
|
| - h_lib,
|
| + lib,
|
| "[0, port, ['objects', '$id0', 'retaining_path'], ['limit'], ['2']]");
|
| Service::HandleIsolateMessage(isolate, service_msg);
|
| handler.HandleNextMessage();
|
| @@ -692,7 +828,7 @@ TEST_CASE(Service_RetainingPath) {
|
|
|
| // Retaining path to 'foo1', limit 2.
|
| service_msg = Eval(
|
| - h_lib,
|
| + lib,
|
| "[0, port, ['objects', '$id1', 'retaining_path'], ['limit'], ['2']]");
|
| Service::HandleIsolateMessage(isolate, service_msg);
|
| handler.HandleNextMessage();
|
| @@ -707,7 +843,7 @@ TEST_CASE(Service_RetainingPath) {
|
|
|
| // Retaining path to 'elem', limit 2.
|
| service_msg = Eval(
|
| - h_lib,
|
| + lib,
|
| "[0, port, ['objects', '$idElem', 'retaining_path'], ['limit'], ['2']]");
|
| Service::HandleIsolateMessage(isolate, service_msg);
|
| handler.HandleNextMessage();
|
| @@ -730,44 +866,35 @@ TEST_CASE(Service_Libraries) {
|
| "}";
|
|
|
| Isolate* isolate = Isolate::Current();
|
| - Dart_Handle h_lib = TestCase::LoadTestScript(kScript, NULL);
|
| - EXPECT_VALID(h_lib);
|
| - Library& lib = Library::Handle();
|
| - lib ^= Api::UnwrapHandle(h_lib);
|
| - EXPECT(!lib.IsNull());
|
| -
|
| - // Find the current library.
|
| - intptr_t lib_id = -1;
|
| - const GrowableObjectArray& libs =
|
| - GrowableObjectArray::Handle(isolate->object_store()->libraries());
|
| - for (intptr_t i = 0; i < libs.Length(); i++) {
|
| - if (libs.At(i) == lib.raw()) {
|
| - lib_id = i;
|
| - }
|
| - }
|
| - ASSERT(lib_id > 0);
|
| + 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(h_lib, NewString("port"), port));
|
| + EXPECT_VALID(Dart_SetField(lib, NewString("port"), port));
|
|
|
| Array& service_msg = Array::Handle();
|
|
|
| // Request library.
|
| - service_msg = EvalF(h_lib,
|
| - "[0, port, ['libraries', '%" Pd "'], [], []]", lib_id);
|
| + service_msg = EvalF(lib,
|
| + "[0, port, ['libraries', '%" Pd "'], [], []]",
|
| + vmlib.index());
|
| Service::HandleIsolateMessage(isolate, service_msg);
|
| handler.HandleNextMessage();
|
| EXPECT_SUBSTRING("\"type\":\"Library\"", handler.msg());
|
| EXPECT_SUBSTRING("\"url\":\"test-lib\"", handler.msg());
|
|
|
| // Evaluate an expression from a library.
|
| - service_msg = EvalF(h_lib,
|
| + service_msg = EvalF(lib,
|
| "[0, port, ['libraries', '%" Pd "', 'eval'], "
|
| - "['expr'], ['libVar - 1']]", lib_id);
|
| + "['expr'], ['libVar - 1']]",
|
| + vmlib.index());
|
| Service::HandleIsolateMessage(isolate, service_msg);
|
| handler.HandleNextMessage();
|
| handler.filterMsg("name");
|
| @@ -802,14 +929,14 @@ TEST_CASE(Service_Classes) {
|
| "}";
|
|
|
| Isolate* isolate = Isolate::Current();
|
| - Dart_Handle h_lib = TestCase::LoadTestScript(kScript, NULL);
|
| - EXPECT_VALID(h_lib);
|
| - Library& lib = Library::Handle();
|
| - lib ^= Api::UnwrapHandle(h_lib);
|
| - EXPECT(!lib.IsNull());
|
| - Dart_Handle result = Dart_Invoke(h_lib, NewString("main"), 0, NULL);
|
| + 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);
|
| - const Class& class_a = Class::Handle(GetClass(lib, "A"));
|
| + const Class& class_a = Class::Handle(GetClass(vmlib, "A"));
|
| EXPECT(!class_a.IsNull());
|
| intptr_t cid = class_a.id();
|
|
|
| @@ -818,12 +945,12 @@ TEST_CASE(Service_Classes) {
|
| Dart_Port port_id = PortMap::CreatePort(&handler);
|
| Dart_Handle port = Api::NewHandle(isolate, SendPort::New(port_id));
|
| EXPECT_VALID(port);
|
| - EXPECT_VALID(Dart_SetField(h_lib, NewString("port"), port));
|
| + EXPECT_VALID(Dart_SetField(lib, NewString("port"), port));
|
|
|
| Array& service_msg = Array::Handle();
|
|
|
| // Request an invalid class id.
|
| - service_msg = Eval(h_lib, "[0, port, ['classes', '999999'], [], []]");
|
| + service_msg = Eval(lib, "[0, port, ['classes', '999999'], [], []]");
|
| Service::HandleIsolateMessage(isolate, service_msg);
|
| handler.HandleNextMessage();
|
| EXPECT_STREQ(
|
| @@ -833,7 +960,7 @@ TEST_CASE(Service_Classes) {
|
| "\"option_keys\":[],\"option_values\":[]}}", handler.msg());
|
|
|
| // Request the class A over the service.
|
| - service_msg = EvalF(h_lib, "[0, port, ['classes', '%" Pd "'], [], []]", cid);
|
| + service_msg = EvalF(lib, "[0, port, ['classes', '%" Pd "'], [], []]", cid);
|
| Service::HandleIsolateMessage(isolate, service_msg);
|
| handler.HandleNextMessage();
|
| EXPECT_SUBSTRING("\"type\":\"Class\"", handler.msg());
|
| @@ -844,7 +971,7 @@ TEST_CASE(Service_Classes) {
|
| ExpectSubstringF(handler.msg(), "\"endTokenPos\":");
|
|
|
| // Evaluate an expression from class A.
|
| - service_msg = EvalF(h_lib,
|
| + service_msg = EvalF(lib,
|
| "[0, port, ['classes', '%" Pd "', 'eval'], "
|
| "['expr'], ['cobra + 100000']]", cid);
|
| Service::HandleIsolateMessage(isolate, service_msg);
|
| @@ -859,7 +986,7 @@ TEST_CASE(Service_Classes) {
|
| handler.msg());
|
|
|
| // Request function 0 from class A.
|
| - service_msg = EvalF(h_lib,
|
| + service_msg = EvalF(lib,
|
| "[0, port, ['classes', '%" Pd "', 'functions', '0'],"
|
| "[], []]", cid);
|
| Service::HandleIsolateMessage(isolate, service_msg);
|
| @@ -870,8 +997,8 @@ TEST_CASE(Service_Classes) {
|
| "\"name\":\"get:a\",", cid);
|
|
|
| // Request field 0 from class A.
|
| - service_msg = EvalF(h_lib, "[0, port, ['classes', '%" Pd "', 'fields', '0'],"
|
| - "[], []]", cid);
|
| + service_msg = EvalF(lib, "[0, port, ['classes', '%" Pd "', 'fields', '0'],"
|
| + "[], []]", cid);
|
| Service::HandleIsolateMessage(isolate, service_msg);
|
| handler.HandleNextMessage();
|
| EXPECT_SUBSTRING("\"type\":\"Field\"", handler.msg());
|
| @@ -880,8 +1007,8 @@ TEST_CASE(Service_Classes) {
|
| "\"name\":\"a\",", cid);
|
|
|
| // Invalid sub command.
|
| - service_msg = EvalF(h_lib, "[0, port, ['classes', '%" Pd "', 'huh', '0'],"
|
| - "[], []]", cid);
|
| + service_msg = EvalF(lib, "[0, port, ['classes', '%" Pd "', 'huh', '0'],"
|
| + "[], []]", cid);
|
| Service::HandleIsolateMessage(isolate, service_msg);
|
| handler.HandleNextMessage();
|
| ExpectSubstringF(handler.msg(),
|
| @@ -891,8 +1018,8 @@ TEST_CASE(Service_Classes) {
|
| "\"option_values\":[]}}", cid);
|
|
|
| // Invalid field request.
|
| - service_msg = EvalF(h_lib, "[0, port, ['classes', '%" Pd "', 'fields', '9'],"
|
| - "[], []]", cid);
|
| + service_msg = EvalF(lib, "[0, port, ['classes', '%" Pd "', 'fields', '9'],"
|
| + "[], []]", cid);
|
| Service::HandleIsolateMessage(isolate, service_msg);
|
| handler.HandleNextMessage();
|
| ExpectSubstringF(handler.msg(),
|
| @@ -901,9 +1028,9 @@ TEST_CASE(Service_Classes) {
|
| "\"option_keys\":[],\"option_values\":[]}}", cid);
|
|
|
| // Invalid function request.
|
| - service_msg = EvalF(h_lib,
|
| + service_msg = EvalF(lib,
|
| "[0, port, ['classes', '%" Pd "', 'functions', '9'],"
|
| - "[], []]", cid);
|
| + "[], []]", cid);
|
| Service::HandleIsolateMessage(isolate, service_msg);
|
| handler.HandleNextMessage();
|
| ExpectSubstringF(handler.msg(),
|
| @@ -913,7 +1040,7 @@ TEST_CASE(Service_Classes) {
|
|
|
|
|
| // Invalid field subcommand.
|
| - service_msg = EvalF(h_lib,
|
| + service_msg = EvalF(lib,
|
| "[0, port, ['classes', '%" Pd "', 'fields', '9', 'x']"
|
| ",[], []]", cid);
|
| Service::HandleIsolateMessage(isolate, service_msg);
|
| @@ -925,7 +1052,7 @@ TEST_CASE(Service_Classes) {
|
| "\"option_keys\":[],\"option_values\":[]}}", cid);
|
|
|
| // Invalid function command.
|
| - service_msg = EvalF(h_lib,
|
| + service_msg = EvalF(lib,
|
| "[0, port, ['classes', '%" Pd "', 'functions', '0',"
|
| "'x', 'y'], [], []]", cid);
|
| Service::HandleIsolateMessage(isolate, service_msg);
|
| @@ -937,7 +1064,7 @@ TEST_CASE(Service_Classes) {
|
| "\"option_keys\":[],\"option_values\":[]}}", cid);
|
|
|
| // Invalid function subcommand with valid function id.
|
| - service_msg = EvalF(h_lib,
|
| + service_msg = EvalF(lib,
|
| "[0, port, ['classes', '%" Pd "', 'functions', '0',"
|
| "'x'], [], []]", cid);
|
| Service::HandleIsolateMessage(isolate, service_msg);
|
| @@ -949,11 +1076,11 @@ TEST_CASE(Service_Classes) {
|
| "\"option_keys\":[],\"option_values\":[]}}", cid);
|
|
|
| // Retained size of all instances of class B.
|
| - const Class& class_b = Class::Handle(GetClass(lib, "B"));
|
| + const Class& class_b = Class::Handle(GetClass(vmlib, "B"));
|
| 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(h_lib, "[0, port, ['classes', '%" Pd "', 'retained'],"
|
| + service_msg = EvalF(lib, "[0, port, ['classes', '%" Pd "', 'retained'],"
|
| "[], []]", class_b.id());
|
| Service::HandleIsolateMessage(isolate, service_msg);
|
| handler.HandleNextMessage();
|
| @@ -961,7 +1088,7 @@ TEST_CASE(Service_Classes) {
|
| "\"id\":\"objects\\/int-%" Pd "\"",
|
| b0.raw()->Size() + b1.raw()->Size());
|
| // ... and list the instances of class B.
|
| - service_msg = EvalF(h_lib, "[0, port, ['classes', '%" Pd "', 'instances'],"
|
| + service_msg = EvalF(lib, "[0, port, ['classes', '%" Pd "', 'instances'],"
|
| "['limit'], ['3']]", class_b.id());
|
| Service::HandleIsolateMessage(isolate, service_msg);
|
| handler.HandleNextMessage();
|
| @@ -979,7 +1106,7 @@ 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(h_lib, "[0, port, ['classes', '%" Pd "', 'instances'],"
|
| + service_msg = EvalF(lib, "[0, port, ['classes', '%" Pd "', 'instances'],"
|
| "['limit'], ['1']]", class_b.id());
|
| Service::HandleIsolateMessage(isolate, service_msg);
|
| handler.HandleNextMessage();
|
| @@ -999,14 +1126,14 @@ TEST_CASE(Service_Types) {
|
| "}";
|
|
|
| Isolate* isolate = Isolate::Current();
|
| - Dart_Handle h_lib = TestCase::LoadTestScript(kScript, NULL);
|
| - EXPECT_VALID(h_lib);
|
| - Library& lib = Library::Handle();
|
| - lib ^= Api::UnwrapHandle(h_lib);
|
| - EXPECT(!lib.IsNull());
|
| - Dart_Handle result = Dart_Invoke(h_lib, NewString("main"), 0, NULL);
|
| + 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);
|
| - const Class& class_a = Class::Handle(GetClass(lib, "A"));
|
| + const Class& class_a = Class::Handle(GetClass(vmlib, "A"));
|
| EXPECT(!class_a.IsNull());
|
| intptr_t cid = class_a.id();
|
|
|
| @@ -1015,12 +1142,12 @@ TEST_CASE(Service_Types) {
|
| Dart_Port port_id = PortMap::CreatePort(&handler);
|
| Dart_Handle port = Api::NewHandle(isolate, SendPort::New(port_id));
|
| EXPECT_VALID(port);
|
| - EXPECT_VALID(Dart_SetField(h_lib, NewString("port"), port));
|
| + EXPECT_VALID(Dart_SetField(lib, NewString("port"), port));
|
|
|
| Array& service_msg = Array::Handle();
|
|
|
| // Request the class A over the service.
|
| - service_msg = EvalF(h_lib, "[0, port, ['classes', '%" Pd "'], [], []]", cid);
|
| + service_msg = EvalF(lib, "[0, port, ['classes', '%" Pd "'], [], []]", cid);
|
| Service::HandleIsolateMessage(isolate, service_msg);
|
| handler.HandleNextMessage();
|
| EXPECT_SUBSTRING("\"type\":\"Class\"", handler.msg());
|
| @@ -1029,7 +1156,7 @@ TEST_CASE(Service_Types) {
|
| "\"id\":\"classes\\/%" Pd "\"", cid);
|
|
|
| // Request canonical type 0 from class A.
|
| - service_msg = EvalF(h_lib, "[0, port, ['classes', '%" Pd "', 'types', '0'],"
|
| + service_msg = EvalF(lib, "[0, port, ['classes', '%" Pd "', 'types', '0'],"
|
| "[], []]", cid);
|
| Service::HandleIsolateMessage(isolate, service_msg);
|
| handler.HandleNextMessage();
|
| @@ -1039,7 +1166,7 @@ TEST_CASE(Service_Types) {
|
| "\"id\":\"classes\\/%" Pd "\\/types\\/0\"", cid);
|
|
|
| // Request canonical type 1 from class A.
|
| - service_msg = EvalF(h_lib, "[0, port, ['classes', '%" Pd "', 'types', '1'],"
|
| + service_msg = EvalF(lib, "[0, port, ['classes', '%" Pd "', 'types', '1'],"
|
| "[], []]", cid);
|
| Service::HandleIsolateMessage(isolate, service_msg);
|
| handler.HandleNextMessage();
|
| @@ -1049,8 +1176,8 @@ TEST_CASE(Service_Types) {
|
| "\"id\":\"classes\\/%" Pd "\\/types\\/1\"", cid);
|
|
|
| // Request for non-existent canonical type from class A.
|
| - service_msg = EvalF(h_lib, "[0, port, ['classes', '%" Pd "', 'types', '42'],"
|
| - "[], []]", cid);
|
| + service_msg = EvalF(lib, "[0, port, ['classes', '%" Pd "', 'types', '42'],"
|
| + "[], []]", cid);
|
| Service::HandleIsolateMessage(isolate, service_msg);
|
| handler.HandleNextMessage();
|
| ExpectSubstringF(handler.msg(),
|
| @@ -1061,15 +1188,15 @@ TEST_CASE(Service_Types) {
|
| "\"option_keys\":[],\"option_values\":[]}}", cid);
|
|
|
| // Request canonical type arguments. Expect <A<bool>> to be listed.
|
| - service_msg = EvalF(h_lib, "[0, port, ['typearguments'],"
|
| - "[], []]");
|
| + service_msg = EvalF(lib, "[0, port, ['typearguments'],"
|
| + "[], []]");
|
| Service::HandleIsolateMessage(isolate, service_msg);
|
| handler.HandleNextMessage();
|
| EXPECT_SUBSTRING("\"type\":\"TypeArgumentsList\"", handler.msg());
|
| ExpectSubstringF(handler.msg(), "\"name\":\"<A<bool>>\",");
|
|
|
| // Request canonical type arguments with instantiations.
|
| - service_msg = EvalF(h_lib,
|
| + service_msg = EvalF(lib,
|
| "[0, port, ['typearguments', 'withinstantiations'],"
|
| "[], []]");
|
| Service::HandleIsolateMessage(isolate, service_msg);
|
| @@ -1097,14 +1224,14 @@ TEST_CASE(Service_Code) {
|
| "}";
|
|
|
| Isolate* isolate = Isolate::Current();
|
| - Dart_Handle h_lib = TestCase::LoadTestScript(kScript, NULL);
|
| - EXPECT_VALID(h_lib);
|
| - Library& lib = Library::Handle();
|
| - lib ^= Api::UnwrapHandle(h_lib);
|
| - EXPECT(!lib.IsNull());
|
| - Dart_Handle result = Dart_Invoke(h_lib, NewString("main"), 0, NULL);
|
| + 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);
|
| - const Class& class_a = Class::Handle(GetClass(lib, "A"));
|
| + const Class& class_a = Class::Handle(GetClass(vmlib, "A"));
|
| EXPECT(!class_a.IsNull());
|
| const Function& function_c = Function::Handle(GetFunction(class_a, "c"));
|
| EXPECT(!function_c.IsNull());
|
| @@ -1121,12 +1248,12 @@ TEST_CASE(Service_Code) {
|
| Dart_Port port_id = PortMap::CreatePort(&handler);
|
| Dart_Handle port = Api::NewHandle(isolate, SendPort::New(port_id));
|
| EXPECT_VALID(port);
|
| - EXPECT_VALID(Dart_SetField(h_lib, NewString("port"), port));
|
| + EXPECT_VALID(Dart_SetField(lib, NewString("port"), port));
|
|
|
| Array& service_msg = Array::Handle();
|
|
|
| // Request an invalid code object.
|
| - service_msg = Eval(h_lib, "[0, port, ['code', '0'], [], []]");
|
| + service_msg = Eval(lib, "[0, port, ['code', '0'], [], []]");
|
| Service::HandleIsolateMessage(isolate, service_msg);
|
| handler.HandleNextMessage();
|
| EXPECT_STREQ(
|
| @@ -1136,7 +1263,7 @@ TEST_CASE(Service_Code) {
|
|
|
| // The following test checks that a code object can be found only
|
| // at compile_timestamp()-code.EntryPoint().
|
| - service_msg = EvalF(h_lib, "[0, port, ['code', '%" Px64"-%" Px "'], [], []]",
|
| + service_msg = EvalF(lib, "[0, port, ['code', '%" Px64"-%" Px "'], [], []]",
|
| compile_timestamp,
|
| entry);
|
| Service::HandleIsolateMessage(isolate, service_msg);
|
| @@ -1155,7 +1282,7 @@ TEST_CASE(Service_Code) {
|
| // Request code object at compile_timestamp-code.EntryPoint() + 16
|
| // Expect this to fail because the address is not the entry point.
|
| uintptr_t address = entry + 16;
|
| - service_msg = EvalF(h_lib, "[0, port, ['code', '%" Px64"-%" Px "'], [], []]",
|
| + service_msg = EvalF(lib, "[0, port, ['code', '%" Px64"-%" Px "'], [], []]",
|
| compile_timestamp,
|
| address);
|
| Service::HandleIsolateMessage(isolate, service_msg);
|
| @@ -1174,7 +1301,7 @@ TEST_CASE(Service_Code) {
|
| // Request code object at (compile_timestamp - 1)-code.EntryPoint()
|
| // Expect this to fail because the timestamp is wrong.
|
| address = entry;
|
| - service_msg = EvalF(h_lib, "[0, port, ['code', '%" Px64"-%" Px "'], [], []]",
|
| + service_msg = EvalF(lib, "[0, port, ['code', '%" Px64"-%" Px "'], [], []]",
|
| compile_timestamp - 1,
|
| address);
|
| Service::HandleIsolateMessage(isolate, service_msg);
|
| @@ -1192,7 +1319,7 @@ TEST_CASE(Service_Code) {
|
|
|
| // Request native code at address. Expect the null code object back.
|
| address = last;
|
| - service_msg = EvalF(h_lib, "[0, port, ['code', 'native-%" Px "'], [], []]",
|
| + service_msg = EvalF(lib, "[0, port, ['code', 'native-%" Px "'], [], []]",
|
| address);
|
| Service::HandleIsolateMessage(isolate, service_msg);
|
| handler.HandleNextMessage();
|
| @@ -1201,7 +1328,7 @@ TEST_CASE(Service_Code) {
|
| handler.msg());
|
|
|
| // Request malformed native code.
|
| - service_msg = EvalF(h_lib, "[0, port, ['code', 'native%" Px "'], [], []]",
|
| + service_msg = EvalF(lib, "[0, port, ['code', 'native%" Px "'], [], []]",
|
| address);
|
| Service::HandleIsolateMessage(isolate, service_msg);
|
| handler.HandleNextMessage();
|
| @@ -1298,26 +1425,26 @@ TEST_CASE(Service_Scripts) {
|
| "}";
|
|
|
| Isolate* isolate = Isolate::Current();
|
| - Dart_Handle h_lib = TestCase::LoadTestScript(kScript, NULL);
|
| - EXPECT_VALID(h_lib);
|
| - Library& lib = Library::Handle();
|
| - lib ^= Api::UnwrapHandle(h_lib);
|
| - EXPECT(!lib.IsNull());
|
| + 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(h_lib, NewString("port"), 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'], [], []]",
|
| - lib.index());
|
| + vmlib.index());
|
|
|
| - service_msg = Eval(h_lib, buf);
|
| + service_msg = Eval(lib, buf);
|
| Service::HandleIsolateMessage(isolate, service_msg);
|
| handler.HandleNextMessage();
|
| OS::SNPrint(buf, sizeof(buf),
|
| @@ -1330,7 +1457,7 @@ TEST_CASE(Service_Scripts) {
|
| "\"url\":\"test-lib\"},"
|
| "\"source\":\"var port;\\n\\nmain() {\\n}\","
|
| "\"tokenPosTable\":[[1,0,1,1,5,2,9],[3,5,1,6,5,7,6,8,8],[4,10,1]]}",
|
| - lib.index(), lib.index());
|
| + vmlib.index(), vmlib.index());
|
| EXPECT_STREQ(buf, handler.msg());
|
| }
|
|
|
| @@ -1349,12 +1476,12 @@ TEST_CASE(Service_Coverage) {
|
| "}";
|
|
|
| Isolate* isolate = Isolate::Current();
|
| - Dart_Handle h_lib = TestCase::LoadTestScript(kScript, NULL);
|
| - EXPECT_VALID(h_lib);
|
| - Library& lib = Library::Handle();
|
| - lib ^= Api::UnwrapHandle(h_lib);
|
| - EXPECT(!lib.IsNull());
|
| - Dart_Handle result = Dart_Invoke(h_lib, NewString("main"), 0, NULL);
|
| + 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.
|
| @@ -1362,31 +1489,21 @@ TEST_CASE(Service_Coverage) {
|
| Dart_Port port_id = PortMap::CreatePort(&handler);
|
| Dart_Handle port = Api::NewHandle(isolate, SendPort::New(port_id));
|
| EXPECT_VALID(port);
|
| - EXPECT_VALID(Dart_SetField(h_lib, NewString("port"), port));
|
| + EXPECT_VALID(Dart_SetField(lib, NewString("port"), port));
|
|
|
| Array& service_msg = Array::Handle();
|
| - service_msg = Eval(h_lib, "[0, port, ['coverage'], [], []]");
|
| + service_msg = Eval(lib, "[0, port, ['coverage'], [], []]");
|
| Service::HandleIsolateMessage(isolate, service_msg);
|
| handler.HandleNextMessage();
|
|
|
| - // Look up the service id for the library containg the test-lib script.
|
| - const GrowableObjectArray& libs =
|
| - GrowableObjectArray::Handle(isolate->object_store()->libraries());
|
| - intptr_t i;
|
| - for (i = 0; i < libs.Length(); i++) {
|
| - if (libs.At(i) == lib.raw()) {
|
| - break;
|
| - }
|
| - }
|
| - ASSERT(i != libs.Length());
|
| -
|
| char buf[1024];
|
| OS::SNPrint(buf, sizeof(buf),
|
| - "{\"source\":\"test-lib\",\"script\":{\"type\":\"@Script\","
|
| - "\"id\":\"libraries\\/%" Pd "\\/scripts\\/test-lib\","
|
| - "\"name\":\"test-lib\",\"user_name\":\"test-lib\","
|
| - "\"kind\":\"script\"},\"hits\":"
|
| - "[5,1,6,1]}", i);
|
| + "{\"source\":\"test-lib\",\"script\":{\"type\":\"@Script\","
|
| + "\"id\":\"libraries\\/%" Pd "\\/scripts\\/test-lib\","
|
| + "\"name\":\"test-lib\",\"user_name\":\"test-lib\","
|
| + "\"kind\":\"script\"},\"hits\":"
|
| + "[5,1,6,1]}",
|
| + vmlib.index());
|
| EXPECT_SUBSTRING(buf, handler.msg());
|
| }
|
|
|
| @@ -1402,12 +1519,12 @@ TEST_CASE(Service_LibrariesScriptsCoverage) {
|
| "}";
|
|
|
| Isolate* isolate = Isolate::Current();
|
| - Dart_Handle h_lib = TestCase::LoadTestScript(kScript, NULL);
|
| - EXPECT_VALID(h_lib);
|
| - Library& lib = Library::Handle();
|
| - lib ^= Api::UnwrapHandle(h_lib);
|
| - EXPECT(!lib.IsNull());
|
| - Dart_Handle result = Dart_Invoke(h_lib, NewString("main"), 0, NULL);
|
| + 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.
|
| @@ -1415,16 +1532,16 @@ TEST_CASE(Service_LibrariesScriptsCoverage) {
|
| Dart_Port port_id = PortMap::CreatePort(&handler);
|
| Dart_Handle port = Api::NewHandle(isolate, SendPort::New(port_id));
|
| EXPECT_VALID(port);
|
| - EXPECT_VALID(Dart_SetField(h_lib, NewString("port"), 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'], "
|
| "[], []]",
|
| - lib.index());
|
| + vmlib.index());
|
|
|
| - service_msg = Eval(h_lib, buf);
|
| + service_msg = Eval(lib, buf);
|
| Service::HandleIsolateMessage(isolate, service_msg);
|
| handler.HandleNextMessage();
|
| OS::SNPrint(buf, sizeof(buf),
|
| @@ -1432,7 +1549,7 @@ TEST_CASE(Service_LibrariesScriptsCoverage) {
|
| "{\"source\":\"test-lib\",\"script\":{\"type\":\"@Script\","
|
| "\"id\":\"libraries\\/%" Pd "\\/scripts\\/test-lib\","
|
| "\"name\":\"test-lib\",\"user_name\":\"test-lib\","
|
| - "\"kind\":\"script\"},\"hits\":[5,1,6,1]}]}", lib.index());
|
| + "\"kind\":\"script\"},\"hits\":[5,1,6,1]}]}", vmlib.index());
|
| EXPECT_STREQ(buf, handler.msg());
|
| }
|
|
|
| @@ -1448,12 +1565,12 @@ TEST_CASE(Service_LibrariesCoverage) {
|
| "}";
|
|
|
| Isolate* isolate = Isolate::Current();
|
| - Dart_Handle h_lib = TestCase::LoadTestScript(kScript, NULL);
|
| - EXPECT_VALID(h_lib);
|
| - Library& lib = Library::Handle();
|
| - lib ^= Api::UnwrapHandle(h_lib);
|
| - EXPECT(!lib.IsNull());
|
| - Dart_Handle result = Dart_Invoke(h_lib, NewString("main"), 0, NULL);
|
| + 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.
|
| @@ -1461,32 +1578,24 @@ TEST_CASE(Service_LibrariesCoverage) {
|
| Dart_Port port_id = PortMap::CreatePort(&handler);
|
| Dart_Handle port = Api::NewHandle(isolate, SendPort::New(port_id));
|
| EXPECT_VALID(port);
|
| - EXPECT_VALID(Dart_SetField(h_lib, NewString("port"), port));
|
| + EXPECT_VALID(Dart_SetField(lib, NewString("port"), port));
|
|
|
| - // Look up the service id for the library containg the test-lib script.
|
| - const GrowableObjectArray& libs =
|
| - GrowableObjectArray::Handle(isolate->object_store()->libraries());
|
| - intptr_t i;
|
| - for (i = 0; i < libs.Length(); i++) {
|
| - if (libs.At(i) == lib.raw()) {
|
| - break;
|
| - }
|
| - }
|
| - ASSERT(i != libs.Length());
|
| char buf[1024];
|
| OS::SNPrint(buf, sizeof(buf),
|
| - "[0, port, ['libraries', '%" Pd "', 'coverage'], [], []]", i);
|
| + "[0, port, ['libraries', '%" Pd "', 'coverage'], [], []]",
|
| + vmlib.index());
|
|
|
| Array& service_msg = Array::Handle();
|
| - service_msg = Eval(h_lib, buf);
|
| + 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\",\"user_name\":\"test-lib\","
|
| - "\"kind\":\"script\"},\"hits\":[5,1,6,1]}]}", lib.index());
|
| + "{\"type\":\"CodeCoverage\",\"id\":\"coverage\",\"coverage\":["
|
| + "{\"source\":\"test-lib\",\"script\":{\"type\":\"@Script\","
|
| + "\"id\":\"libraries\\/%" Pd "\\/scripts\\/test-lib\","
|
| + "\"name\":\"test-lib\",\"user_name\":\"test-lib\","
|
| + "\"kind\":\"script\"},\"hits\":[5,1,6,1]}]}",
|
| + vmlib.index());
|
| EXPECT_STREQ(buf, handler.msg());
|
| }
|
|
|
| @@ -1509,12 +1618,12 @@ TEST_CASE(Service_ClassesCoverage) {
|
| "}";
|
|
|
| Isolate* isolate = Isolate::Current();
|
| - Dart_Handle h_lib = TestCase::LoadTestScript(kScript, NULL);
|
| - EXPECT_VALID(h_lib);
|
| - Library& lib = Library::Handle();
|
| - lib ^= Api::UnwrapHandle(h_lib);
|
| - EXPECT(!lib.IsNull());
|
| - Dart_Handle result = Dart_Invoke(h_lib, NewString("main"), 0, NULL);
|
| + 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.
|
| @@ -1522,11 +1631,11 @@ TEST_CASE(Service_ClassesCoverage) {
|
| Dart_Port port_id = PortMap::CreatePort(&handler);
|
| Dart_Handle port = Api::NewHandle(isolate, SendPort::New(port_id));
|
| EXPECT_VALID(port);
|
| - EXPECT_VALID(Dart_SetField(h_lib, NewString("port"), port));
|
| + EXPECT_VALID(Dart_SetField(lib, NewString("port"), port));
|
|
|
| // Look up the service id of Foo.
|
| const Class& cls = Class::Handle(
|
| - lib.LookupClass(String::Handle(String::New("Foo"))));
|
| + vmlib.LookupClass(String::Handle(String::New("Foo"))));
|
| ASSERT(!cls.IsNull());
|
| ClassTable* table = isolate->class_table();
|
| intptr_t i;
|
| @@ -1541,15 +1650,16 @@ TEST_CASE(Service_ClassesCoverage) {
|
| "[0, port, ['classes', '%" Pd "', 'coverage'], [], []]", i);
|
|
|
| Array& service_msg = Array::Handle();
|
| - service_msg = Eval(h_lib, buf);
|
| + 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\",\"user_name\":\"test-lib\","
|
| - "\"kind\":\"script\"},\"hits\":[5,1,7,4,8,3]}]}", lib.index());
|
| + "{\"type\":\"CodeCoverage\",\"id\":\"coverage\",\"coverage\":["
|
| + "{\"source\":\"test-lib\",\"script\":{\"type\":\"@Script\","
|
| + "\"id\":\"libraries\\/%" Pd "\\/scripts\\/test-lib\","
|
| + "\"name\":\"test-lib\",\"user_name\":\"test-lib\","
|
| + "\"kind\":\"script\"},\"hits\":[5,1,7,4,8,3]}]}",
|
| + vmlib.index());
|
| EXPECT_STREQ(buf, handler.msg());
|
| }
|
|
|
| @@ -1573,12 +1683,12 @@ TEST_CASE(Service_ClassesFunctionsCoverage) {
|
| "}";
|
|
|
| Isolate* isolate = Isolate::Current();
|
| - Dart_Handle h_lib = TestCase::LoadTestScript(kScript, NULL);
|
| - EXPECT_VALID(h_lib);
|
| - Library& lib = Library::Handle();
|
| - lib ^= Api::UnwrapHandle(h_lib);
|
| - EXPECT(!lib.IsNull());
|
| - Dart_Handle result = Dart_Invoke(h_lib, NewString("main"), 0, NULL);
|
| + 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.
|
| @@ -1586,11 +1696,11 @@ TEST_CASE(Service_ClassesFunctionsCoverage) {
|
| Dart_Port port_id = PortMap::CreatePort(&handler);
|
| Dart_Handle port = Api::NewHandle(isolate, SendPort::New(port_id));
|
| EXPECT_VALID(port);
|
| - EXPECT_VALID(Dart_SetField(h_lib, NewString("port"), port));
|
| + EXPECT_VALID(Dart_SetField(lib, NewString("port"), port));
|
|
|
| // Look up the service id of Foo.
|
| const Class& cls = Class::Handle(
|
| - lib.LookupClass(String::Handle(String::New("Foo"))));
|
| + vmlib.LookupClass(String::Handle(String::New("Foo"))));
|
| ASSERT(!cls.IsNull());
|
| ClassTable* table = isolate->class_table();
|
| intptr_t i;
|
| @@ -1615,7 +1725,7 @@ TEST_CASE(Service_ClassesFunctionsCoverage) {
|
| "'% " Pd "', 'coverage'], [], []]", i, function_id);
|
|
|
| Array& service_msg = Array::Handle();
|
| - service_msg = Eval(h_lib, buf);
|
| + service_msg = Eval(lib, buf);
|
| Service::HandleIsolateMessage(isolate, service_msg);
|
| handler.HandleNextMessage();
|
| OS::SNPrint(buf, sizeof(buf),
|
| @@ -1623,7 +1733,7 @@ TEST_CASE(Service_ClassesFunctionsCoverage) {
|
| "{\"source\":\"test-lib\",\"script\":{\"type\":\"@Script\","
|
| "\"id\":\"libraries\\/%" Pd "\\/scripts\\/test-lib\","
|
| "\"name\":\"test-lib\",\"user_name\":\"test-lib\","
|
| - "\"kind\":\"script\"},\"hits\":[7,4,8,3]}]}", lib.index());
|
| + "\"kind\":\"script\"},\"hits\":[7,4,8,3]}]}", vmlib.index());
|
| EXPECT_STREQ(buf, handler.msg());
|
| }
|
|
|
| @@ -1641,12 +1751,9 @@ TEST_CASE(Service_AllocationProfile) {
|
| "}";
|
|
|
| Isolate* isolate = Isolate::Current();
|
| - Dart_Handle h_lib = TestCase::LoadTestScript(kScript, NULL);
|
| - EXPECT_VALID(h_lib);
|
| - Library& lib = Library::Handle();
|
| - lib ^= Api::UnwrapHandle(h_lib);
|
| - EXPECT(!lib.IsNull());
|
| - Dart_Handle result = Dart_Invoke(h_lib, NewString("main"), 0, NULL);
|
| + Dart_Handle lib = TestCase::LoadTestScript(kScript, NULL);
|
| + EXPECT_VALID(lib);
|
| + 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.
|
| @@ -1654,29 +1761,29 @@ TEST_CASE(Service_AllocationProfile) {
|
| Dart_Port port_id = PortMap::CreatePort(&handler);
|
| Dart_Handle port = Api::NewHandle(isolate, SendPort::New(port_id));
|
| EXPECT_VALID(port);
|
| - EXPECT_VALID(Dart_SetField(h_lib, NewString("port"), port));
|
| + EXPECT_VALID(Dart_SetField(lib, NewString("port"), port));
|
|
|
| Array& service_msg = Array::Handle();
|
| - service_msg = Eval(h_lib, "[0, port, ['allocationprofile'], [], []]");
|
| + service_msg = Eval(lib, "[0, port, ['allocationprofile'], [], []]");
|
| Service::HandleIsolateMessage(isolate, service_msg);
|
| handler.HandleNextMessage();
|
| EXPECT_SUBSTRING("\"type\":\"AllocationProfile\"", handler.msg());
|
|
|
| // Too long.
|
| - service_msg = Eval(h_lib, "[0, port, ['allocationprofile', 'foo'], [], []]");
|
| + 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(h_lib,
|
| + service_msg = Eval(lib,
|
| "[0, port, ['allocationprofile'], ['gc'], ['cat']]");
|
| Service::HandleIsolateMessage(isolate, service_msg);
|
| handler.HandleNextMessage();
|
| EXPECT_SUBSTRING("\"type\":\"Error\"", handler.msg());
|
|
|
| // Bad reset option.
|
| - service_msg = Eval(h_lib,
|
| + service_msg = Eval(lib,
|
| "[0, port, ['allocationprofile'], ['reset'], ['ff']]");
|
| Service::HandleIsolateMessage(isolate, service_msg);
|
| handler.HandleNextMessage();
|
| @@ -1684,20 +1791,20 @@ TEST_CASE(Service_AllocationProfile) {
|
|
|
| // Good reset.
|
| service_msg =
|
| - Eval(h_lib, "[0, port, ['allocationprofile'], ['reset'], ['true']]");
|
| + Eval(lib, "[0, port, ['allocationprofile'], ['reset'], ['true']]");
|
| Service::HandleIsolateMessage(isolate, service_msg);
|
| handler.HandleNextMessage();
|
| EXPECT_SUBSTRING("\"type\":\"AllocationProfile\"", handler.msg());
|
|
|
| // Good GC.
|
| service_msg =
|
| - Eval(h_lib, "[0, port, ['allocationprofile'], ['gc'], ['full']]");
|
| + Eval(lib, "[0, port, ['allocationprofile'], ['gc'], ['full']]");
|
| Service::HandleIsolateMessage(isolate, service_msg);
|
| handler.HandleNextMessage();
|
| EXPECT_SUBSTRING("\"type\":\"AllocationProfile\"", handler.msg());
|
|
|
| // Good GC and reset.
|
| - service_msg = Eval(h_lib,
|
| + service_msg = Eval(lib,
|
| "[0, port, ['allocationprofile'], ['gc', 'reset'], ['full', 'true']]");
|
| Service::HandleIsolateMessage(isolate, service_msg);
|
| handler.HandleNextMessage();
|
| @@ -1891,12 +1998,9 @@ TEST_CASE(Service_Profile) {
|
| "}";
|
|
|
| Isolate* isolate = Isolate::Current();
|
| - Dart_Handle h_lib = TestCase::LoadTestScript(kScript, NULL);
|
| - EXPECT_VALID(h_lib);
|
| - Library& lib = Library::Handle();
|
| - lib ^= Api::UnwrapHandle(h_lib);
|
| - EXPECT(!lib.IsNull());
|
| - Dart_Handle result = Dart_Invoke(h_lib, NewString("main"), 0, NULL);
|
| + Dart_Handle lib = TestCase::LoadTestScript(kScript, NULL);
|
| + EXPECT_VALID(lib);
|
| + 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.
|
| @@ -1904,22 +2008,22 @@ TEST_CASE(Service_Profile) {
|
| Dart_Port port_id = PortMap::CreatePort(&handler);
|
| Dart_Handle port = Api::NewHandle(isolate, SendPort::New(port_id));
|
| EXPECT_VALID(port);
|
| - EXPECT_VALID(Dart_SetField(h_lib, NewString("port"), port));
|
| + EXPECT_VALID(Dart_SetField(lib, NewString("port"), port));
|
|
|
| Array& service_msg = Array::Handle();
|
| - service_msg = Eval(h_lib, "[0, port, ['profile'], [], []]");
|
| + service_msg = Eval(lib, "[0, port, ['profile'], [], []]");
|
| Service::HandleIsolateMessage(isolate, service_msg);
|
| handler.HandleNextMessage();
|
| // Expect profile
|
| EXPECT_SUBSTRING("\"type\":\"Profile\"", handler.msg());
|
|
|
| - service_msg = Eval(h_lib, "[0, port, ['profile'], ['tags'], ['hide']]");
|
| + service_msg = Eval(lib, "[0, port, ['profile'], ['tags'], ['hide']]");
|
| Service::HandleIsolateMessage(isolate, service_msg);
|
| handler.HandleNextMessage();
|
| // Expect profile
|
| EXPECT_SUBSTRING("\"type\":\"Profile\"", handler.msg());
|
|
|
| - service_msg = Eval(h_lib, "[0, port, ['profile'], ['tags'], ['hidden']]");
|
| + service_msg = Eval(lib, "[0, port, ['profile'], ['tags'], ['hidden']]");
|
| Service::HandleIsolateMessage(isolate, service_msg);
|
| handler.HandleNextMessage();
|
| // Expect error.
|
|
|