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 // Tests the type checking when passing code into closure from inside a factory
method | |
6 | |
7 interface Foo<T> default Bar<T> { | |
8 Foo.from(); | |
9 } | |
10 | |
11 class Bar<T> implements Foo<T> { | |
12 Bar() {} | |
13 | |
14 factory Bar.from() { | |
15 var func = (T arg) { | |
16 T foo = arg; | |
17 bool isString = foo is String; | |
18 print(arg); | |
19 print(" String=" + isString); | |
20 }; | |
21 | |
22 func("Hello World!"); // If T is not String, dynamic type checks should fail | |
23 return new Bar<T>(); | |
24 } | |
25 } | |
26 | |
27 main() { | |
28 Foo<String> value1; | |
29 value1 = new Foo<String>.from(); | |
30 | |
31 bool gotError = false; | |
32 | |
33 try { | |
34 Foo<int> value2 = new Foo<int>.from(); | |
35 } catch (TypeError e) { | |
36 gotError = true; | |
37 } | |
38 Expect.equals(true, gotError); | |
39 } | |
OLD | NEW |