Index: runtime/vm/debugger_api_impl_test.cc |
=================================================================== |
--- runtime/vm/debugger_api_impl_test.cc (revision 24634) |
+++ runtime/vm/debugger_api_impl_test.cc (working copy) |
@@ -1447,4 +1447,94 @@ |
EXPECT_EQ(1, breakpoint_hit_counter); |
} |
+ |
+TEST_CASE(Debug_GetSupertype) { |
+ const char* kScriptChars = |
+ "class Test {\n" |
+ "}\n" |
+ "class Test1 extends Test {\n" |
+ "}\n" |
+ "class Test2<T> {\n" |
+ "}\n" |
+ "class Test3 extends Test2<int> {\n" |
+ "}\n" |
+ "class Test4<A, B> extends Test2<A> {\n" |
+ "}\n" |
+ "class Test5<A, B, C> extends Test4<A, B> {\n" |
+ "}\n" |
+ "int main() {\n" |
+ "}\n"; |
+ |
+ Isolate* isolate = Isolate::Current(); |
+ LoadScript(kScriptChars); |
+ ASSERT(script_lib != NULL); |
+ ASSERT(Dart_IsLibrary(script_lib)); |
+ Dart_Handle core_lib = Dart_LookupLibrary(NewString("dart:core")); |
+ |
+ Dart_Handle Test_name = Dart_NewStringFromCString("Test"); |
+ Dart_Handle Test1_name = Dart_NewStringFromCString("Test1"); |
+ Dart_Handle Test2_name = Dart_NewStringFromCString("Test2"); |
+ Dart_Handle Test3_name = Dart_NewStringFromCString("Test3"); |
+ Dart_Handle Test4_name = Dart_NewStringFromCString("Test4"); |
+ Dart_Handle Test5_name = Dart_NewStringFromCString("Test5"); |
+ Dart_Handle object_name = Dart_NewStringFromCString("Object"); |
+ Dart_Handle int_name = Dart_NewStringFromCString("int"); |
+ |
+ Dart_Handle object_type = Dart_GetType(core_lib, object_name, 0, NULL); |
+ Dart_Handle int_type = Dart_GetType(core_lib, int_name, 0, NULL); |
+ EXPECT_VALID(int_type); |
+ Dart_Handle Test_type = Dart_GetType(script_lib, Test_name, 0, NULL); |
+ Dart_Handle Test1_type = Dart_GetType(script_lib, Test1_name, 0, NULL); |
+ Dart_Handle type_args = Dart_NewList(1); |
+ Dart_ListSetAt(type_args, 0, int_type); |
+ Dart_Handle Test2_int_type = Dart_GetType(script_lib, |
+ Test2_name, |
+ 1, |
+ &type_args); |
+ Dart_Handle Test3_type = Dart_GetType(script_lib, Test3_name, 0, NULL); |
+ type_args = Dart_NewList(2); |
+ Dart_ListSetAt(type_args, 0, int_type); |
+ Dart_ListSetAt(type_args, 1, int_type); |
+ Dart_Handle Test4_int_type = Dart_GetType(script_lib, |
+ Test4_name, |
+ 2, |
+ &type_args); |
+ type_args = Dart_NewList(3); |
+ Dart_ListSetAt(type_args, 0, int_type); |
+ Dart_ListSetAt(type_args, 1, int_type); |
+ Dart_ListSetAt(type_args, 2, int_type); |
+ Dart_Handle Test5_int_type = Dart_GetType(script_lib, |
+ Test5_name, |
+ 3, |
+ &type_args); |
+ { |
+ Dart_Handle super_type = Dart_GetSupertype(object_type); |
+ EXPECT(super_type == Dart_Null()); |
+ } |
+ { |
+ Dart_Handle super_type = Dart_GetSupertype(Test1_type); |
+ const Type& expected_type = Api::UnwrapTypeHandle(isolate, Test_type); |
+ const Type& actual_type = Api::UnwrapTypeHandle(isolate, super_type); |
+ EXPECT(expected_type.raw() == actual_type.raw()); |
+ } |
+ { |
+ Dart_Handle super_type = Dart_GetSupertype(Test3_type); |
+ const Type& expected_type = Api::UnwrapTypeHandle(isolate, Test2_int_type); |
+ const Type& actual_type = Api::UnwrapTypeHandle(isolate, super_type); |
+ EXPECT(expected_type.raw() == actual_type.raw()); |
+ } |
+ { |
+ Dart_Handle super_type = Dart_GetSupertype(Test4_int_type); |
+ const Type& expected_type = Api::UnwrapTypeHandle(isolate, Test2_int_type); |
+ const Type& actual_type = Api::UnwrapTypeHandle(isolate, super_type); |
+ EXPECT(expected_type.raw() == actual_type.raw()); |
+ } |
+ { |
+ Dart_Handle super_type = Dart_GetSupertype(Test5_int_type); |
+ const Type& expected_type = Api::UnwrapTypeHandle(isolate, Test4_int_type); |
+ const Type& actual_type = Api::UnwrapTypeHandle(isolate, super_type); |
+ EXPECT(expected_type.raw() == actual_type.raw()); |
+ } |
+} |
+ |
} // namespace dart |