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_tools_api.h" | 7 #include "include/dart_tools_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" |
(...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
154 " var d = () { b(); };\n" | 154 " var d = () { b(); };\n" |
155 " return d;\n" | 155 " return d;\n" |
156 " }\n" | 156 " }\n" |
157 "}\n" | 157 "}\n" |
158 "main() {\n" | 158 "main() {\n" |
159 " var z = new A();\n" | 159 " var z = new A();\n" |
160 " var x = z.c();\n" | 160 " var x = z.c();\n" |
161 " x();\n" | 161 " x();\n" |
162 "}"; | 162 "}"; |
163 | 163 |
164 Isolate* isolate = Isolate::Current(); | 164 Isolate* isolate = thread->isolate(); |
165 Dart_Handle lib = TestCase::LoadTestScript(kScript, NULL); | 165 Dart_Handle lib = TestCase::LoadTestScript(kScript, NULL); |
166 EXPECT_VALID(lib); | 166 EXPECT_VALID(lib); |
167 Library& vmlib = Library::Handle(); | 167 Library& vmlib = Library::Handle(); |
168 vmlib ^= Api::UnwrapHandle(lib); | 168 vmlib ^= Api::UnwrapHandle(lib); |
169 EXPECT(!vmlib.IsNull()); | 169 EXPECT(!vmlib.IsNull()); |
170 Dart_Handle result = Dart_Invoke(lib, NewString("main"), 0, NULL); | 170 Dart_Handle result = Dart_Invoke(lib, NewString("main"), 0, NULL); |
171 EXPECT_VALID(result); | 171 EXPECT_VALID(result); |
172 const Class& class_a = Class::Handle(GetClass(vmlib, "A")); | 172 const Class& class_a = Class::Handle(GetClass(vmlib, "A")); |
173 EXPECT(!class_a.IsNull()); | 173 EXPECT(!class_a.IsNull()); |
174 const Function& function_c = Function::Handle(GetFunction(class_a, "c")); | 174 const Function& function_c = Function::Handle(GetFunction(class_a, "c")); |
175 EXPECT(!function_c.IsNull()); | 175 EXPECT(!function_c.IsNull()); |
176 const Code& code_c = Code::Handle(function_c.CurrentCode()); | 176 const Code& code_c = Code::Handle(function_c.CurrentCode()); |
177 EXPECT(!code_c.IsNull()); | 177 EXPECT(!code_c.IsNull()); |
178 // Use the entry of the code object as it's reference. | 178 // Use the entry of the code object as it's reference. |
179 uword entry = code_c.EntryPoint(); | 179 uword entry = code_c.EntryPoint(); |
180 int64_t compile_timestamp = code_c.compile_timestamp(); | 180 int64_t compile_timestamp = code_c.compile_timestamp(); |
181 EXPECT_GT(code_c.Size(), 16); | 181 EXPECT_GT(code_c.Size(), 16); |
182 uword last = entry + code_c.Size(); | 182 uword last = entry + code_c.Size(); |
183 | 183 |
184 // Build a mock message handler and wrap it in a dart port. | 184 // Build a mock message handler and wrap it in a dart port. |
185 ServiceTestMessageHandler handler; | 185 ServiceTestMessageHandler handler; |
186 Dart_Port port_id = PortMap::CreatePort(&handler); | 186 Dart_Port port_id = PortMap::CreatePort(&handler); |
187 Dart_Handle port = Api::NewHandle(isolate, SendPort::New(port_id)); | 187 Dart_Handle port = Api::NewHandle(thread, SendPort::New(port_id)); |
188 EXPECT_VALID(port); | 188 EXPECT_VALID(port); |
189 EXPECT_VALID(Dart_SetField(lib, NewString("port"), port)); | 189 EXPECT_VALID(Dart_SetField(lib, NewString("port"), port)); |
190 | 190 |
191 Array& service_msg = Array::Handle(); | 191 Array& service_msg = Array::Handle(); |
192 | 192 |
193 // Request an invalid code object. | 193 // Request an invalid code object. |
194 service_msg = | 194 service_msg = |
195 Eval(lib, "[0, port, '0', 'getObject', ['objectId'], ['code/0']]"); | 195 Eval(lib, "[0, port, '0', 'getObject', ['objectId'], ['code/0']]"); |
196 Service::HandleIsolateMessage(isolate, service_msg); | 196 Service::HandleIsolateMessage(isolate, service_msg); |
197 EXPECT_EQ(MessageHandler::kOK, handler.HandleNextMessage()); | 197 EXPECT_EQ(MessageHandler::kOK, handler.HandleNextMessage()); |
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
260 } | 260 } |
261 | 261 |
262 | 262 |
263 TEST_CASE(Service_TokenStream) { | 263 TEST_CASE(Service_TokenStream) { |
264 const char* kScript = | 264 const char* kScript = |
265 "var port;\n" // Set to our mock port by C++. | 265 "var port;\n" // Set to our mock port by C++. |
266 "\n" | 266 "\n" |
267 "main() {\n" | 267 "main() {\n" |
268 "}"; | 268 "}"; |
269 | 269 |
270 Isolate* isolate = Isolate::Current(); | 270 Isolate* isolate = thread->isolate(); |
271 | 271 |
272 Dart_Handle lib = TestCase::LoadTestScript(kScript, NULL); | 272 Dart_Handle lib = TestCase::LoadTestScript(kScript, NULL); |
273 EXPECT_VALID(lib); | 273 EXPECT_VALID(lib); |
274 Library& vmlib = Library::Handle(); | 274 Library& vmlib = Library::Handle(); |
275 vmlib ^= Api::UnwrapHandle(lib); | 275 vmlib ^= Api::UnwrapHandle(lib); |
276 EXPECT(!vmlib.IsNull()); | 276 EXPECT(!vmlib.IsNull()); |
277 | 277 |
278 const String& script_name = String::Handle(String::New("test-lib")); | 278 const String& script_name = String::Handle(String::New("test-lib")); |
279 EXPECT(!script_name.IsNull()); | 279 EXPECT(!script_name.IsNull()); |
280 const Script& script = Script::Handle(vmlib.LookupScript(script_name)); | 280 const Script& script = Script::Handle(vmlib.LookupScript(script_name)); |
281 EXPECT(!script.IsNull()); | 281 EXPECT(!script.IsNull()); |
282 | 282 |
283 const TokenStream& token_stream = TokenStream::Handle(script.tokens()); | 283 const TokenStream& token_stream = TokenStream::Handle(script.tokens()); |
284 EXPECT(!token_stream.IsNull()); | 284 EXPECT(!token_stream.IsNull()); |
285 ObjectIdRing* ring = isolate->object_id_ring(); | 285 ObjectIdRing* ring = isolate->object_id_ring(); |
286 intptr_t id = ring->GetIdForObject(token_stream.raw()); | 286 intptr_t id = ring->GetIdForObject(token_stream.raw()); |
287 | 287 |
288 // Build a mock message handler and wrap it in a dart port. | 288 // Build a mock message handler and wrap it in a dart port. |
289 ServiceTestMessageHandler handler; | 289 ServiceTestMessageHandler handler; |
290 Dart_Port port_id = PortMap::CreatePort(&handler); | 290 Dart_Port port_id = PortMap::CreatePort(&handler); |
291 Dart_Handle port = Api::NewHandle(isolate, SendPort::New(port_id)); | 291 Dart_Handle port = Api::NewHandle(thread, SendPort::New(port_id)); |
292 EXPECT_VALID(port); | 292 EXPECT_VALID(port); |
293 EXPECT_VALID(Dart_SetField(lib, NewString("port"), port)); | 293 EXPECT_VALID(Dart_SetField(lib, NewString("port"), port)); |
294 | 294 |
295 Array& service_msg = Array::Handle(); | 295 Array& service_msg = Array::Handle(); |
296 | 296 |
297 // Fetch object. | 297 // Fetch object. |
298 service_msg = EvalF(lib, "[0, port, '0', 'getObject', " | 298 service_msg = EvalF(lib, "[0, port, '0', 'getObject', " |
299 "['objectId'], ['objects/%" Pd "']]", id); | 299 "['objectId'], ['objects/%" Pd "']]", id); |
300 Service::HandleIsolateMessage(isolate, service_msg); | 300 Service::HandleIsolateMessage(isolate, service_msg); |
301 EXPECT_EQ(MessageHandler::kOK, handler.HandleNextMessage()); | 301 EXPECT_EQ(MessageHandler::kOK, handler.HandleNextMessage()); |
(...skipping 17 matching lines...) Expand all Loading... |
319 " var d = () { b(); };\n" | 319 " var d = () { b(); };\n" |
320 " return d;\n" | 320 " return d;\n" |
321 " }\n" | 321 " }\n" |
322 "}\n" | 322 "}\n" |
323 "main() {\n" | 323 "main() {\n" |
324 " var z = new A();\n" | 324 " var z = new A();\n" |
325 " var x = z.c();\n" | 325 " var x = z.c();\n" |
326 " x();\n" | 326 " x();\n" |
327 "}"; | 327 "}"; |
328 | 328 |
329 Isolate* isolate = Isolate::Current(); | 329 Isolate* isolate = thread->isolate(); |
330 Dart_Handle lib = TestCase::LoadTestScript(kScript, NULL); | 330 Dart_Handle lib = TestCase::LoadTestScript(kScript, NULL); |
331 EXPECT_VALID(lib); | 331 EXPECT_VALID(lib); |
332 Library& vmlib = Library::Handle(); | 332 Library& vmlib = Library::Handle(); |
333 vmlib ^= Api::UnwrapHandle(lib); | 333 vmlib ^= Api::UnwrapHandle(lib); |
334 EXPECT(!vmlib.IsNull()); | 334 EXPECT(!vmlib.IsNull()); |
335 Dart_Handle result = Dart_Invoke(lib, NewString("main"), 0, NULL); | 335 Dart_Handle result = Dart_Invoke(lib, NewString("main"), 0, NULL); |
336 EXPECT_VALID(result); | 336 EXPECT_VALID(result); |
337 const Class& class_a = Class::Handle(GetClass(vmlib, "A")); | 337 const Class& class_a = Class::Handle(GetClass(vmlib, "A")); |
338 EXPECT(!class_a.IsNull()); | 338 EXPECT(!class_a.IsNull()); |
339 const Function& function_c = Function::Handle(GetFunction(class_a, "c")); | 339 const Function& function_c = Function::Handle(GetFunction(class_a, "c")); |
340 EXPECT(!function_c.IsNull()); | 340 EXPECT(!function_c.IsNull()); |
341 const Code& code_c = Code::Handle(function_c.CurrentCode()); | 341 const Code& code_c = Code::Handle(function_c.CurrentCode()); |
342 EXPECT(!code_c.IsNull()); | 342 EXPECT(!code_c.IsNull()); |
343 | 343 |
344 const PcDescriptors& descriptors = | 344 const PcDescriptors& descriptors = |
345 PcDescriptors::Handle(code_c.pc_descriptors()); | 345 PcDescriptors::Handle(code_c.pc_descriptors()); |
346 EXPECT(!descriptors.IsNull()); | 346 EXPECT(!descriptors.IsNull()); |
347 ObjectIdRing* ring = isolate->object_id_ring(); | 347 ObjectIdRing* ring = isolate->object_id_ring(); |
348 intptr_t id = ring->GetIdForObject(descriptors.raw()); | 348 intptr_t id = ring->GetIdForObject(descriptors.raw()); |
349 | 349 |
350 // Build a mock message handler and wrap it in a dart port. | 350 // Build a mock message handler and wrap it in a dart port. |
351 ServiceTestMessageHandler handler; | 351 ServiceTestMessageHandler handler; |
352 Dart_Port port_id = PortMap::CreatePort(&handler); | 352 Dart_Port port_id = PortMap::CreatePort(&handler); |
353 Dart_Handle port = Api::NewHandle(isolate, SendPort::New(port_id)); | 353 Dart_Handle port = Api::NewHandle(thread, SendPort::New(port_id)); |
354 EXPECT_VALID(port); | 354 EXPECT_VALID(port); |
355 EXPECT_VALID(Dart_SetField(lib, NewString("port"), port)); | 355 EXPECT_VALID(Dart_SetField(lib, NewString("port"), port)); |
356 | 356 |
357 Array& service_msg = Array::Handle(); | 357 Array& service_msg = Array::Handle(); |
358 | 358 |
359 // Fetch object. | 359 // Fetch object. |
360 service_msg = EvalF(lib, "[0, port, '0', 'getObject', " | 360 service_msg = EvalF(lib, "[0, port, '0', 'getObject', " |
361 "['objectId'], ['objects/%" Pd "']]", id); | 361 "['objectId'], ['objects/%" Pd "']]", id); |
362 Service::HandleIsolateMessage(isolate, service_msg); | 362 Service::HandleIsolateMessage(isolate, service_msg); |
363 EXPECT_EQ(MessageHandler::kOK, handler.HandleNextMessage()); | 363 EXPECT_EQ(MessageHandler::kOK, handler.HandleNextMessage()); |
(...skipping 16 matching lines...) Expand all Loading... |
380 " var d = () { b(); };\n" | 380 " var d = () { b(); };\n" |
381 " return d;\n" | 381 " return d;\n" |
382 " }\n" | 382 " }\n" |
383 "}\n" | 383 "}\n" |
384 "main() {\n" | 384 "main() {\n" |
385 " var z = new A();\n" | 385 " var z = new A();\n" |
386 " var x = z.c();\n" | 386 " var x = z.c();\n" |
387 " x();\n" | 387 " x();\n" |
388 "}"; | 388 "}"; |
389 | 389 |
390 Isolate* isolate = Isolate::Current(); | 390 Isolate* isolate = thread->isolate(); |
391 Dart_Handle lib = TestCase::LoadTestScript(kScript, NULL); | 391 Dart_Handle lib = TestCase::LoadTestScript(kScript, NULL); |
392 EXPECT_VALID(lib); | 392 EXPECT_VALID(lib); |
393 Library& vmlib = Library::Handle(); | 393 Library& vmlib = Library::Handle(); |
394 vmlib ^= Api::UnwrapHandle(lib); | 394 vmlib ^= Api::UnwrapHandle(lib); |
395 EXPECT(!vmlib.IsNull()); | 395 EXPECT(!vmlib.IsNull()); |
396 Dart_Handle result = Dart_Invoke(lib, NewString("main"), 0, NULL); | 396 Dart_Handle result = Dart_Invoke(lib, NewString("main"), 0, NULL); |
397 EXPECT_VALID(result); | 397 EXPECT_VALID(result); |
398 const Class& class_a = Class::Handle(GetClass(vmlib, "A")); | 398 const Class& class_a = Class::Handle(GetClass(vmlib, "A")); |
399 EXPECT(!class_a.IsNull()); | 399 EXPECT(!class_a.IsNull()); |
400 const Function& function_c = Function::Handle(GetFunction(class_a, "c")); | 400 const Function& function_c = Function::Handle(GetFunction(class_a, "c")); |
401 EXPECT(!function_c.IsNull()); | 401 EXPECT(!function_c.IsNull()); |
402 const Code& code_c = Code::Handle(function_c.CurrentCode()); | 402 const Code& code_c = Code::Handle(function_c.CurrentCode()); |
403 EXPECT(!code_c.IsNull()); | 403 EXPECT(!code_c.IsNull()); |
404 | 404 |
405 const LocalVarDescriptors& descriptors = | 405 const LocalVarDescriptors& descriptors = |
406 LocalVarDescriptors::Handle(code_c.GetLocalVarDescriptors()); | 406 LocalVarDescriptors::Handle(code_c.GetLocalVarDescriptors()); |
407 // Generate an ID for this object. | 407 // Generate an ID for this object. |
408 ObjectIdRing* ring = isolate->object_id_ring(); | 408 ObjectIdRing* ring = isolate->object_id_ring(); |
409 intptr_t id = ring->GetIdForObject(descriptors.raw()); | 409 intptr_t id = ring->GetIdForObject(descriptors.raw()); |
410 | 410 |
411 // Build a mock message handler and wrap it in a dart port. | 411 // Build a mock message handler and wrap it in a dart port. |
412 ServiceTestMessageHandler handler; | 412 ServiceTestMessageHandler handler; |
413 Dart_Port port_id = PortMap::CreatePort(&handler); | 413 Dart_Port port_id = PortMap::CreatePort(&handler); |
414 Dart_Handle port = Api::NewHandle(isolate, SendPort::New(port_id)); | 414 Dart_Handle port = Api::NewHandle(thread, SendPort::New(port_id)); |
415 EXPECT_VALID(port); | 415 EXPECT_VALID(port); |
416 EXPECT_VALID(Dart_SetField(lib, NewString("port"), port)); | 416 EXPECT_VALID(Dart_SetField(lib, NewString("port"), port)); |
417 | 417 |
418 Array& service_msg = Array::Handle(); | 418 Array& service_msg = Array::Handle(); |
419 | 419 |
420 // Fetch object. | 420 // Fetch object. |
421 service_msg = EvalF(lib, "[0, port, '0', 'getObject', " | 421 service_msg = EvalF(lib, "[0, port, '0', 'getObject', " |
422 "['objectId'], ['objects/%" Pd "']]", id); | 422 "['objectId'], ['objects/%" Pd "']]", id); |
423 Service::HandleIsolateMessage(isolate, service_msg); | 423 Service::HandleIsolateMessage(isolate, service_msg); |
424 EXPECT_EQ(MessageHandler::kOK, handler.HandleNextMessage()); | 424 EXPECT_EQ(MessageHandler::kOK, handler.HandleNextMessage()); |
425 // Check type. | 425 // Check type. |
426 EXPECT_SUBSTRING("\"type\":\"Object\"", handler.msg()); | 426 EXPECT_SUBSTRING("\"type\":\"Object\"", handler.msg()); |
427 EXPECT_SUBSTRING("\"_vmType\":\"LocalVarDescriptors\"", handler.msg()); | 427 EXPECT_SUBSTRING("\"_vmType\":\"LocalVarDescriptors\"", handler.msg()); |
428 // Check for members array. | 428 // Check for members array. |
429 EXPECT_SUBSTRING("\"members\":[", handler.msg()); | 429 EXPECT_SUBSTRING("\"members\":[", handler.msg()); |
430 } | 430 } |
431 | 431 |
432 | 432 |
433 TEST_CASE(Service_Address) { | 433 TEST_CASE(Service_Address) { |
434 const char* kScript = | 434 const char* kScript = |
435 "var port;\n" // Set to our mock port by C++. | 435 "var port;\n" // Set to our mock port by C++. |
436 "\n" | 436 "\n" |
437 "main() {\n" | 437 "main() {\n" |
438 "}"; | 438 "}"; |
439 | 439 |
440 Isolate* isolate = Isolate::Current(); | 440 Isolate* isolate = thread->isolate(); |
441 Dart_Handle lib = TestCase::LoadTestScript(kScript, NULL); | 441 Dart_Handle lib = TestCase::LoadTestScript(kScript, NULL); |
442 EXPECT_VALID(lib); | 442 EXPECT_VALID(lib); |
443 | 443 |
444 // Build a mock message handler and wrap it in a dart port. | 444 // Build a mock message handler and wrap it in a dart port. |
445 ServiceTestMessageHandler handler; | 445 ServiceTestMessageHandler handler; |
446 Dart_Port port_id = PortMap::CreatePort(&handler); | 446 Dart_Port port_id = PortMap::CreatePort(&handler); |
447 Dart_Handle port = Api::NewHandle(isolate, SendPort::New(port_id)); | 447 Dart_Handle port = Api::NewHandle(thread, SendPort::New(port_id)); |
448 EXPECT_VALID(port); | 448 EXPECT_VALID(port); |
449 EXPECT_VALID(Dart_SetField(lib, NewString("port"), port)); | 449 EXPECT_VALID(Dart_SetField(lib, NewString("port"), port)); |
450 | 450 |
451 const String& str = String::Handle(String::New("foobar", Heap::kOld)); | 451 const String& str = String::Handle(String::New("foobar", Heap::kOld)); |
452 Array& service_msg = Array::Handle(); | 452 Array& service_msg = Array::Handle(); |
453 // Note: If we ever introduce old space compaction, this test might fail. | 453 // Note: If we ever introduce old space compaction, this test might fail. |
454 uword start_addr = RawObject::ToAddr(str.raw()); | 454 uword start_addr = RawObject::ToAddr(str.raw()); |
455 // Expect to find 'str', also from internal addresses. | 455 // Expect to find 'str', also from internal addresses. |
456 for (int offset = 0; offset < kObjectAlignment; ++offset) { | 456 for (int offset = 0; offset < kObjectAlignment; ++offset) { |
457 uword addr = start_addr + offset; | 457 uword addr = start_addr + offset; |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
511 "\n" | 511 "\n" |
512 "var x = 7;\n" | 512 "var x = 7;\n" |
513 "main() {\n" | 513 "main() {\n" |
514 " x = x * x;\n" | 514 " x = x * x;\n" |
515 " x = x / 13;\n" | 515 " x = x / 13;\n" |
516 "}"; | 516 "}"; |
517 | 517 |
518 Dart_RegisterRootServiceRequestCallback("alpha", alpha_callback, NULL); | 518 Dart_RegisterRootServiceRequestCallback("alpha", alpha_callback, NULL); |
519 Dart_RegisterRootServiceRequestCallback("beta", beta_callback, NULL); | 519 Dart_RegisterRootServiceRequestCallback("beta", beta_callback, NULL); |
520 | 520 |
521 Isolate* isolate = Isolate::Current(); | |
522 Dart_Handle lib = TestCase::LoadTestScript(kScript, NULL); | 521 Dart_Handle lib = TestCase::LoadTestScript(kScript, NULL); |
523 EXPECT_VALID(lib); | 522 EXPECT_VALID(lib); |
524 Dart_Handle result = Dart_Invoke(lib, NewString("main"), 0, NULL); | 523 Dart_Handle result = Dart_Invoke(lib, NewString("main"), 0, NULL); |
525 EXPECT_VALID(result); | 524 EXPECT_VALID(result); |
526 | 525 |
527 // Build a mock message handler and wrap it in a dart port. | 526 // Build a mock message handler and wrap it in a dart port. |
528 ServiceTestMessageHandler handler; | 527 ServiceTestMessageHandler handler; |
529 Dart_Port port_id = PortMap::CreatePort(&handler); | 528 Dart_Port port_id = PortMap::CreatePort(&handler); |
530 Dart_Handle port = Api::NewHandle(isolate, SendPort::New(port_id)); | 529 Dart_Handle port = Api::NewHandle(thread, SendPort::New(port_id)); |
531 EXPECT_VALID(port); | 530 EXPECT_VALID(port); |
532 EXPECT_VALID(Dart_SetField(lib, NewString("port"), port)); | 531 EXPECT_VALID(Dart_SetField(lib, NewString("port"), port)); |
533 | 532 |
534 | 533 |
535 Array& service_msg = Array::Handle(); | 534 Array& service_msg = Array::Handle(); |
536 service_msg = Eval(lib, "[0, port, '\"', 'alpha', [], []]"); | 535 service_msg = Eval(lib, "[0, port, '\"', 'alpha', [], []]"); |
537 Service::HandleRootMessage(service_msg); | 536 Service::HandleRootMessage(service_msg); |
538 EXPECT_EQ(MessageHandler::kOK, handler.HandleNextMessage()); | 537 EXPECT_EQ(MessageHandler::kOK, handler.HandleNextMessage()); |
539 EXPECT_STREQ("{\"jsonrpc\":\"2.0\", \"result\":alpha,\"id\":\"\\\"\"}", | 538 EXPECT_STREQ("{\"jsonrpc\":\"2.0\", \"result\":alpha,\"id\":\"\\\"\"}", |
540 handler.msg()); | 539 handler.msg()); |
(...skipping 11 matching lines...) Expand all Loading... |
552 "\n" | 551 "\n" |
553 "var x = 7;\n" | 552 "var x = 7;\n" |
554 "main() {\n" | 553 "main() {\n" |
555 " x = x * x;\n" | 554 " x = x * x;\n" |
556 " x = x / 13;\n" | 555 " x = x / 13;\n" |
557 "}"; | 556 "}"; |
558 | 557 |
559 Dart_RegisterIsolateServiceRequestCallback("alpha", alpha_callback, NULL); | 558 Dart_RegisterIsolateServiceRequestCallback("alpha", alpha_callback, NULL); |
560 Dart_RegisterIsolateServiceRequestCallback("beta", beta_callback, NULL); | 559 Dart_RegisterIsolateServiceRequestCallback("beta", beta_callback, NULL); |
561 | 560 |
562 Isolate* isolate = Isolate::Current(); | 561 Isolate* isolate = thread->isolate(); |
563 Dart_Handle lib = TestCase::LoadTestScript(kScript, NULL); | 562 Dart_Handle lib = TestCase::LoadTestScript(kScript, NULL); |
564 EXPECT_VALID(lib); | 563 EXPECT_VALID(lib); |
565 Dart_Handle result = Dart_Invoke(lib, NewString("main"), 0, NULL); | 564 Dart_Handle result = Dart_Invoke(lib, NewString("main"), 0, NULL); |
566 EXPECT_VALID(result); | 565 EXPECT_VALID(result); |
567 | 566 |
568 // Build a mock message handler and wrap it in a dart port. | 567 // Build a mock message handler and wrap it in a dart port. |
569 ServiceTestMessageHandler handler; | 568 ServiceTestMessageHandler handler; |
570 Dart_Port port_id = PortMap::CreatePort(&handler); | 569 Dart_Port port_id = PortMap::CreatePort(&handler); |
571 Dart_Handle port = Api::NewHandle(isolate, SendPort::New(port_id)); | 570 Dart_Handle port = Api::NewHandle(thread, SendPort::New(port_id)); |
572 EXPECT_VALID(port); | 571 EXPECT_VALID(port); |
573 EXPECT_VALID(Dart_SetField(lib, NewString("port"), port)); | 572 EXPECT_VALID(Dart_SetField(lib, NewString("port"), port)); |
574 | 573 |
575 Array& service_msg = Array::Handle(); | 574 Array& service_msg = Array::Handle(); |
576 service_msg = Eval(lib, "[0, port, '0', 'alpha', [], []]"); | 575 service_msg = Eval(lib, "[0, port, '0', 'alpha', [], []]"); |
577 Service::HandleIsolateMessage(isolate, service_msg); | 576 Service::HandleIsolateMessage(isolate, service_msg); |
578 EXPECT_EQ(MessageHandler::kOK, handler.HandleNextMessage()); | 577 EXPECT_EQ(MessageHandler::kOK, handler.HandleNextMessage()); |
579 EXPECT_STREQ("{\"jsonrpc\":\"2.0\", \"result\":alpha,\"id\":\"0\"}", | 578 EXPECT_STREQ("{\"jsonrpc\":\"2.0\", \"result\":alpha,\"id\":\"0\"}", |
580 handler.msg()); | 579 handler.msg()); |
581 service_msg = Eval(lib, "[0, port, '0', 'beta', [], []]"); | 580 service_msg = Eval(lib, "[0, port, '0', 'beta', [], []]"); |
582 Service::HandleIsolateMessage(isolate, service_msg); | 581 Service::HandleIsolateMessage(isolate, service_msg); |
583 EXPECT_EQ(MessageHandler::kOK, handler.HandleNextMessage()); | 582 EXPECT_EQ(MessageHandler::kOK, handler.HandleNextMessage()); |
584 EXPECT_STREQ("{\"jsonrpc\":\"2.0\", \"result\":beta,\"id\":\"0\"}", | 583 EXPECT_STREQ("{\"jsonrpc\":\"2.0\", \"result\":beta,\"id\":\"0\"}", |
585 handler.msg()); | 584 handler.msg()); |
586 } | 585 } |
587 | 586 |
588 // TODO(zra): Remove when tests are ready to enable. | 587 // TODO(zra): Remove when tests are ready to enable. |
589 #if !defined(TARGET_ARCH_ARM64) | 588 #if !defined(TARGET_ARCH_ARM64) |
590 | 589 |
591 TEST_CASE(Service_Profile) { | 590 TEST_CASE(Service_Profile) { |
592 const char* kScript = | 591 const char* kScript = |
593 "var port;\n" // Set to our mock port by C++. | 592 "var port;\n" // Set to our mock port by C++. |
594 "\n" | 593 "\n" |
595 "var x = 7;\n" | 594 "var x = 7;\n" |
596 "main() {\n" | 595 "main() {\n" |
597 " x = x * x;\n" | 596 " x = x * x;\n" |
598 " x = x / 13;\n" | 597 " x = x / 13;\n" |
599 "}"; | 598 "}"; |
600 | 599 |
601 Isolate* isolate = Isolate::Current(); | 600 Isolate* isolate = thread->isolate(); |
602 Dart_Handle lib = TestCase::LoadTestScript(kScript, NULL); | 601 Dart_Handle lib = TestCase::LoadTestScript(kScript, NULL); |
603 EXPECT_VALID(lib); | 602 EXPECT_VALID(lib); |
604 Dart_Handle result = Dart_Invoke(lib, NewString("main"), 0, NULL); | 603 Dart_Handle result = Dart_Invoke(lib, NewString("main"), 0, NULL); |
605 EXPECT_VALID(result); | 604 EXPECT_VALID(result); |
606 | 605 |
607 // Build a mock message handler and wrap it in a dart port. | 606 // Build a mock message handler and wrap it in a dart port. |
608 ServiceTestMessageHandler handler; | 607 ServiceTestMessageHandler handler; |
609 Dart_Port port_id = PortMap::CreatePort(&handler); | 608 Dart_Port port_id = PortMap::CreatePort(&handler); |
610 Dart_Handle port = Api::NewHandle(isolate, SendPort::New(port_id)); | 609 Dart_Handle port = Api::NewHandle(thread, SendPort::New(port_id)); |
611 EXPECT_VALID(port); | 610 EXPECT_VALID(port); |
612 EXPECT_VALID(Dart_SetField(lib, NewString("port"), port)); | 611 EXPECT_VALID(Dart_SetField(lib, NewString("port"), port)); |
613 | 612 |
614 Array& service_msg = Array::Handle(); | 613 Array& service_msg = Array::Handle(); |
615 service_msg = Eval(lib, "[0, port, '0', '_getCpuProfile', [], []]"); | 614 service_msg = Eval(lib, "[0, port, '0', '_getCpuProfile', [], []]"); |
616 Service::HandleIsolateMessage(isolate, service_msg); | 615 Service::HandleIsolateMessage(isolate, service_msg); |
617 EXPECT_EQ(MessageHandler::kOK, handler.HandleNextMessage()); | 616 EXPECT_EQ(MessageHandler::kOK, handler.HandleNextMessage()); |
618 // Expect error (tags required). | 617 // Expect error (tags required). |
619 EXPECT_SUBSTRING("\"error\"", handler.msg()); | 618 EXPECT_SUBSTRING("\"error\"", handler.msg()); |
620 | 619 |
621 service_msg = | 620 service_msg = |
622 Eval(lib, "[0, port, '0', '_getCpuProfile', ['tags'], ['None']]"); | 621 Eval(lib, "[0, port, '0', '_getCpuProfile', ['tags'], ['None']]"); |
623 Service::HandleIsolateMessage(isolate, service_msg); | 622 Service::HandleIsolateMessage(isolate, service_msg); |
624 EXPECT_EQ(MessageHandler::kOK, handler.HandleNextMessage()); | 623 EXPECT_EQ(MessageHandler::kOK, handler.HandleNextMessage()); |
625 // Expect profile | 624 // Expect profile |
626 EXPECT_SUBSTRING("\"type\":\"_CpuProfile\"", handler.msg()); | 625 EXPECT_SUBSTRING("\"type\":\"_CpuProfile\"", handler.msg()); |
627 | 626 |
628 service_msg = | 627 service_msg = |
629 Eval(lib, "[0, port, '0', '_getCpuProfile', ['tags'], ['Bogus']]"); | 628 Eval(lib, "[0, port, '0', '_getCpuProfile', ['tags'], ['Bogus']]"); |
630 Service::HandleIsolateMessage(isolate, service_msg); | 629 Service::HandleIsolateMessage(isolate, service_msg); |
631 EXPECT_EQ(MessageHandler::kOK, handler.HandleNextMessage()); | 630 EXPECT_EQ(MessageHandler::kOK, handler.HandleNextMessage()); |
632 // Expect error. | 631 // Expect error. |
633 EXPECT_SUBSTRING("\"error\"", handler.msg()); | 632 EXPECT_SUBSTRING("\"error\"", handler.msg()); |
634 } | 633 } |
635 | 634 |
636 #endif // !defined(TARGET_ARCH_ARM64) | 635 #endif // !defined(TARGET_ARCH_ARM64) |
637 | 636 |
638 } // namespace dart | 637 } // namespace dart |
OLD | NEW |