Index: tests/compiler/dart2js/lookup_member_test.dart |
diff --git a/tests/compiler/dart2js/lookup_member_test.dart b/tests/compiler/dart2js/lookup_member_test.dart |
index ea1d687c3895a99b7469563c35384106dc81826d..261e53cd7feabcd9a3e3c1c6a5d6b936461c5127 100644 |
--- a/tests/compiler/dart2js/lookup_member_test.dart |
+++ b/tests/compiler/dart2js/lookup_member_test.dart |
@@ -1,76 +1,78 @@ |
-// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file |
-// for details. All rights reserved. Use of this source code is governed by a |
-// BSD-style license that can be found in the LICENSE file. |
- |
-library subtype_test; |
- |
-import 'package:expect/expect.dart'; |
-import 'type_test_helper.dart'; |
-import '../../../sdk/lib/_internal/compiler/implementation/dart_types.dart'; |
-import "../../../sdk/lib/_internal/compiler/implementation/elements/elements.dart" |
- show Element, ClassElement; |
- |
-void main() { |
- test(); |
-} |
- |
-void test() { |
- var env = new TypeEnvironment(r""" |
- class A<T> { |
- T foo; |
- } |
- class B<S> extends A<A<S>> { |
- S bar; |
- } |
- class C<U> extends B<String> with D<B<U>> { |
- U baz; |
- } |
- class D<V> { |
- V boz; |
- } |
- """); |
- |
- void expect(DartType receiverType, String memberName, DartType expectedType) { |
- Member member = receiverType.lookupMember(env.sourceString(memberName)); |
- Expect.isNotNull(member); |
- DartType memberType = member.computeType(env.compiler); |
- Expect.equals(expectedType, memberType, |
- 'Wrong member type for $receiverType.$memberName.'); |
- } |
- |
- DartType int_ = env['int']; |
- DartType String_ = env['String']; |
- |
- ClassElement A = env.getElement('A'); |
- DartType T = A.typeVariables.head; |
- DartType A_T = A.thisType; |
- expect(A_T, 'foo', T); |
- |
- DartType A_int = instantiate(A, [int_]); |
- expect(A_int, 'foo', int_); |
- |
- ClassElement B = env.getElement('B'); |
- DartType S = B.typeVariables.head; |
- DartType B_S = B.thisType; |
- expect(B_S, 'foo', instantiate(A, [S])); |
- expect(B_S, 'bar', S); |
- |
- DartType B_int = instantiate(B, [int_]); |
- expect(B_int, 'foo', A_int); |
- expect(B_int, 'bar', int_); |
- |
- ClassElement C = env.getElement('C'); |
- DartType U = C.typeVariables.head; |
- DartType C_U = C.thisType; |
- expect(C_U, 'foo', instantiate(A, [String_])); |
- expect(C_U, 'bar', String_); |
- expect(C_U, 'baz', U); |
- expect(C_U, 'boz', instantiate(B, [U])); |
- |
- DartType C_int = instantiate(C, [int_]); |
- expect(C_int, 'foo', instantiate(A, [String_])); |
- expect(C_int, 'bar', String_); |
- expect(C_int, 'baz', int_); |
- expect(C_int, 'boz', instantiate(B, [int_])); |
-} |
- |
+// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file |
+// for details. All rights reserved. Use of this source code is governed by a |
+// BSD-style license that can be found in the LICENSE file. |
+ |
+library subtype_test; |
+ |
+import 'package:expect/expect.dart'; |
+import "package:async_helper/async_helper.dart"; |
+import 'type_test_helper.dart'; |
+import '../../../sdk/lib/_internal/compiler/implementation/dart_types.dart'; |
+import "../../../sdk/lib/_internal/compiler/implementation/elements/elements.dart" |
+ show Element, ClassElement; |
+ |
+void main() { |
+ test(); |
+} |
+ |
+void test() { |
+ asyncTest(() => TypeEnvironment.create(r""" |
+ class A<T> { |
+ T foo; |
+ } |
+ class B<S> extends A<A<S>> { |
+ S bar; |
+ } |
+ class C<U> extends B<String> with D<B<U>> { |
+ U baz; |
+ } |
+ class D<V> { |
+ V boz; |
+ } |
+ """).then((env) { |
+ void expect(DartType receiverType, String memberName, |
+ DartType expectedType) { |
+ Member member = receiverType.lookupMember(env.sourceString(memberName)); |
+ Expect.isNotNull(member); |
+ DartType memberType = member.computeType(env.compiler); |
+ Expect.equals(expectedType, memberType, |
+ 'Wrong member type for $receiverType.$memberName.'); |
+ } |
+ |
+ DartType int_ = env['int']; |
+ DartType String_ = env['String']; |
+ |
+ ClassElement A = env.getElement('A'); |
+ DartType T = A.typeVariables.head; |
+ DartType A_T = A.thisType; |
+ expect(A_T, 'foo', T); |
+ |
+ DartType A_int = instantiate(A, [int_]); |
+ expect(A_int, 'foo', int_); |
+ |
+ ClassElement B = env.getElement('B'); |
+ DartType S = B.typeVariables.head; |
+ DartType B_S = B.thisType; |
+ expect(B_S, 'foo', instantiate(A, [S])); |
+ expect(B_S, 'bar', S); |
+ |
+ DartType B_int = instantiate(B, [int_]); |
+ expect(B_int, 'foo', A_int); |
+ expect(B_int, 'bar', int_); |
+ |
+ ClassElement C = env.getElement('C'); |
+ DartType U = C.typeVariables.head; |
+ DartType C_U = C.thisType; |
+ expect(C_U, 'foo', instantiate(A, [String_])); |
+ expect(C_U, 'bar', String_); |
+ expect(C_U, 'baz', U); |
+ expect(C_U, 'boz', instantiate(B, [U])); |
+ |
+ DartType C_int = instantiate(C, [int_]); |
+ expect(C_int, 'foo', instantiate(A, [String_])); |
+ expect(C_int, 'bar', String_); |
+ expect(C_int, 'baz', int_); |
+ expect(C_int, 'boz', instantiate(B, [int_])); |
+ })); |
+} |
+ |