| 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_]));
|
| + }));
|
| +}
|
| +
|
|
|