OLD | NEW |
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 #include "platform/globals.h" | 5 #include "platform/globals.h" |
6 | 6 |
7 #include "include/dart_debugger_api.h" | 7 #include "include/dart_debugger_api.h" |
8 #include "vm/dart_api_impl.h" | 8 #include "vm/dart_api_impl.h" |
9 #include "vm/dart_entry.h" | 9 #include "vm/dart_entry.h" |
10 #include "vm/debugger.h" | 10 #include "vm/debugger.h" |
(...skipping 1282 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1293 TEST_CASE(Service_Scripts) { | 1293 TEST_CASE(Service_Scripts) { |
1294 const char* kScript = | 1294 const char* kScript = |
1295 "var port;\n" // Set to our mock port by C++. | 1295 "var port;\n" // Set to our mock port by C++. |
1296 "\n" | 1296 "\n" |
1297 "main() {\n" | 1297 "main() {\n" |
1298 "}"; | 1298 "}"; |
1299 | 1299 |
1300 Isolate* isolate = Isolate::Current(); | 1300 Isolate* isolate = Isolate::Current(); |
1301 Dart_Handle h_lib = TestCase::LoadTestScript(kScript, NULL); | 1301 Dart_Handle h_lib = TestCase::LoadTestScript(kScript, NULL); |
1302 EXPECT_VALID(h_lib); | 1302 EXPECT_VALID(h_lib); |
| 1303 Library& lib = Library::Handle(); |
| 1304 lib ^= Api::UnwrapHandle(h_lib); |
| 1305 EXPECT(!lib.IsNull()); |
1303 | 1306 |
1304 // Build a mock message handler and wrap it in a dart port. | 1307 // Build a mock message handler and wrap it in a dart port. |
1305 ServiceTestMessageHandler handler; | 1308 ServiceTestMessageHandler handler; |
1306 Dart_Port port_id = PortMap::CreatePort(&handler); | 1309 Dart_Port port_id = PortMap::CreatePort(&handler); |
1307 Dart_Handle port = Api::NewHandle(isolate, SendPort::New(port_id)); | 1310 Dart_Handle port = Api::NewHandle(isolate, SendPort::New(port_id)); |
1308 EXPECT_VALID(port); | 1311 EXPECT_VALID(port); |
1309 EXPECT_VALID(Dart_SetField(h_lib, NewString("port"), port)); | 1312 EXPECT_VALID(Dart_SetField(h_lib, NewString("port"), port)); |
1310 | 1313 |
1311 Array& service_msg = Array::Handle(); | 1314 Array& service_msg = Array::Handle(); |
1312 service_msg = Eval(h_lib, "[0, port, ['scripts', 'test-lib'], [], []]"); | 1315 char buf[1024]; |
| 1316 OS::SNPrint(buf, sizeof(buf), |
| 1317 "[0, port, ['libraries', '%" Pd "', 'scripts', 'test-lib'], [], []]", |
| 1318 lib.index()); |
| 1319 |
| 1320 service_msg = Eval(h_lib, buf); |
1313 Service::HandleIsolateMessage(isolate, service_msg); | 1321 Service::HandleIsolateMessage(isolate, service_msg); |
1314 handler.HandleNextMessage(); | 1322 handler.HandleNextMessage(); |
1315 EXPECT_STREQ( | 1323 OS::SNPrint(buf, sizeof(buf), |
1316 "{\"type\":\"Script\",\"id\":\"scripts\\/test-lib\"," | 1324 "{\"type\":\"Script\"," |
1317 "\"name\":\"test-lib\",\"user_name\":\"test-lib\"," | 1325 "\"id\":\"libraries\\/%" Pd "\\/scripts\\/test-lib\"," |
1318 "\"kind\":\"script\"," | 1326 "\"name\":\"test-lib\",\"user_name\":\"test-lib\"," |
1319 "\"source\":\"var port;\\n\\nmain() {\\n}\"," | 1327 "\"kind\":\"script\"," |
1320 "\"tokenPosTable\":[[1,0,1,1,5,2,9],[3,5,1,6,5,7,6,8,8],[4,10,1]]}", | 1328 "\"owning_library\":{\"type\":\"@Library\"," |
1321 handler.msg()); | 1329 "\"id\":\"libraries\\/%" Pd "\",\"user_name\":\"\",\"name\":\"\"," |
| 1330 "\"url\":\"test-lib\"}," |
| 1331 "\"source\":\"var port;\\n\\nmain() {\\n}\"," |
| 1332 "\"tokenPosTable\":[[1,0,1,1,5,2,9],[3,5,1,6,5,7,6,8,8],[4,10,1]]}", |
| 1333 lib.index(), lib.index()); |
| 1334 EXPECT_STREQ(buf, handler.msg()); |
1322 } | 1335 } |
1323 | 1336 |
1324 | 1337 |
1325 // TODO(zra): Remove when tests are ready to enable. | 1338 // TODO(zra): Remove when tests are ready to enable. |
1326 #if !defined(TARGET_ARCH_ARM64) | 1339 #if !defined(TARGET_ARCH_ARM64) |
1327 | 1340 |
1328 TEST_CASE(Service_Coverage) { | 1341 TEST_CASE(Service_Coverage) { |
1329 const char* kScript = | 1342 const char* kScript = |
1330 "var port;\n" // Set to our mock port by C++. | 1343 "var port;\n" // Set to our mock port by C++. |
1331 "\n" | 1344 "\n" |
(...skipping 16 matching lines...) Expand all Loading... |
1348 ServiceTestMessageHandler handler; | 1361 ServiceTestMessageHandler handler; |
1349 Dart_Port port_id = PortMap::CreatePort(&handler); | 1362 Dart_Port port_id = PortMap::CreatePort(&handler); |
1350 Dart_Handle port = Api::NewHandle(isolate, SendPort::New(port_id)); | 1363 Dart_Handle port = Api::NewHandle(isolate, SendPort::New(port_id)); |
1351 EXPECT_VALID(port); | 1364 EXPECT_VALID(port); |
1352 EXPECT_VALID(Dart_SetField(h_lib, NewString("port"), port)); | 1365 EXPECT_VALID(Dart_SetField(h_lib, NewString("port"), port)); |
1353 | 1366 |
1354 Array& service_msg = Array::Handle(); | 1367 Array& service_msg = Array::Handle(); |
1355 service_msg = Eval(h_lib, "[0, port, ['coverage'], [], []]"); | 1368 service_msg = Eval(h_lib, "[0, port, ['coverage'], [], []]"); |
1356 Service::HandleIsolateMessage(isolate, service_msg); | 1369 Service::HandleIsolateMessage(isolate, service_msg); |
1357 handler.HandleNextMessage(); | 1370 handler.HandleNextMessage(); |
1358 EXPECT_SUBSTRING( | 1371 |
1359 "{\"source\":\"test-lib\",\"script\":{" | 1372 // Look up the service id for the library containg the test-lib script. |
1360 "\"type\":\"@Script\",\"id\":\"scripts\\/test-lib\"," | 1373 const GrowableObjectArray& libs = |
| 1374 GrowableObjectArray::Handle(isolate->object_store()->libraries()); |
| 1375 intptr_t i; |
| 1376 for (i = 0; i < libs.Length(); i++) { |
| 1377 if (libs.At(i) == lib.raw()) { |
| 1378 break; |
| 1379 } |
| 1380 } |
| 1381 ASSERT(i != libs.Length()); |
| 1382 |
| 1383 char buf[1024]; |
| 1384 OS::SNPrint(buf, sizeof(buf), |
| 1385 "{\"source\":\"test-lib\",\"script\":{\"type\":\"@Script\"," |
| 1386 "\"id\":\"libraries\\/%" Pd "\\/scripts\\/test-lib\"," |
1361 "\"name\":\"test-lib\",\"user_name\":\"test-lib\"," | 1387 "\"name\":\"test-lib\",\"user_name\":\"test-lib\"," |
1362 "\"kind\":\"script\"},\"hits\":" | 1388 "\"kind\":\"script\"},\"hits\":" |
1363 "[5,1,6,1]}", handler.msg()); | 1389 "[5,1,6,1]}", i); |
| 1390 EXPECT_SUBSTRING(buf, handler.msg()); |
1364 } | 1391 } |
1365 | 1392 |
1366 | 1393 |
1367 TEST_CASE(Service_ScriptsCoverage) { | 1394 TEST_CASE(Service_LibrariesScriptsCoverage) { |
1368 const char* kScript = | 1395 const char* kScript = |
1369 "var port;\n" // Set to our mock port by C++. | 1396 "var port;\n" // Set to our mock port by C++. |
1370 "\n" | 1397 "\n" |
1371 "var x = 7;\n" | 1398 "var x = 7;\n" |
1372 "main() {\n" | 1399 "main() {\n" |
1373 " x = x * x;\n" | 1400 " x = x * x;\n" |
1374 " x = x / 13;\n" | 1401 " x = x / 13;\n" |
1375 "}"; | 1402 "}"; |
1376 | 1403 |
1377 Isolate* isolate = Isolate::Current(); | 1404 Isolate* isolate = Isolate::Current(); |
1378 Dart_Handle h_lib = TestCase::LoadTestScript(kScript, NULL); | 1405 Dart_Handle h_lib = TestCase::LoadTestScript(kScript, NULL); |
1379 EXPECT_VALID(h_lib); | 1406 EXPECT_VALID(h_lib); |
1380 Library& lib = Library::Handle(); | 1407 Library& lib = Library::Handle(); |
1381 lib ^= Api::UnwrapHandle(h_lib); | 1408 lib ^= Api::UnwrapHandle(h_lib); |
1382 EXPECT(!lib.IsNull()); | 1409 EXPECT(!lib.IsNull()); |
1383 Dart_Handle result = Dart_Invoke(h_lib, NewString("main"), 0, NULL); | 1410 Dart_Handle result = Dart_Invoke(h_lib, NewString("main"), 0, NULL); |
1384 EXPECT_VALID(result); | 1411 EXPECT_VALID(result); |
1385 | 1412 |
1386 // Build a mock message handler and wrap it in a dart port. | 1413 // Build a mock message handler and wrap it in a dart port. |
1387 ServiceTestMessageHandler handler; | 1414 ServiceTestMessageHandler handler; |
1388 Dart_Port port_id = PortMap::CreatePort(&handler); | 1415 Dart_Port port_id = PortMap::CreatePort(&handler); |
1389 Dart_Handle port = Api::NewHandle(isolate, SendPort::New(port_id)); | 1416 Dart_Handle port = Api::NewHandle(isolate, SendPort::New(port_id)); |
1390 EXPECT_VALID(port); | 1417 EXPECT_VALID(port); |
1391 EXPECT_VALID(Dart_SetField(h_lib, NewString("port"), port)); | 1418 EXPECT_VALID(Dart_SetField(h_lib, NewString("port"), port)); |
1392 | 1419 |
1393 Array& service_msg = Array::Handle(); | 1420 Array& service_msg = Array::Handle(); |
1394 service_msg = Eval( | 1421 char buf[1024]; |
1395 h_lib, "[0, port, ['scripts', 'test-lib', 'coverage'], [], []]"); | 1422 OS::SNPrint(buf, sizeof(buf), |
| 1423 "[0, port, ['libraries', '%" Pd "', 'scripts', 'test-lib', 'coverage'], " |
| 1424 "[], []]", |
| 1425 lib.index()); |
| 1426 |
| 1427 service_msg = Eval(h_lib, buf); |
1396 Service::HandleIsolateMessage(isolate, service_msg); | 1428 Service::HandleIsolateMessage(isolate, service_msg); |
1397 handler.HandleNextMessage(); | 1429 handler.HandleNextMessage(); |
1398 EXPECT_STREQ( | 1430 OS::SNPrint(buf, sizeof(buf), |
1399 "{\"type\":\"CodeCoverage\",\"id\":\"coverage\",\"coverage\":[" | 1431 "{\"type\":\"CodeCoverage\",\"id\":\"coverage\",\"coverage\":[" |
1400 "{\"source\":\"test-lib\",\"script\":{" | 1432 "{\"source\":\"test-lib\",\"script\":{\"type\":\"@Script\"," |
1401 "\"type\":\"@Script\",\"id\":\"scripts\\/test-lib\"," | 1433 "\"id\":\"libraries\\/%" Pd "\\/scripts\\/test-lib\"," |
1402 "\"name\":\"test-lib\",\"user_name\":\"test-lib\"," | 1434 "\"name\":\"test-lib\",\"user_name\":\"test-lib\"," |
1403 "\"kind\":\"script\"},\"hits\":[5,1,6,1]}]}", handler.msg()); | 1435 "\"kind\":\"script\"},\"hits\":[5,1,6,1]}]}", lib.index()); |
| 1436 EXPECT_STREQ(buf, handler.msg()); |
1404 } | 1437 } |
1405 | 1438 |
1406 | 1439 |
1407 TEST_CASE(Service_LibrariesCoverage) { | 1440 TEST_CASE(Service_LibrariesCoverage) { |
1408 const char* kScript = | 1441 const char* kScript = |
1409 "var port;\n" // Set to our mock port by C++. | 1442 "var port;\n" // Set to our mock port by C++. |
1410 "\n" | 1443 "\n" |
1411 "var x = 7;\n" | 1444 "var x = 7;\n" |
1412 "main() {\n" | 1445 "main() {\n" |
1413 " x = x * x;\n" | 1446 " x = x * x;\n" |
(...skipping 27 matching lines...) Expand all Loading... |
1441 } | 1474 } |
1442 ASSERT(i != libs.Length()); | 1475 ASSERT(i != libs.Length()); |
1443 char buf[1024]; | 1476 char buf[1024]; |
1444 OS::SNPrint(buf, sizeof(buf), | 1477 OS::SNPrint(buf, sizeof(buf), |
1445 "[0, port, ['libraries', '%" Pd "', 'coverage'], [], []]", i); | 1478 "[0, port, ['libraries', '%" Pd "', 'coverage'], [], []]", i); |
1446 | 1479 |
1447 Array& service_msg = Array::Handle(); | 1480 Array& service_msg = Array::Handle(); |
1448 service_msg = Eval(h_lib, buf); | 1481 service_msg = Eval(h_lib, buf); |
1449 Service::HandleIsolateMessage(isolate, service_msg); | 1482 Service::HandleIsolateMessage(isolate, service_msg); |
1450 handler.HandleNextMessage(); | 1483 handler.HandleNextMessage(); |
1451 EXPECT_STREQ( | 1484 OS::SNPrint(buf, sizeof(buf), |
1452 "{\"type\":\"CodeCoverage\",\"id\":\"coverage\",\"coverage\":[" | 1485 "{\"type\":\"CodeCoverage\",\"id\":\"coverage\",\"coverage\":[" |
1453 "{\"source\":\"test-lib\",\"script\":{" | 1486 "{\"source\":\"test-lib\",\"script\":{\"type\":\"@Script\"," |
1454 "\"type\":\"@Script\",\"id\":\"scripts\\/test-lib\"," | 1487 "\"id\":\"libraries\\/%" Pd "\\/scripts\\/test-lib\"," |
1455 "\"name\":\"test-lib\",\"user_name\":\"test-lib\"," | 1488 "\"name\":\"test-lib\",\"user_name\":\"test-lib\"," |
1456 "\"kind\":\"script\"},\"hits\":[5,1,6,1]}]}", handler.msg()); | 1489 "\"kind\":\"script\"},\"hits\":[5,1,6,1]}]}", lib.index()); |
| 1490 EXPECT_STREQ(buf, handler.msg()); |
1457 } | 1491 } |
1458 | 1492 |
1459 | 1493 |
1460 TEST_CASE(Service_ClassesCoverage) { | 1494 TEST_CASE(Service_ClassesCoverage) { |
1461 const char* kScript = | 1495 const char* kScript = |
1462 "var port;\n" // Set to our mock port by C++. | 1496 "var port;\n" // Set to our mock port by C++. |
1463 "\n" | 1497 "\n" |
1464 "class Foo {\n" | 1498 "class Foo {\n" |
1465 " var x;\n" | 1499 " var x;\n" |
1466 " Foo(this.x);\n" | 1500 " Foo(this.x);\n" |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1503 } | 1537 } |
1504 ASSERT(i != table->NumCids()); | 1538 ASSERT(i != table->NumCids()); |
1505 char buf[1024]; | 1539 char buf[1024]; |
1506 OS::SNPrint(buf, sizeof(buf), | 1540 OS::SNPrint(buf, sizeof(buf), |
1507 "[0, port, ['classes', '%" Pd "', 'coverage'], [], []]", i); | 1541 "[0, port, ['classes', '%" Pd "', 'coverage'], [], []]", i); |
1508 | 1542 |
1509 Array& service_msg = Array::Handle(); | 1543 Array& service_msg = Array::Handle(); |
1510 service_msg = Eval(h_lib, buf); | 1544 service_msg = Eval(h_lib, buf); |
1511 Service::HandleIsolateMessage(isolate, service_msg); | 1545 Service::HandleIsolateMessage(isolate, service_msg); |
1512 handler.HandleNextMessage(); | 1546 handler.HandleNextMessage(); |
1513 EXPECT_STREQ( | 1547 OS::SNPrint(buf, sizeof(buf), |
1514 "{\"type\":\"CodeCoverage\",\"id\":\"coverage\",\"coverage\":[" | 1548 "{\"type\":\"CodeCoverage\",\"id\":\"coverage\",\"coverage\":[" |
1515 "{\"source\":\"test-lib\",\"script\":{" | 1549 "{\"source\":\"test-lib\",\"script\":{\"type\":\"@Script\"," |
1516 "\"type\":\"@Script\",\"id\":\"scripts\\/test-lib\"," | 1550 "\"id\":\"libraries\\/%" Pd "\\/scripts\\/test-lib\"," |
1517 "\"name\":\"test-lib\",\"user_name\":\"test-lib\"," | 1551 "\"name\":\"test-lib\",\"user_name\":\"test-lib\"," |
1518 "\"kind\":\"script\"},\"hits\":[5,1,7,4,8,3]}]}", handler.msg()); | 1552 "\"kind\":\"script\"},\"hits\":[5,1,7,4,8,3]}]}", lib.index()); |
| 1553 EXPECT_STREQ(buf, handler.msg()); |
1519 } | 1554 } |
1520 | 1555 |
1521 | 1556 |
1522 TEST_CASE(Service_ClassesFunctionsCoverage) { | 1557 TEST_CASE(Service_ClassesFunctionsCoverage) { |
1523 const char* kScript = | 1558 const char* kScript = |
1524 "var port;\n" // Set to our mock port by C++. | 1559 "var port;\n" // Set to our mock port by C++. |
1525 "\n" | 1560 "\n" |
1526 "class Foo {\n" | 1561 "class Foo {\n" |
1527 " var x;\n" | 1562 " var x;\n" |
1528 " Foo(this.x);\n" | 1563 " Foo(this.x);\n" |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1576 | 1611 |
1577 char buf[1024]; | 1612 char buf[1024]; |
1578 OS::SNPrint(buf, sizeof(buf), | 1613 OS::SNPrint(buf, sizeof(buf), |
1579 "[0, port, ['classes', '%" Pd "', 'functions'," | 1614 "[0, port, ['classes', '%" Pd "', 'functions'," |
1580 "'% " Pd "', 'coverage'], [], []]", i, function_id); | 1615 "'% " Pd "', 'coverage'], [], []]", i, function_id); |
1581 | 1616 |
1582 Array& service_msg = Array::Handle(); | 1617 Array& service_msg = Array::Handle(); |
1583 service_msg = Eval(h_lib, buf); | 1618 service_msg = Eval(h_lib, buf); |
1584 Service::HandleIsolateMessage(isolate, service_msg); | 1619 Service::HandleIsolateMessage(isolate, service_msg); |
1585 handler.HandleNextMessage(); | 1620 handler.HandleNextMessage(); |
1586 EXPECT_STREQ( | 1621 OS::SNPrint(buf, sizeof(buf), |
1587 "{\"type\":\"CodeCoverage\",\"id\":\"coverage\",\"coverage\":[" | 1622 "{\"type\":\"CodeCoverage\",\"id\":\"coverage\",\"coverage\":[" |
1588 "{\"source\":\"test-lib\",\"script\":{" | 1623 "{\"source\":\"test-lib\",\"script\":{\"type\":\"@Script\"," |
1589 "\"type\":\"@Script\",\"id\":\"scripts\\/test-lib\"," | 1624 "\"id\":\"libraries\\/%" Pd "\\/scripts\\/test-lib\"," |
1590 "\"name\":\"test-lib\",\"user_name\":\"test-lib\"," | 1625 "\"name\":\"test-lib\",\"user_name\":\"test-lib\"," |
1591 "\"kind\":\"script\"},\"hits\":[7,4,8,3]}]}", handler.msg()); | 1626 "\"kind\":\"script\"},\"hits\":[7,4,8,3]}]}", lib.index()); |
| 1627 EXPECT_STREQ(buf, handler.msg()); |
1592 } | 1628 } |
1593 | 1629 |
1594 #endif | 1630 #endif |
1595 | 1631 |
1596 | 1632 |
1597 TEST_CASE(Service_AllocationProfile) { | 1633 TEST_CASE(Service_AllocationProfile) { |
1598 const char* kScript = | 1634 const char* kScript = |
1599 "var port;\n" // Set to our mock port by C++. | 1635 "var port;\n" // Set to our mock port by C++. |
1600 "\n" | 1636 "\n" |
1601 "var x = 7;\n" | 1637 "var x = 7;\n" |
(...skipping 284 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1886 service_msg = Eval(h_lib, "[0, port, ['profile'], ['tags'], ['hidden']]"); | 1922 service_msg = Eval(h_lib, "[0, port, ['profile'], ['tags'], ['hidden']]"); |
1887 Service::HandleIsolateMessage(isolate, service_msg); | 1923 Service::HandleIsolateMessage(isolate, service_msg); |
1888 handler.HandleNextMessage(); | 1924 handler.HandleNextMessage(); |
1889 // Expect error. | 1925 // Expect error. |
1890 EXPECT_SUBSTRING("\"type\":\"Error\"", handler.msg()); | 1926 EXPECT_SUBSTRING("\"type\":\"Error\"", handler.msg()); |
1891 } | 1927 } |
1892 | 1928 |
1893 #endif // !defined(TARGET_ARCH_ARM64) | 1929 #endif // !defined(TARGET_ARCH_ARM64) |
1894 | 1930 |
1895 } // namespace dart | 1931 } // namespace dart |
OLD | NEW |