blob: 2cc6133bf18524317d487b2a5b9bf29ea9a61992 [file] [log] [blame]
/*
* Copyright (c) 2019, 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.
*/
/**
* @assertion A generic class declaration introduces a generic class into the
* enclosing library scope. A generic class is a mapping that accepts a list of
* actual type arguments and maps them to a class. Consider a generic class
* declaration [G] named [C] with formal type parameter declarations [X1 extends
* B1,..., Xm extends Bm], and a parameterized type [T] of the form
* [C<T1,..., Tl>].
* Otherwise, said parameterized type [C<T1,..., Tm>] denotes an application of
* the generic class declared by [G] to the type arguments [T1],...,[Tm]. This
* yields a class [C0] whose members are equivalent to those of a class
* declaration which is obtained from the declaration [G] by replacing each
* occurrence of [Xj] by [Tj].
* @description Checks that each occurrence of [Xj] is replaced by [Tj] for
* generic class [C0].
* @author iarkh@unipro.ru
*/
import "dart:async";
import "../../Utils/expect.dart";
class A<X extends A<X>> {}
class C<T> {
check(expected) { Expect.equals(expected, T); }
}
main() {
(new C<int>()).check(int);
(new C<List>()).check(List);
(new C<String>()).check(String);
(new C<C>()).check(C);
(new C<A>()).check(A);
(new C<dynamic>()).check(dynamic);
(new C<Null>()).check(Null);
(new C<Object>()).check(Object);
(new C<FutureOr>()).check(dynamic);
(new C<Null>()).check(Null);
}