| OLD | NEW |
| 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 // Tests self referencing types. | 5 // Tests self referencing types. |
| 6 | 6 |
| 7 import "package:expect/expect.dart"; | 7 import "package:expect/expect.dart"; |
| 8 | 8 |
| 9 class Base<T> { | 9 class Base<T> { |
| 10 get t => T; | 10 get t => T; |
| 11 } | 11 } |
| 12 | 12 |
| 13 // Derived<T> is contractive. | 13 // Derived<T> is contractive. |
| 14 class Derived<T> extends Base<Derived<T>> {} // /// 00: ok | 14 class Derived<T> extends Base<Derived<T>> {} // //# 00: ok |
| 15 | 15 |
| 16 // Derived<T> is contractive. | 16 // Derived<T> is contractive. |
| 17 class Derived<T> extends Base<Derived<Derived<int>>> {} // /// 01: ok | 17 class Derived<T> extends Base<Derived<Derived<int>>> {} // //# 01: ok |
| 18 | 18 |
| 19 // Derived<T> is non-contractive. | 19 // Derived<T> is non-contractive. |
| 20 class Derived<T> extends Base<Derived<Derived<T>>> {} // /// 02: ok | 20 class Derived<T> extends Base<Derived<Derived<T>>> {} // //# 02: ok |
| 21 | 21 |
| 22 // Derived1<U> and Derived2<V> are contractive. | 22 // Derived1<U> and Derived2<V> are contractive. |
| 23 class Derived1<U> extends Base<Derived2<U>> {} // /// 03: ok | 23 class Derived1<U> extends Base<Derived2<U>> {} // //# 03: ok |
| 24 class Derived2<V> extends Base<Derived1<V>> {} // /// 03: ok | 24 class Derived2<V> extends Base<Derived1<V>> {} // //# 03: ok |
| 25 | 25 |
| 26 // Derived1<U> and Derived2<V> are non-contractive. | 26 // Derived1<U> and Derived2<V> are non-contractive. |
| 27 class Derived1<U> extends Base<Derived2<U>> {} // /// 04: ok | 27 class Derived1<U> extends Base<Derived2<U>> {} // //# 04: ok |
| 28 class Derived2<V> extends Base<Derived1<Derived2<V>>> {} // /// 04: ok | 28 class Derived2<V> extends Base<Derived1<Derived2<V>>> {} // //# 04: ok |
| 29 | 29 |
| 30 main() { | 30 main() { |
| 31 // In the tests below we test that we get "int" and "bool" when calling | 31 // In the tests below we test that we get "int" and "bool" when calling |
| 32 // toString() on the int and bool type respectively. This is not required | 32 // toString() on the int and bool type respectively. This is not required |
| 33 // behavior. However, we want to keep the original names for the most common | 33 // behavior. However, we want to keep the original names for the most common |
| 34 // core types so we make sure to handle these specifically in the compiler. | 34 // core types so we make sure to handle these specifically in the compiler. |
| 35 | 35 |
| 36 var d; | 36 var d; |
| 37 d = new Derived(); // /// 00: continued | 37 d = new Derived(); // //# 00: continued |
| 38 Expect.equals("Derived", d.t.toString()); // /// 00: continued | 38 Expect.equals("Derived", d.t.toString()); // //# 00: continued |
| 39 d = new Derived<bool>(); // /// 00: continued | 39 d = new Derived<bool>(); // //# 00: continued |
| 40 Expect.equals("Derived<bool>", d.t.toString()); // /// 00: continued | 40 Expect.equals("Derived<bool>", d.t.toString()); // //# 00: continued |
| 41 d = new Derived<Derived>(); // /// 00: continued | 41 d = new Derived<Derived>(); // //# 00: continued |
| 42 Expect.equals("Derived<Derived>", d.t.toString()); // /// 00: continued | 42 Expect.equals("Derived<Derived>", d.t.toString()); // //# 00: continued |
| 43 | 43 |
| 44 d = new Derived(); // /// 01: continued | 44 d = new Derived(); // //# 01: continued |
| 45 | 45 |
| 46 Expect.equals("Derived<Derived<int>>", d.t.toString()); // /// 01: continued | 46 Expect.equals("Derived<Derived<int>>", d.t.toString()); // //# 01: continued |
| 47 d = new Derived<bool>(); // /// 01: continued | 47 d = new Derived<bool>(); // //# 01: continued |
| 48 Expect.equals("Derived<Derived<int>>", d.t.toString()); // /// 01: continued | 48 Expect.equals("Derived<Derived<int>>", d.t.toString()); // //# 01: continued |
| 49 d = new Derived<Derived>(); // /// 01: continued | 49 d = new Derived<Derived>(); // //# 01: continued |
| 50 Expect.equals("Derived<Derived<int>>", d.t.toString()); // /// 01: continued | 50 Expect.equals("Derived<Derived<int>>", d.t.toString()); // //# 01: continued |
| 51 | 51 |
| 52 d = new Derived(); // /// 02: continued | 52 d = new Derived(); // //# 02: continued |
| 53 Expect.equals("Derived<Derived>", d.t.toString()); // /// 02: continued | 53 Expect.equals("Derived<Derived>", d.t.toString()); // //# 02: continued |
| 54 d = new Derived<bool>(); // /// 02: continued | 54 d = new Derived<bool>(); // //# 02: continued |
| 55 Expect.equals("Derived<Derived<bool>>", d.t.toString()); // /// 02: continued | 55 Expect.equals("Derived<Derived<bool>>", d.t.toString()); // //# 02: continued |
| 56 d = new Derived<Derived>(); // /// 02: continued | 56 d = new Derived<Derived>(); // //# 02: continued |
| 57 Expect.equals("Derived<Derived<Derived>>", d.t.toString()); // /// 02: continu
ed | 57 Expect.equals("Derived<Derived<Derived>>", d.t.toString()); // //# 02: continu
ed |
| 58 | 58 |
| 59 d = new Derived1(); // /// 03: continued | 59 d = new Derived1(); // //# 03: continued |
| 60 Expect.equals("Derived2", d.t.toString()); // /// 03: continued | 60 Expect.equals("Derived2", d.t.toString()); // //# 03: continued |
| 61 d = new Derived2(); // /// 03: continued | 61 d = new Derived2(); // //# 03: continued |
| 62 Expect.equals("Derived1", d.t.toString()); // /// 03: continued | 62 Expect.equals("Derived1", d.t.toString()); // //# 03: continued |
| 63 d = new Derived2<Derived1<int>>(); // /// 03: continued | 63 d = new Derived2<Derived1<int>>(); // //# 03: continued |
| 64 Expect.equals("Derived1<Derived1<int>>", d.t.toString()); // /// 03: continued | 64 Expect.equals("Derived1<Derived1<int>>", d.t.toString()); // //# 03: continued |
| 65 | 65 |
| 66 d = new Derived1(); // /// 04: continued | 66 d = new Derived1(); // //# 04: continued |
| 67 Expect.equals("Derived2", d.t.toString()); // /// 04: continued | 67 Expect.equals("Derived2", d.t.toString()); // //# 04: continued |
| 68 d = new Derived2(); // /// 04: continued | 68 d = new Derived2(); // //# 04: continued |
| 69 Expect.equals("Derived1<Derived2>", d.t.toString()); // /// 04: continued | 69 Expect.equals("Derived1<Derived2>", d.t.toString()); // //# 04: continued |
| 70 d = new Derived2<Derived1<int>>(); // /// 04: continued | 70 d = new Derived2<Derived1<int>>(); // //# 04: continued |
| 71 Expect.equals("Derived1<Derived2<Derived1<int>>>", d.t.toString()); // /// 04:
continued | 71 Expect.equals("Derived1<Derived2<Derived1<int>>>", d.t.toString()); // //# 04:
continued |
| 72 } | 72 } |
| OLD | NEW |