// 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. // Test long substitution of long redirection chains. import 'package:expect/expect.dart'; class C { const factory C() = D; } class D implements C { const factory D() = E; } class E implements D { final field = 42; const E(); } class X { const factory X() = Y; } class X1 { const factory X1() = Y; } class X2 { const factory X2() = Y; } class Y implements X, X1, X2 { const factory Y() = Y1; } class Y1 implements Y { const factory Y1() = Z; } class Z implements Y1 { final field = 87; const Z(); } void main() { testC(new C()); testC(const C()); testZ(new X()); testZ(new X1()); testZ(new X2()); testZ(const X()); testZ(const X1()); testZ(const X2()); } void testC(var c) { Expect.isTrue(c is C); Expect.isTrue(c is D); Expect.isTrue(c is! D); Expect.isTrue(c is E); Expect.isTrue(c is! E); Expect.isTrue(c is! E); Expect.equals(42, c.field); } void testZ(var z) { Expect.isTrue(z is X); Expect.isTrue(z is! X); Expect.isTrue(z is X1); Expect.isTrue(z is! X1); Expect.isTrue(z is X2); Expect.isTrue(z is Y); Expect.isTrue(z is! Y); Expect.isTrue(z is Y1); Expect.isTrue(z is! Y1); Expect.isTrue(z is Z); Expect.isTrue(z is! Z); Expect.equals(87, z.field); }