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

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

Issue 10916207: Support receiving GrowableObjectArray on native ports (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Addressed review commetns Created 8 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/dart_api_message.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) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, 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 "include/dart_debugger_api.h" 5 #include "include/dart_debugger_api.h"
6 #include "platform/assert.h" 6 #include "platform/assert.h"
7 #include "vm/bigint_operations.h" 7 #include "vm/bigint_operations.h"
8 #include "vm/class_finalizer.h" 8 #include "vm/class_finalizer.h"
9 #include "vm/dart_api_impl.h" 9 #include "vm/dart_api_impl.h"
10 #include "vm/dart_api_message.h" 10 #include "vm/dart_api_message.h"
(...skipping 1302 matching lines...) Expand 10 before | Expand all | Expand 10 after
1313 EXPECT_EQ(Dart_CObject::kNull, root->value.as_array.values[i]->type); 1313 EXPECT_EQ(Dart_CObject::kNull, root->value.as_array.values[i]->type);
1314 } 1314 }
1315 } 1315 }
1316 } 1316 }
1317 } 1317 }
1318 Dart_ExitScope(); 1318 Dart_ExitScope();
1319 Dart_ShutdownIsolate(); 1319 Dart_ShutdownIsolate();
1320 } 1320 }
1321 1321
1322 1322
1323 UNIT_TEST_CASE(DartGeneratedArrayLiteralMessages) {
1324 const int kArrayLength = 10;
1325 static const char* kScriptChars =
1326 "final int kArrayLength = 10;\n"
1327 "getList() {\n"
1328 " return [null, null, null, null, null, null, null, null, null, null];\n"
1329 "}\n"
1330 "getIntList() {\n"
1331 " return [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];\n"
1332 "}\n"
1333 "getStringList() {\n"
1334 " return ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'];\n"
1335 "}\n"
1336 "getMixedList() {\n"
1337 " var list = [];\n"
1338 " list.add(0);\n"
1339 " list.add('1');\n"
1340 " list.add(2.2);\n"
1341 " list.add(true);\n"
1342 " list.add(null);\n"
1343 " list.add(null);\n"
1344 " list.add(null);\n"
1345 " list.add(null);\n"
1346 " list.add(null);\n"
1347 " list.add(null);\n"
1348 " return list;\n"
1349 "}\n";
1350
1351 TestCase::CreateTestIsolate();
1352 Isolate* isolate = Isolate::Current();
1353 EXPECT(isolate != NULL);
1354 Dart_EnterScope();
1355
1356 Dart_Handle lib = TestCase::LoadTestScript(kScriptChars, NULL);
1357 EXPECT_VALID(lib);
1358
1359 {
1360 DARTSCOPE_NOCHECKS(isolate);
1361 {
1362 // Generate a list of nulls from Dart code.
1363 ApiNativeScope scope;
1364 Dart_CObject* root = GetDeserializedDartMessage(lib, "getList");
1365 EXPECT_NOTNULL(root);
1366 EXPECT_EQ(Dart_CObject::kArray, root->type);
1367 EXPECT_EQ(kArrayLength, root->value.as_array.length);
1368 for (int i = 0; i < kArrayLength; i++) {
1369 EXPECT_EQ(Dart_CObject::kNull, root->value.as_array.values[i]->type);
1370 }
1371 CheckEncodeDecodeMessage(root);
1372 }
1373 {
1374 // Generate a list of ints from Dart code.
1375 ApiNativeScope scope;
1376 Dart_CObject* root = GetDeserializedDartMessage(lib, "getIntList");
1377 EXPECT_NOTNULL(root);
1378 EXPECT_EQ(Dart_CObject::kArray, root->type);
1379 EXPECT_EQ(kArrayLength, root->value.as_array.length);
1380 for (int i = 0; i < kArrayLength; i++) {
1381 EXPECT_EQ(Dart_CObject::kInt32, root->value.as_array.values[i]->type);
1382 EXPECT_EQ(i, root->value.as_array.values[i]->value.as_int32);
1383 }
1384 CheckEncodeDecodeMessage(root);
1385 }
1386 {
1387 // Generate a list of strings from Dart code.
1388 ApiNativeScope scope;
1389 Dart_CObject* root = GetDeserializedDartMessage(lib, "getStringList");
1390 EXPECT_NOTNULL(root);
1391 EXPECT_EQ(Dart_CObject::kArray, root->type);
1392 EXPECT_EQ(kArrayLength, root->value.as_array.length);
1393 for (int i = 0; i < kArrayLength; i++) {
1394 EXPECT_EQ(Dart_CObject::kString, root->value.as_array.values[i]->type);
1395 char buffer[3];
1396 snprintf(buffer, sizeof(buffer), "%d", i);
1397 EXPECT_STREQ(buffer, root->value.as_array.values[i]->value.as_string);
1398 }
1399 }
1400 {
1401 // Generate a list of objects of different types from Dart code.
1402 ApiNativeScope scope;
1403 Dart_CObject* root = GetDeserializedDartMessage(lib, "getMixedList");
1404 EXPECT_NOTNULL(root);
1405 EXPECT_EQ(Dart_CObject::kArray, root->type);
1406 EXPECT_EQ(kArrayLength, root->value.as_array.length);
1407
1408 EXPECT_EQ(Dart_CObject::kInt32, root->value.as_array.values[0]->type);
1409 EXPECT_EQ(0, root->value.as_array.values[0]->value.as_int32);
1410 EXPECT_EQ(Dart_CObject::kString, root->value.as_array.values[1]->type);
1411 EXPECT_STREQ("1", root->value.as_array.values[1]->value.as_string);
1412 EXPECT_EQ(Dart_CObject::kDouble, root->value.as_array.values[2]->type);
1413 EXPECT_EQ(2.2, root->value.as_array.values[2]->value.as_double);
1414 EXPECT_EQ(Dart_CObject::kBool, root->value.as_array.values[3]->type);
1415 EXPECT_EQ(true, root->value.as_array.values[3]->value.as_bool);
1416
1417 for (int i = 0; i < kArrayLength; i++) {
1418 if (i > 3) {
1419 EXPECT_EQ(Dart_CObject::kNull, root->value.as_array.values[i]->type);
1420 }
1421 }
1422 }
1423 }
1424 Dart_ExitScope();
1425 Dart_ShutdownIsolate();
1426 }
1427
1428
1323 UNIT_TEST_CASE(DartGeneratedListMessagesWithBackref) { 1429 UNIT_TEST_CASE(DartGeneratedListMessagesWithBackref) {
1324 const int kArrayLength = 10; 1430 const int kArrayLength = 10;
1325 static const char* kScriptChars = 1431 static const char* kScriptChars =
1326 "final int kArrayLength = 10;\n" 1432 "final int kArrayLength = 10;\n"
1327 "getStringList() {\n" 1433 "getStringList() {\n"
1328 " var s = 'Hello, world!';\n" 1434 " var s = 'Hello, world!';\n"
1329 " var list = new List<String>(kArrayLength);\n" 1435 " var list = new List<String>(kArrayLength);\n"
1330 " for (var i = 0; i < kArrayLength; i++) list[i] = s;\n" 1436 " for (var i = 0; i < kArrayLength; i++) list[i] = s;\n"
1331 " return list;\n" 1437 " return list;\n"
1332 "}\n" 1438 "}\n"
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
1398 // Generate a list of medium ints from Dart code. 1504 // Generate a list of medium ints from Dart code.
1399 ApiNativeScope scope; 1505 ApiNativeScope scope;
1400 Dart_CObject* root = GetDeserializedDartMessage(lib, "getMintList"); 1506 Dart_CObject* root = GetDeserializedDartMessage(lib, "getMintList");
1401 EXPECT_NOTNULL(root); 1507 EXPECT_NOTNULL(root);
1402 EXPECT_EQ(Dart_CObject::kArray, root->type); 1508 EXPECT_EQ(Dart_CObject::kArray, root->type);
1403 EXPECT_EQ(kArrayLength, root->value.as_array.length); 1509 EXPECT_EQ(kArrayLength, root->value.as_array.length);
1404 for (int i = 0; i < kArrayLength; i++) { 1510 for (int i = 0; i < kArrayLength; i++) {
1405 Dart_CObject* element = root->value.as_array.values[i]; 1511 Dart_CObject* element = root->value.as_array.values[i];
1406 EXPECT_EQ(root->value.as_array.values[0], element); 1512 EXPECT_EQ(root->value.as_array.values[0], element);
1407 EXPECT_EQ(Dart_CObject::kInt64, element->type); 1513 EXPECT_EQ(Dart_CObject::kInt64, element->type);
1514 EXPECT_EQ(DART_INT64_C(0x7FFFFFFFFFFFFFFF), element->value.as_int64);
1408 } 1515 }
1409 } 1516 }
1410 { 1517 {
1518 // Generate a list of bigints from Dart code.
1519 ApiNativeScope scope;
1520 Dart_CObject* root = GetDeserializedDartMessage(lib, "getBigintList");
1521 EXPECT_NOTNULL(root);
1522 EXPECT_EQ(Dart_CObject::kArray, root->type);
1523 EXPECT_EQ(kArrayLength, root->value.as_array.length);
1524 for (int i = 0; i < kArrayLength; i++) {
1525 Dart_CObject* element = root->value.as_array.values[i];
1526 EXPECT_EQ(root->value.as_array.values[0], element);
1527 EXPECT_EQ(Dart_CObject::kBigint, element->type);
1528 EXPECT_STREQ("1234567890123456789012345678901234567890",
1529 element->value.as_bigint);
1530 }
1531 }
1532 {
1533 // Generate a list of doubles from Dart code.
1534 ApiNativeScope scope;
1535 Dart_CObject* root = GetDeserializedDartMessage(lib, "getDoubleList");
1536 EXPECT_NOTNULL(root);
1537 EXPECT_EQ(Dart_CObject::kArray, root->type);
1538 EXPECT_EQ(kArrayLength, root->value.as_array.length);
1539 for (int i = 0; i < kArrayLength; i++) {
1540 Dart_CObject* element = root->value.as_array.values[i];
1541 EXPECT_EQ(root->value.as_array.values[0], element);
1542 EXPECT_EQ(Dart_CObject::kDouble, element->type);
1543 EXPECT_EQ(3.14, element->value.as_double);
1544 }
1545 }
1546 {
1547 // Generate a list of doubles from Dart code.
1548 ApiNativeScope scope;
1549 Dart_CObject* root = GetDeserializedDartMessage(lib, "getByteArrayList");
1550 EXPECT_NOTNULL(root);
1551 EXPECT_EQ(Dart_CObject::kArray, root->type);
1552 EXPECT_EQ(kArrayLength, root->value.as_array.length);
1553 for (int i = 0; i < kArrayLength; i++) {
1554 Dart_CObject* element = root->value.as_array.values[i];
1555 EXPECT_EQ(root->value.as_array.values[0], element);
1556 EXPECT_EQ(Dart_CObject::kUint8Array, element->type);
1557 EXPECT_EQ(256, element->value.as_byte_array.length);
1558 }
1559 }
1560 {
1561 // Generate a list of objects of different types from Dart code.
1562 ApiNativeScope scope;
1563 Dart_CObject* root = GetDeserializedDartMessage(lib, "getMixedList");
1564 EXPECT_NOTNULL(root);
1565 EXPECT_EQ(Dart_CObject::kArray, root->type);
1566 EXPECT_EQ(kArrayLength, root->value.as_array.length);
1567 for (int i = 0; i < kArrayLength; i++) {
1568 Dart_CObject* element = root->value.as_array.values[i];
1569 if ((i % 2) == 0) {
1570 EXPECT_EQ(root->value.as_array.values[0], element);
1571 EXPECT_EQ(Dart_CObject::kString, element->type);
1572 EXPECT_STREQ("A", element->value.as_string);
1573 } else {
1574 EXPECT_EQ(root->value.as_array.values[1], element);
1575 EXPECT_EQ(Dart_CObject::kDouble, element->type);
1576 EXPECT_STREQ(2.72, element->value.as_double);
1577 }
1578 }
1579 }
1580 {
1581 // Generate a list of objects of different types from Dart code.
1582 ApiNativeScope scope;
1583 Dart_CObject* root = GetDeserializedDartMessage(lib, "getSelfRefList");
1584 EXPECT_NOTNULL(root);
1585 EXPECT_EQ(Dart_CObject::kArray, root->type);
1586 EXPECT_EQ(kArrayLength, root->value.as_array.length);
1587 for (int i = 0; i < kArrayLength; i++) {
1588 Dart_CObject* element = root->value.as_array.values[i];
1589 EXPECT_EQ(Dart_CObject::kArray, element->type);
1590 EXPECT_EQ(root, element);
1591 }
1592 }
1593 }
1594 Dart_ExitScope();
1595 Dart_ShutdownIsolate();
1596 }
1597
1598
1599 UNIT_TEST_CASE(DartGeneratedArrayLiteralMessagesWithBackref) {
1600 const int kArrayLength = 10;
1601 static const char* kScriptChars =
1602 "final int kArrayLength = 10;\n"
1603 "getStringList() {\n"
1604 " var s = 'Hello, world!';\n"
1605 " var list = [s, s, s, s, s, s, s, s, s, s];\n"
1606 " return list;\n"
1607 "}\n"
1608 "getMintList() {\n"
1609 " var mint = 0x7FFFFFFFFFFFFFFF;\n"
1610 " var list = [mint, mint, mint, mint, mint,\n"
1611 " mint, mint, mint, mint, mint];\n"
1612 " return list;\n"
1613 "}\n"
1614 "getBigintList() {\n"
1615 " var bigint = 0x1234567890123456789012345678901234567890;\n"
1616 " var list = [bigint, bigint, bigint, bigint, bigint,\n"
1617 " bigint, bigint, bigint, bigint, bigint];\n"
1618 " return list;\n"
1619 "}\n"
1620 "getDoubleList() {\n"
1621 " var d = 3.14;\n"
1622 " var list = [3.14, 3.14, 3.14, 3.14, 3.14, 3.14];\n"
1623 " list.add(3.14);;\n"
1624 " list.add(3.14);;\n"
1625 " list.add(3.14);;\n"
1626 " list.add(3.14);;\n"
1627 " return list;\n"
1628 "}\n"
1629 "getByteArrayList() {\n"
1630 " var byte_array = new Uint8List(256);\n"
1631 " var list = [];\n"
1632 " for (var i = 0; i < kArrayLength; i++) {\n"
1633 " list.add(byte_array);\n"
1634 " }\n"
1635 " return list;\n"
1636 "}\n"
1637 "getMixedList() {\n"
1638 " var list = [];\n"
1639 " for (var i = 0; i < kArrayLength; i++) {\n"
1640 " list.add(((i % 2) == 0) ? 'A' : 2.72);\n"
1641 " }\n"
1642 " return list;\n"
1643 "}\n"
1644 "getSelfRefList() {\n"
1645 " var list = [];\n"
1646 " for (var i = 0; i < kArrayLength; i++) {\n"
1647 " list.add(list);\n"
1648 " }\n"
1649 " return list;\n"
1650 "}\n";
1651
1652 TestCase::CreateTestIsolate();
1653 Isolate* isolate = Isolate::Current();
1654 EXPECT(isolate != NULL);
1655 Dart_EnterScope();
1656
1657 Dart_Handle lib = TestCase::LoadTestScript(kScriptChars, NULL);
1658 EXPECT_VALID(lib);
1659
1660 {
1661 DARTSCOPE_NOCHECKS(isolate);
1662
1663 {
1664 // Generate a list of strings from Dart code.
1665 ApiNativeScope scope;
1666 Dart_CObject* root = GetDeserializedDartMessage(lib, "getStringList");
1667 EXPECT_NOTNULL(root);
1668 EXPECT_EQ(Dart_CObject::kArray, root->type);
1669 EXPECT_EQ(kArrayLength, root->value.as_array.length);
1670 for (int i = 0; i < kArrayLength; i++) {
1671 Dart_CObject* element = root->value.as_array.values[i];
1672 EXPECT_EQ(root->value.as_array.values[0], element);
1673 EXPECT_EQ(Dart_CObject::kString, element->type);
1674 EXPECT_STREQ("Hello, world!", element->value.as_string);
1675 }
1676 }
1677 {
1678 // Generate a list of medium ints from Dart code.
1679 ApiNativeScope scope;
1680 Dart_CObject* root = GetDeserializedDartMessage(lib, "getMintList");
1681 EXPECT_NOTNULL(root);
1682 EXPECT_EQ(Dart_CObject::kArray, root->type);
1683 EXPECT_EQ(kArrayLength, root->value.as_array.length);
1684 for (int i = 0; i < kArrayLength; i++) {
1685 Dart_CObject* element = root->value.as_array.values[i];
1686 EXPECT_EQ(root->value.as_array.values[0], element);
1687 EXPECT_EQ(Dart_CObject::kInt64, element->type);
1688 EXPECT_EQ(DART_INT64_C(0x7FFFFFFFFFFFFFFF), element->value.as_int64);
1689 }
1690 }
1691 {
1411 // Generate a list of bigints from Dart code. 1692 // Generate a list of bigints from Dart code.
1412 ApiNativeScope scope; 1693 ApiNativeScope scope;
1413 Dart_CObject* root = GetDeserializedDartMessage(lib, "getBigintList"); 1694 Dart_CObject* root = GetDeserializedDartMessage(lib, "getBigintList");
1414 EXPECT_NOTNULL(root); 1695 EXPECT_NOTNULL(root);
1415 EXPECT_EQ(Dart_CObject::kArray, root->type); 1696 EXPECT_EQ(Dart_CObject::kArray, root->type);
1416 EXPECT_EQ(kArrayLength, root->value.as_array.length); 1697 EXPECT_EQ(kArrayLength, root->value.as_array.length);
1417 for (int i = 0; i < kArrayLength; i++) { 1698 for (int i = 0; i < kArrayLength; i++) {
1418 Dart_CObject* element = root->value.as_array.values[i]; 1699 Dart_CObject* element = root->value.as_array.values[i];
1419 EXPECT_EQ(root->value.as_array.values[0], element); 1700 EXPECT_EQ(root->value.as_array.values[0], element);
1420 EXPECT_EQ(Dart_CObject::kBigint, element->type); 1701 EXPECT_EQ(Dart_CObject::kBigint, element->type);
1702 EXPECT_STREQ("1234567890123456789012345678901234567890",
1703 element->value.as_bigint);
1421 } 1704 }
1422 } 1705 }
1423 { 1706 {
1424 // Generate a list of doubles from Dart code. 1707 // Generate a list of doubles from Dart code.
1425 ApiNativeScope scope; 1708 ApiNativeScope scope;
1426 Dart_CObject* root = GetDeserializedDartMessage(lib, "getDoubleList"); 1709 Dart_CObject* root = GetDeserializedDartMessage(lib, "getDoubleList");
1427 EXPECT_NOTNULL(root); 1710 EXPECT_NOTNULL(root);
1428 EXPECT_EQ(Dart_CObject::kArray, root->type); 1711 EXPECT_EQ(Dart_CObject::kArray, root->type);
1429 EXPECT_EQ(kArrayLength, root->value.as_array.length); 1712 EXPECT_EQ(kArrayLength, root->value.as_array.length);
1430 for (int i = 0; i < kArrayLength; i++) { 1713 for (int i = 0; i < kArrayLength; i++) {
(...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after
1577 EXPECT(Dart_ErrorHasException(result)); 1860 EXPECT(Dart_ErrorHasException(result));
1578 EXPECT_SUBSTRING("Exception: nulltruefalse1234563.14[]100123456789\n", 1861 EXPECT_SUBSTRING("Exception: nulltruefalse1234563.14[]100123456789\n",
1579 Dart_GetError(result)); 1862 Dart_GetError(result));
1580 1863
1581 Dart_ExitScope(); 1864 Dart_ExitScope();
1582 } 1865 }
1583 1866
1584 #endif // defined(TARGET_ARCH_IA32) || defined(TARGET_ARCH_X64). 1867 #endif // defined(TARGET_ARCH_IA32) || defined(TARGET_ARCH_X64).
1585 1868
1586 } // namespace dart 1869 } // namespace dart
OLDNEW
« no previous file with comments | « runtime/vm/dart_api_message.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698