OLD | NEW |
1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2016, 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 // SharedOptions=--supermixin | 4 // SharedOptions=--supermixin |
5 | 5 |
6 // Validate the following test from section 12 ("Mixins") of the spec: | 6 // Validate the following test from section 12 ("Mixins") of the spec: |
7 // | 7 // |
8 // "Let M_A be a mixin derived from a class M with direct superclass | 8 // "Let M_A be a mixin derived from a class M with direct superclass |
9 // S_static. | 9 // S_static. |
10 // | 10 // |
11 // Let A be an application of M_A. It is a static warning if the | 11 // Let A be an application of M_A. It is a static warning if the |
12 // superclass of A is not a subtype of S_static." | 12 // superclass of A is not a subtype of S_static." |
13 | 13 |
14 // In this test, M is declared as `class M = S_static with G;`. | 14 // In this test, M is declared as `class M = S_static with G;`. |
15 | 15 |
16 class B {} | 16 class B {} |
17 class C {} | 17 class C {} |
18 class D {} | 18 class D {} |
19 class E extends B with C implements D {} | 19 class E extends B with C implements D {} |
20 class F extends E {} | 20 class F extends E {} |
21 class A | 21 class A |
22 = E with M; class M = B with G; class G /// 01: ok | 22 = E with M; class M = B with G; class G //# 01: ok |
23 = E with M; class M = C with G; class G /// 02: static type warning | 23 = E with M; class M = C with G; class G //# 02: static type warning |
24 = E with M; class M = D with G; class G /// 03: ok | 24 = E with M; class M = D with G; class G //# 03: ok |
25 = E with M; class M = E with G; class G /// 04: ok | 25 = E with M; class M = E with G; class G //# 04: ok |
26 = E with M; class M = F with G; class G /// 05: static type warning | 26 = E with M; class M = F with G; class G //# 05: static type warning |
27 {} | 27 {} |
28 | 28 |
29 main() { | 29 main() { |
30 new A(); | 30 new A(); |
31 } | 31 } |
OLD | NEW |