Index: runtime/vm/isolate_reload_test.cc |
diff --git a/runtime/vm/isolate_reload_test.cc b/runtime/vm/isolate_reload_test.cc |
index 6f36ba0aee90c2523d04a7b8e3f8a59e421ece82..fe35bd82e9c937e153c681e146e692b32e1c72b8 100644 |
--- a/runtime/vm/isolate_reload_test.cc |
+++ b/runtime/vm/isolate_reload_test.cc |
@@ -544,6 +544,104 @@ TEST_CASE(IsolateReload_Generics) { |
} |
+TEST_CASE(IsolateReload_TypeIdentity) { |
+ const char* kScript = |
+ "import 'test:isolate_reload_helper';\n" |
+ "class T { }\n" |
+ "getType() => T;\n" |
+ "main() {\n" |
+ " var oldType = getType();\n" |
+ " reloadTest();\n" |
+ " var newType = getType();\n" |
+ " return identical(oldType, newType).toString();\n" |
+ "}\n"; |
+ |
+ Dart_Handle lib = TestCase::LoadTestScript(kScript, NULL); |
+ EXPECT_VALID(lib); |
+ |
+ const char* kReloadScript = |
+ "import 'test:isolate_reload_helper';\n" |
+ "class T extends Stopwatch { }\n" |
+ "getType() => T;\n" |
+ "main() {\n" |
+ " var oldType = getType();\n" |
+ " reloadTest();\n" |
+ " var newType = getType();\n" |
+ " return identical(oldType, newType).toString();\n" |
+ "}\n"; |
+ |
+ TestCase::SetReloadTestScript(kReloadScript); |
+ |
+ EXPECT_STREQ("true", SimpleInvokeStr(lib, "main")); |
+} |
+ |
+ |
+TEST_CASE(IsolateReload_TypeIdentityGeneric) { |
+ const char* kScript = |
+ "import 'test:isolate_reload_helper';\n" |
+ "class T<G> { }\n" |
+ "getType() => new T<int>().runtimeType;\n" |
+ "main() {\n" |
+ " var oldType = getType();\n" |
+ " reloadTest();\n" |
+ " var newType = getType();\n" |
+ " return identical(oldType, newType).toString();\n" |
+ "}\n"; |
+ |
+ Dart_Handle lib = TestCase::LoadTestScript(kScript, NULL); |
+ EXPECT_VALID(lib); |
+ |
+ const char* kReloadScript = |
+ "import 'test:isolate_reload_helper';\n" |
+ "class T<G> extends Stopwatch { }\n" |
+ "getType() => new T<int>().runtimeType;\n" |
+ "main() {\n" |
+ " var oldType = getType();\n" |
+ " reloadTest();\n" |
+ " var newType = getType();\n" |
+ " return identical(oldType, newType).toString();\n" |
+ "}\n"; |
+ |
+ TestCase::SetReloadTestScript(kReloadScript); |
+ |
+ EXPECT_STREQ("true", SimpleInvokeStr(lib, "main")); |
+} |
+ |
+ |
+TEST_CASE(IsolateReload_TypeIdentityParameter) { |
+ const char* kScript = |
+ "import 'dart:mirrors';\n" |
+ "import 'test:isolate_reload_helper';\n" |
+ "class T<G> { }\n" |
+ "getTypeVar() => reflectType(T).typeVariables[0];\n" |
+ "main() {\n" |
+ " var oldType = getTypeVar();\n" |
+ " reloadTest();\n" |
+ " var newType = getTypeVar();\n" |
+ " return (oldType == newType).toString();\n" |
+ "}\n"; |
+ |
+ Dart_Handle lib = TestCase::LoadTestScript(kScript, NULL); |
+ EXPECT_VALID(lib); |
+ |
+ const char* kReloadScript = |
+ "import 'dart:mirrors';\n" |
+ "import 'test:isolate_reload_helper';\n" |
+ "class T<G> extends Stopwatch { }\n" |
+ "getTypeVar() => reflectType(T).typeVariables[0];\n" |
+ "main() {\n" |
+ " var oldType = getTypeVar();\n" |
+ " reloadTest();\n" |
+ " var newType = getTypeVar();\n" |
+ " return (oldType == newType).toString();\n" |
+ "}\n"; |
+ |
+ TestCase::SetReloadTestScript(kReloadScript); |
+ |
+ EXPECT_STREQ("true", SimpleInvokeStr(lib, "main")); |
+} |
+ |
+ |
TEST_CASE(IsolateReload_MixinChanged) { |
const char* kScript = |
"class Mixin1 {\n" |