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

Unified Diff: runtime/vm/isolate_reload_test.cc

Issue 2926203002: [hot reload] Give a better error message when changing between a regular class and a typedef. (Closed)
Patch Set: Created 3 years, 6 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | runtime/vm/object_reload.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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
« no previous file with comments | « no previous file | runtime/vm/object_reload.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698