OLD | NEW |
| (Empty) |
1 // Copyright (c) 2012, 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 | |
5 // Dart test program for testing default keyword on interfaces | |
6 // Test case for issues 500 and 512 | |
7 | |
8 interface Link<T> extends Iterable<T> default LinkFactory<T> { | |
9 // does not match constructor for LinkFactory | |
10 Link(T head, [Link<T> tail]); /// static type warning | |
11 Link<T> prepend(T element); | |
12 } | |
13 | |
14 interface EmptyLink<T> extends Link<T> default LinkTail<T> { | |
15 const EmptyLink(); | |
16 } | |
17 | |
18 class LinkFactory<T> { | |
19 factory Link(head, [Link tail]) { | |
20 } | |
21 } | |
22 | |
23 // Does not implement all of Iterable | |
24 class AbstractLink<T> implements Link<T> { /// static type warning | |
25 const AbstractLink(); | |
26 Link<T> prepend(T element) { | |
27 return new Link<T>(element, this); | |
28 } | |
29 } | |
30 | |
31 // Does not implement all of Iterable | |
32 class LinkTail<T> extends AbstractLink<T> /// static type warning | |
33 implements EmptyLink<T> { | |
34 const LinkTail(); | |
35 } | |
36 | |
37 // Does not implement all of Iterable | |
38 class LinkEntry<T> extends AbstractLink<T> { /// static type warning | |
39 LinkEntry(T head, Link<T> realTail); | |
40 } | |
41 | |
42 class Fisk { | |
43 // instantiation of abstract class | |
44 Link<String> nodes = const EmptyLink(); /// static type warning | |
45 } | |
46 | |
47 main() { | |
48 new Fisk(); | |
49 // instantiation of abstract class | |
50 new EmptyLink<String>().prepend('hest'); /// static type warning | |
51 // instantiation of abstract class | |
52 const EmptyLink<String>().prepend('fisk'); /// static type warning | |
53 } | |
54 | |
OLD | NEW |