| Index: runtime/vm/isolate_reload_test.cc
|
| diff --git a/runtime/vm/isolate_reload_test.cc b/runtime/vm/isolate_reload_test.cc
|
| index be2a2f30049f09ce97ae31a53f1f90c9a25abca8..d34d108b8212e7b548798a20c4900e51fd7da011 100644
|
| --- a/runtime/vm/isolate_reload_test.cc
|
| +++ b/runtime/vm/isolate_reload_test.cc
|
| @@ -3427,6 +3427,80 @@ TEST_CASE(IsolateREload_RunNewFieldInitialiazersSuperClass) {
|
| EXPECT_STREQ("right", SimpleInvokeStr(lib, "main"));
|
| }
|
|
|
| +
|
| +TEST_CASE(IsolateReload_TypedefToNotTypedef) {
|
| + const char* kScript =
|
| + "typedef bool Predicate(dynamic x);\n"
|
| + "main() {\n"
|
| + " return (42 is Predicate).toString();\n"
|
| + "}\n";
|
| +
|
| + Dart_Handle lib = TestCase::LoadTestScript(kScript, NULL);
|
| + EXPECT_VALID(lib);
|
| + EXPECT_STREQ("false", SimpleInvokeStr(lib, "main"));
|
| +
|
| + const char* kReloadScript =
|
| + "class Predicate {\n"
|
| + " bool call(dynamic x) { return false; }\n"
|
| + "}\n"
|
| + "main() {\n"
|
| + " return (42 is Predicate).toString();\n"
|
| + "}\n";
|
| +
|
| + Dart_Handle result = TestCase::ReloadTestScript(kReloadScript);
|
| + EXPECT_ERROR(result,
|
| + "Typedef class cannot be redefined to be a non-typedef class");
|
| +}
|
| +
|
| +
|
| +TEST_CASE(IsolateReload_NotTypedefToTypedef) {
|
| + const char* kScript =
|
| + "class Predicate {\n"
|
| + " bool call(dynamic x) { return false; }\n"
|
| + "}\n"
|
| + "main() {\n"
|
| + " return (42 is Predicate).toString();\n"
|
| + "}\n";
|
| +
|
| + Dart_Handle lib = TestCase::LoadTestScript(kScript, NULL);
|
| + EXPECT_VALID(lib);
|
| + EXPECT_STREQ("false", SimpleInvokeStr(lib, "main"));
|
| +
|
| + const char* kReloadScript =
|
| + "typedef bool Predicate(dynamic x);\n"
|
| + "main() {\n"
|
| + " return (42 is Predicate).toString();\n"
|
| + "}\n";
|
| +
|
| + Dart_Handle result = TestCase::ReloadTestScript(kReloadScript);
|
| + EXPECT_ERROR(result, "Class cannot be redefined to be a typedef class");
|
| +}
|
| +
|
| +
|
| +TEST_CASE(IsolateReload_TypedefAddParameter) {
|
| + const char* kScript =
|
| + "typedef bool Predicate(dynamic x);\n"
|
| + "main() {\n"
|
| + " bool foo(x) => true;\n"
|
| + " return (foo is Predicate).toString();\n"
|
| + "}\n";
|
| +
|
| + Dart_Handle lib = TestCase::LoadTestScript(kScript, NULL);
|
| + EXPECT_VALID(lib);
|
| + EXPECT_STREQ("true", SimpleInvokeStr(lib, "main"));
|
| +
|
| + const char* kReloadScript =
|
| + "typedef bool Predicate(dynamic x, dynamic y);\n"
|
| + "main() {\n"
|
| + " bool foo(x) => true;\n"
|
| + " return (foo is Predicate).toString();\n"
|
| + "}\n";
|
| +
|
| + Dart_Handle result = TestCase::ReloadTestScript(kReloadScript);
|
| + EXPECT_VALID(result);
|
| + EXPECT_STREQ("false", SimpleInvokeStr(lib, "main"));
|
| +}
|
| +
|
| #endif // !PRODUCT
|
|
|
| } // namespace dart
|
|
|