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 |