// Copyright (c) 2011, 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. /// Dart test program testing generic type allocations and generic type tests. import "package:expect/expect.dart"; class A { const A(); } class AA extends A { const AA(); } class AX { const AX(); } class B { final A a_; final T t_; const B(T t) : a_ = t, t_ = t; isT(x) { return x is T; } } class C { B b_; C(T t) : b_ = new B(t) {} } class D { C caa_; D() : caa_ = new C(const AA()) {} } class E { C cax_ = new C(const AX()); //# 01: compile-time error } main() { D d = new D(); Expect.equals(true, d.caa_.b_ is B); Expect.equals(true, d.caa_.b_.isT(const AA())); C c = new C(const AA()); // inferred as `C` because of the `extends A`. Expect.equals(true, c is C); Expect.equals(false, c is C, 'C is not a subtype of C'); Expect.equals(true, c.b_ is B); Expect.equals(false, c.b_ is B); Expect.equals(true, c.b_.isT(const AA()), 'AA is a subtype of A'); Expect.equals(false, c.b_.isT(const AX()), 'AX is not a subtype of A'); new E(); }