OLD | NEW |
| (Empty) |
1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file | |
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. | |
4 // VMOptions=--enable_type_checks --enable_asserts | |
5 // | |
6 // Dart test program testing generic type allocations and generic type tests. | |
7 | |
8 class A { | |
9 const A(); | |
10 } | |
11 | |
12 class AA extends A { | |
13 const AA(); | |
14 } | |
15 | |
16 class AX { | |
17 const AX(); | |
18 } | |
19 | |
20 class B<T extends A> { | |
21 final A a_; | |
22 final T t_; | |
23 const B(T t) : a_ = t, t_ = t; | |
24 isT(x) { | |
25 return x is T; | |
26 } | |
27 } | |
28 | |
29 class C<T> { | |
30 B<T> b_; | |
31 C(T t) : b_ = new B<T>(t) { } | |
32 } | |
33 | |
34 class D { | |
35 C<AA> caa_; | |
36 D() : caa_ = new C<AA>(const AA()) { } | |
37 } | |
38 | |
39 class E { | |
40 C<AX> cax_; | |
41 E() : cax_ = new C<AX>(const AX()) { } | |
42 } | |
43 | |
44 class GenericTest { | |
45 static test() { | |
46 int result = 0; | |
47 D d = new D(); | |
48 Expect.equals(true, d.caa_.b_ is B<AA>); | |
49 Expect.equals(true, d.caa_.b_.isT(const AA())); | |
50 C c = new C(const AA()); // c is of raw type C, T in C<T> is Dynamic. | |
51 Expect.equals(true, c.b_ is B); | |
52 Expect.equals(true, c.b_ is B<AA>); | |
53 Expect.equals(true, c.b_.isT(const AA())); | |
54 Expect.equals(true, c.b_.isT(const AX())); | |
55 try { | |
56 E e = new E(); // Throws a type error, if type checks are enabled. | |
57 } catch (TypeError error) { | |
58 result = 1; | |
59 // TODO(regis): The error below is detected too late. | |
60 // It should be reported on line 31, at new B<T>(), i.e. new B<AX>(). | |
61 // This will be detected when we check the subtyping constraints. | |
62 Expect.equals("A", error.dstType); | |
63 Expect.equals("AX", error.srcType); | |
64 int pos = error.url.lastIndexOf("/", error.url.length); | |
65 if (pos == -1) { | |
66 pos = error.url.lastIndexOf("\\", error.url.length); | |
67 } | |
68 String subs = error.url.substring(pos + 1, error.url.length); | |
69 Expect.equals("GenericTest.dart", subs); | |
70 Expect.equals(23, error.line); | |
71 Expect.equals(23, error.column); | |
72 } | |
73 return result; | |
74 } | |
75 | |
76 static testMain() { | |
77 Expect.equals(1, test()); | |
78 } | |
79 } | |
80 | |
81 | |
82 main() { | |
83 GenericTest.testMain(); | |
84 } | |
OLD | NEW |