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

Side by Side Diff: runtime/vm/service_test.cc

Issue 553973004: Add support for TokenStream, LocalVarDescriptors, and PcDescriptors over service (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 6 years, 3 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « runtime/vm/object.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 #include "platform/globals.h" 5 #include "platform/globals.h"
6 6
7 #include "include/dart_debugger_api.h" 7 #include "include/dart_debugger_api.h"
8 #include "vm/dart_api_impl.h" 8 #include "vm/dart_api_impl.h"
9 #include "vm/dart_entry.h" 9 #include "vm/dart_entry.h"
10 #include "vm/debugger.h" 10 #include "vm/debugger.h"
(...skipping 1320 matching lines...) Expand 10 before | Expand all | Expand 10 after
1331 1331
1332 // Request malformed native code. 1332 // Request malformed native code.
1333 service_msg = EvalF(lib, "[0, port, ['code', 'native%" Px "'], [], []]", 1333 service_msg = EvalF(lib, "[0, port, ['code', 'native%" Px "'], [], []]",
1334 address); 1334 address);
1335 Service::HandleIsolateMessage(isolate, service_msg); 1335 Service::HandleIsolateMessage(isolate, service_msg);
1336 handler.HandleNextMessage(); 1336 handler.HandleNextMessage();
1337 EXPECT_SUBSTRING("\"message\":\"Malformed code id:", handler.msg()); 1337 EXPECT_SUBSTRING("\"message\":\"Malformed code id:", handler.msg());
1338 } 1338 }
1339 1339
1340 1340
1341 TEST_CASE(Service_TokenStream) {
1342 const char* kScript =
1343 "var port;\n" // Set to our mock port by C++.
1344 "\n"
1345 "main() {\n"
1346 "}";
1347
1348 Isolate* isolate = Isolate::Current();
1349
1350 Dart_Handle lib = TestCase::LoadTestScript(kScript, NULL);
1351 EXPECT_VALID(lib);
1352 Library& vmlib = Library::Handle();
1353 vmlib ^= Api::UnwrapHandle(lib);
1354 EXPECT(!vmlib.IsNull());
1355
1356 const String& script_name = String::Handle(String::New("test-lib"));
1357 EXPECT(!script_name.IsNull());
1358 const Script& script = Script::Handle(vmlib.LookupScript(script_name));
1359 EXPECT(!script.IsNull());
1360
1361 const TokenStream& token_stream = TokenStream::Handle(script.tokens());
1362 EXPECT(!token_stream.IsNull());
1363 ObjectIdRing* ring = isolate->object_id_ring();
1364 intptr_t id = ring->GetIdForObject(token_stream.raw());
1365
1366 // Build a mock message handler and wrap it in a dart port.
1367 ServiceTestMessageHandler handler;
1368 Dart_Port port_id = PortMap::CreatePort(&handler);
1369 Dart_Handle port = Api::NewHandle(isolate, SendPort::New(port_id));
1370 EXPECT_VALID(port);
1371 EXPECT_VALID(Dart_SetField(lib, NewString("port"), port));
1372
1373 Array& service_msg = Array::Handle();
1374
1375 // Fetch object.
1376 service_msg = EvalF(lib, "[0, port, ['objects', '%" Pd "'], [], []]", id);
1377 Service::HandleIsolateMessage(isolate, service_msg);
1378 handler.HandleNextMessage();
1379
1380 // Check type.
1381 EXPECT_SUBSTRING("\"type\":\"TokenStream\"", handler.msg());
1382 // Check for members array.
1383 EXPECT_SUBSTRING("\"members\":[", handler.msg());
1384 }
1385
1386
1387 TEST_CASE(Service_PcDescriptors) {
1388 const char* kScript =
1389 "var port;\n" // Set to our mock port by C++.
1390 "\n"
1391 "class A {\n"
1392 " var a;\n"
1393 " dynamic b() {}\n"
1394 " dynamic c() {\n"
1395 " var d = () { b(); };\n"
1396 " return d;\n"
1397 " }\n"
1398 "}\n"
1399 "main() {\n"
1400 " var z = new A();\n"
1401 " var x = z.c();\n"
1402 " x();\n"
1403 "}";
1404
1405 Isolate* isolate = Isolate::Current();
1406 Dart_Handle lib = TestCase::LoadTestScript(kScript, NULL);
1407 EXPECT_VALID(lib);
1408 Library& vmlib = Library::Handle();
1409 vmlib ^= Api::UnwrapHandle(lib);
1410 EXPECT(!vmlib.IsNull());
1411 Dart_Handle result = Dart_Invoke(lib, NewString("main"), 0, NULL);
1412 EXPECT_VALID(result);
1413 const Class& class_a = Class::Handle(GetClass(vmlib, "A"));
1414 EXPECT(!class_a.IsNull());
1415 const Function& function_c = Function::Handle(GetFunction(class_a, "c"));
1416 EXPECT(!function_c.IsNull());
1417 const Code& code_c = Code::Handle(function_c.CurrentCode());
1418 EXPECT(!code_c.IsNull());
1419
1420 const PcDescriptors& descriptors =
1421 PcDescriptors::Handle(code_c.pc_descriptors());
1422 EXPECT(!descriptors.IsNull());
1423 ObjectIdRing* ring = isolate->object_id_ring();
1424 intptr_t id = ring->GetIdForObject(descriptors.raw());
1425
1426 // Build a mock message handler and wrap it in a dart port.
1427 ServiceTestMessageHandler handler;
1428 Dart_Port port_id = PortMap::CreatePort(&handler);
1429 Dart_Handle port = Api::NewHandle(isolate, SendPort::New(port_id));
1430 EXPECT_VALID(port);
1431 EXPECT_VALID(Dart_SetField(lib, NewString("port"), port));
1432
1433 Array& service_msg = Array::Handle();
1434
1435 // Fetch object.
1436 service_msg = EvalF(lib, "[0, port, ['objects', '%" Pd "'], [], []]", id);
1437 Service::HandleIsolateMessage(isolate, service_msg);
1438 handler.HandleNextMessage();
1439 // Check type.
1440 EXPECT_SUBSTRING("\"type\":\"PcDescriptors\"", handler.msg());
1441 // Check for members array.
1442 EXPECT_SUBSTRING("\"members\":[", handler.msg());
1443 }
1444
1445
1446 TEST_CASE(Service_LocalVarDescriptors) {
1447 const char* kScript =
1448 "var port;\n" // Set to our mock port by C++.
1449 "\n"
1450 "class A {\n"
1451 " var a;\n"
1452 " dynamic b() {}\n"
1453 " dynamic c() {\n"
1454 " var d = () { b(); };\n"
1455 " return d;\n"
1456 " }\n"
1457 "}\n"
1458 "main() {\n"
1459 " var z = new A();\n"
1460 " var x = z.c();\n"
1461 " x();\n"
1462 "}";
1463
1464 Isolate* isolate = Isolate::Current();
1465 Dart_Handle lib = TestCase::LoadTestScript(kScript, NULL);
1466 EXPECT_VALID(lib);
1467 Library& vmlib = Library::Handle();
1468 vmlib ^= Api::UnwrapHandle(lib);
1469 EXPECT(!vmlib.IsNull());
1470 Dart_Handle result = Dart_Invoke(lib, NewString("main"), 0, NULL);
1471 EXPECT_VALID(result);
1472 const Class& class_a = Class::Handle(GetClass(vmlib, "A"));
1473 EXPECT(!class_a.IsNull());
1474 const Function& function_c = Function::Handle(GetFunction(class_a, "c"));
1475 EXPECT(!function_c.IsNull());
1476 const Code& code_c = Code::Handle(function_c.CurrentCode());
1477 EXPECT(!code_c.IsNull());
1478
1479 const LocalVarDescriptors& descriptors =
1480 LocalVarDescriptors::Handle(code_c.var_descriptors());
1481 // Generate an ID for this object.
1482 ObjectIdRing* ring = isolate->object_id_ring();
1483 intptr_t id = ring->GetIdForObject(descriptors.raw());
1484
1485 // Build a mock message handler and wrap it in a dart port.
1486 ServiceTestMessageHandler handler;
1487 Dart_Port port_id = PortMap::CreatePort(&handler);
1488 Dart_Handle port = Api::NewHandle(isolate, SendPort::New(port_id));
1489 EXPECT_VALID(port);
1490 EXPECT_VALID(Dart_SetField(lib, NewString("port"), port));
1491
1492 Array& service_msg = Array::Handle();
1493
1494 // Fetch object.
1495 service_msg = EvalF(lib, "[0, port, ['objects', '%" Pd "'], [], []]", id);
1496 Service::HandleIsolateMessage(isolate, service_msg);
1497 handler.HandleNextMessage();
1498 // Check type.
1499 EXPECT_SUBSTRING("\"type\":\"LocalVarDescriptors\"", handler.msg());
1500 // Check for members array.
1501 EXPECT_SUBSTRING("\"members\":[", handler.msg());
1502 }
1503
1504
1341 TEST_CASE(Service_VM) { 1505 TEST_CASE(Service_VM) {
1342 const char* kScript = 1506 const char* kScript =
1343 "var port;\n" // Set to our mock port by C++. 1507 "var port;\n" // Set to our mock port by C++.
1344 "\n" 1508 "\n"
1345 "main() {\n" 1509 "main() {\n"
1346 "}"; 1510 "}";
1347 1511
1348 Isolate* isolate = Isolate::Current(); 1512 Isolate* isolate = Isolate::Current();
1349 Dart_Handle lib = TestCase::LoadTestScript(kScript, NULL); 1513 Dart_Handle lib = TestCase::LoadTestScript(kScript, NULL);
1350 EXPECT_VALID(lib); 1514 EXPECT_VALID(lib);
(...skipping 674 matching lines...) Expand 10 before | Expand all | Expand 10 after
2025 service_msg = Eval(lib, "[0, port, ['profile'], ['tags'], ['hidden']]"); 2189 service_msg = Eval(lib, "[0, port, ['profile'], ['tags'], ['hidden']]");
2026 Service::HandleIsolateMessage(isolate, service_msg); 2190 Service::HandleIsolateMessage(isolate, service_msg);
2027 handler.HandleNextMessage(); 2191 handler.HandleNextMessage();
2028 // Expect error. 2192 // Expect error.
2029 EXPECT_SUBSTRING("\"type\":\"Error\"", handler.msg()); 2193 EXPECT_SUBSTRING("\"type\":\"Error\"", handler.msg());
2030 } 2194 }
2031 2195
2032 #endif // !defined(TARGET_ARCH_ARM64) 2196 #endif // !defined(TARGET_ARCH_ARM64)
2033 2197
2034 } // namespace dart 2198 } // namespace dart
OLDNEW
« no previous file with comments | « runtime/vm/object.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698