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

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

Issue 2153143002: Rework how enums are implemented and reloaded (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 4 years, 5 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
« no previous file with comments | « runtime/vm/isolate_reload.cc ('k') | runtime/vm/object.h » ('j') | 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) 2016, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2016, 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_api.h" 5 #include "include/dart_api.h"
6 #include "include/dart_tools_api.h" 6 #include "include/dart_tools_api.h"
7 #include "platform/assert.h" 7 #include "platform/assert.h"
8 #include "vm/globals.h" 8 #include "vm/globals.h"
9 #include "vm/isolate.h" 9 #include "vm/isolate.h"
10 #include "vm/lockers.h" 10 #include "vm/lockers.h"
(...skipping 1427 matching lines...) Expand 10 before | Expand all | Expand 10 after
1438 1438
1439 TEST_CASE(IsolateReload_EnumDelete) { 1439 TEST_CASE(IsolateReload_EnumDelete) {
1440 const char* kScript = 1440 const char* kScript =
1441 "enum Fruit {\n" 1441 "enum Fruit {\n"
1442 " Apple,\n" 1442 " Apple,\n"
1443 " Banana,\n" 1443 " Banana,\n"
1444 " Cantalope,\n" 1444 " Cantalope,\n"
1445 "}\n" 1445 "}\n"
1446 "var x;\n" 1446 "var x;\n"
1447 "main() {\n" 1447 "main() {\n"
1448 " x = Fruit.Cantalope;\n"
1448 " return Fruit.Apple.toString();\n" 1449 " return Fruit.Apple.toString();\n"
1449 "}\n"; 1450 "}\n";
1450 1451
1451 Dart_Handle lib = TestCase::LoadTestScript(kScript, NULL); 1452 Dart_Handle lib = TestCase::LoadTestScript(kScript, NULL);
1452 EXPECT_VALID(lib); 1453 EXPECT_VALID(lib);
1453 1454
1454 EXPECT_STREQ("Fruit.Apple", SimpleInvokeStr(lib, "main")); 1455 EXPECT_STREQ("Fruit.Apple", SimpleInvokeStr(lib, "main"));
1455 1456
1456 // Delete 'Cantalope'. 1457 // Delete 'Cantalope' but make sure that we can still invoke toString,
1458 // and access the hashCode and index properties.
1457 1459
1458 const char* kReloadScript = 1460 const char* kReloadScript =
1459 "enum Fruit {\n" 1461 "enum Fruit {\n"
1460 " Apple,\n" 1462 " Apple,\n"
1461 " Banana,\n" 1463 " Banana,\n"
1462 "}\n" 1464 "}\n"
1463 "var x;\n" 1465 "var x;\n"
1464 "main() {\n" 1466 "main() {\n"
1465 " String r = '${Fruit.Apple.index}/${Fruit.Apple} ';\n" 1467 " String r = '$x ${x.hashCode is int} ${x.index}';\n"
1466 " r += '${Fruit.Banana.index}/${Fruit.Banana} ';\n"
1467 " r += '${Fruit.Cantalope.index}/${Fruit.Cantalope}';\n"
1468 " return r;\n" 1468 " return r;\n"
1469 "}\n"; 1469 "}\n";
1470 1470
1471 lib = TestCase::ReloadTestScript(kReloadScript); 1471 lib = TestCase::ReloadTestScript(kReloadScript);
1472 EXPECT_VALID(lib); 1472 EXPECT_VALID(lib);
1473 1473
1474 EXPECT_STREQ("0/Fruit.Apple 1/Fruit.Banana 2/Fruit.Cantalope", 1474 EXPECT_STREQ("Fruit.Cantalope true 2",
1475 SimpleInvokeStr(lib, "main")); 1475 SimpleInvokeStr(lib, "main"));
1476 } 1476 }
1477 1477
1478
1479 TEST_CASE(IsolateReload_EnumComplex) {
1480 const char* kScript =
1481 "enum Fruit {\n"
1482 " Apple,\n"
1483 " Banana,\n"
1484 " Cantalope,\n"
1485 "}\n"
1486 "var x;\n"
1487 "var y;\n"
1488 "var z;\n"
1489 "main() {\n"
1490 " x = Fruit.Apple;\n"
1491 " y = Fruit.Banana;\n"
1492 " z = Fruit.Cantalope;\n"
1493 " return Fruit.Apple.toString();\n"
1494 "}\n";
1495
1496 Dart_Handle lib = TestCase::LoadTestScript(kScript, NULL);
1497 EXPECT_VALID(lib);
1498
1499 EXPECT_STREQ("Fruit.Apple", SimpleInvokeStr(lib, "main"));
1500
1501 // Delete 'Cantalope'. Add 'Dragon'. Move 'Apple' and 'Banana'.
1502
1503 const char* kReloadScript =
1504 "enum Fruit {\n"
1505 " Dragon,\n"
1506 " Apple,\n"
1507 " Banana,\n"
1508 "}\n"
1509 "var x;\n"
1510 "var y;\n"
1511 "var z;\n"
1512 "main() {\n"
1513 " String r = '';\n"
1514 " r += '${identical(x, Fruit.Apple)}';\n"
1515 " r += ' ${identical(y, Fruit.Banana)}';\n"
1516 " r += ' ${identical(z, Fruit.Cantalope)}';\n"
1517 " r += ' ${Fruit.Dragon}';\n"
1518 " return r;\n"
1519 "}\n";
1520
1521 lib = TestCase::ReloadTestScript(kReloadScript);
1522 EXPECT_VALID(lib);
1523
1524 EXPECT_STREQ("true true true Fruit.Dragon", SimpleInvokeStr(lib, "main"));
1525 }
1526
1527
1528 TEST_CASE(IsolateReload_EnumValuesArray) {
1529 const char* kScript =
1530 "enum Fruit {\n"
1531 " Cantalope,\n"
1532 " Apple,\n"
1533 " Banana,\n"
1534 "}\n"
1535 "var x;\n"
1536 "main() {\n"
1537 " x = Fruit.Cantalope;\n"
1538 " return Fruit.Apple.toString();\n"
1539 "}\n";
1540
1541 Dart_Handle lib = TestCase::LoadTestScript(kScript, NULL);
1542 EXPECT_VALID(lib);
1543
1544 EXPECT_STREQ("Fruit.Apple", SimpleInvokeStr(lib, "main"));
1545
1546 // Delete 'Cantalope'.
1547
1548 const char* kReloadScript =
1549 "enum Fruit {\n"
1550 " Banana,\n"
1551 " Apple\n"
1552 "}\n"
1553 "var x;\n"
1554 "bool identityCheck(Fruit f) {\n"
1555 " return identical(Fruit.values[f.index], f);\n"
1556 "}\n"
1557 "main() {\n"
1558 " if ((x is Fruit) && identical(x, Fruit.Cantalope)) {\n"
1559 " String r = '${identityCheck(Fruit.Apple)}';\n"
1560 " r += ' ${identityCheck(Fruit.Banana)}';\n"
1561 " r += ' ${identityCheck(Fruit.Cantalope)}';\n"
1562 " r += ' ${identityCheck(x)}';\n"
1563 " return r;\n"
1564 " }\n"
1565 "}\n";
1566
1567 lib = TestCase::ReloadTestScript(kReloadScript);
1568 EXPECT_VALID(lib);
1569
1570 EXPECT_STREQ("true true true true",
1571 SimpleInvokeStr(lib, "main"));
1572 }
1573
1574 1478
1575 TEST_CASE(IsolateReload_EnumIdentityReload) { 1479 TEST_CASE(IsolateReload_EnumIdentityReload) {
1576 const char* kScript = 1480 const char* kScript =
1577 "enum Fruit {\n" 1481 "enum Fruit {\n"
1578 " Apple,\n" 1482 " Apple,\n"
1579 " Banana,\n" 1483 " Banana,\n"
1580 " Cantalope,\n" 1484 " Cantalope,\n"
1581 "}\n" 1485 "}\n"
1582 "var x;\n" 1486 "var x;\n"
1583 "var y;\n" 1487 "var y;\n"
(...skipping 315 matching lines...) Expand 10 before | Expand all | Expand 10 after
1899 1803
1900 // ...and the non-core subclass is still named AIterator. 1804 // ...and the non-core subclass is still named AIterator.
1901 new_subclass = subclasses.At(subclasses.Length() - 1); 1805 new_subclass = subclasses.At(subclasses.Length() - 1);
1902 name = Class::Cast(new_subclass).Name(); 1806 name = Class::Cast(new_subclass).Name();
1903 EXPECT_STREQ("AIterator", name.ToCString()); 1807 EXPECT_STREQ("AIterator", name.ToCString());
1904 } 1808 }
1905 1809
1906 #endif // !PRODUCT 1810 #endif // !PRODUCT
1907 1811
1908 } // namespace dart 1812 } // namespace dart
OLDNEW
« no previous file with comments | « runtime/vm/isolate_reload.cc ('k') | runtime/vm/object.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698