| OLD | NEW |
| 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 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 | 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 // Test of parameterized factory methods. | 5 // Test of parameterized factory methods. |
| 6 | 6 |
| 7 class Foo<T extends num> { | 7 class Foo<T extends num> { |
| 8 Foo(); | 8 Foo(); |
| 9 | 9 |
| 10 factory XFoo.bad() { return null; } /// 00: compile-time error | 10 factory XFoo.bad() { return null; } /// 00: compile-time error |
| 11 | 11 |
| 12 factory IFoo.good() { return null; } | 12 factory IFoo.good() { return null; } |
| 13 | 13 |
| 14 factory IFoo() { return null; } | 14 factory IFoo() { return null; } |
| 15 } | 15 } |
| 16 | 16 |
| 17 interface IFoo<T extends num> default Foo<T extends num> { | 17 interface IFoo<T extends num> default Foo<T extends num> { |
| 18 } | 18 } |
| 19 | 19 |
| 20 // String is not assignable to num. | 20 // String is not assignable to num. |
| 21 class Baz | 21 class Baz |
| 22 extends Foo<String> /// 01: static type error | 22 extends Foo<String> /// 01: dynamic type error |
| 23 {} | 23 {} |
| 24 | 24 |
| 25 class Biz extends Foo<int> {} | 25 class Biz extends Foo<int> {} |
| 26 | 26 |
| 27 Foo<int> fi; | 27 Foo<int> fi; |
| 28 | 28 |
| 29 // String is not assignable to num. | 29 // String is not assignable to num. |
| 30 Foo | 30 Foo |
| 31 <String> /// 02: static type error | 31 <String> /// 02: static type error |
| 32 fs; | 32 fs; |
| 33 | 33 |
| 34 class Box<T> { | 34 class Box<T> { |
| 35 | 35 |
| 36 // Box.T is not assignable to num. | 36 // Box.T is not assignable to num. |
| 37 Foo<T> t; /// 03: static type error | 37 Foo<T> t; /// 03: static type error |
| 38 | 38 |
| 39 makeFoo() { | 39 makeFoo() { |
| 40 // Box.T is not assignable to num. | 40 // Box.T is not assignable to num. |
| 41 return new Foo<T>(); /// 04: static type error | 41 return new Foo<T>(); /// 04: static type error |
| 42 } | 42 } |
| 43 } | 43 } |
| 44 | 44 |
| 45 main() { | 45 main() { |
| 46 // String is not assignable to num. | 46 // String is not assignable to num. |
| 47 var v1 = new Foo<String>(); /// 05: static type error | 47 var v1 = new Foo<String>(); /// 05: dynamic type error |
| 48 | 48 |
| 49 // String is not assignable to num. | 49 // String is not assignable to num. |
| 50 Foo<String> v2 = null; /// 06: static type error | 50 Foo<String> v2 = null; /// 06: static type error |
| 51 | 51 |
| 52 new Baz(); | 52 new Baz(); |
| 53 new Biz(); | 53 new Biz(); |
| 54 | 54 |
| 55 fi = new Foo(); | 55 fi = new Foo(); |
| 56 fs = new Foo(); | 56 fs = new Foo(); |
| 57 | 57 |
| 58 new Box().makeFoo(); | 58 new Box().makeFoo(); |
| 59 new Box<int>().makeFoo(); | 59 new Box<int>().makeFoo(); |
| 60 new Box<String>().makeFoo(); | 60 new Box<String>().makeFoo(); |
| 61 | 61 |
| 62 // Fisk does not exist. | 62 // Fisk does not exist. |
| 63 new Box<Fisk>(); /// 07: compile-time error | 63 new Box<Fisk>(); /// 07: compile-time error |
| 64 | 64 |
| 65 // Too many type arguments. | 65 // Too many type arguments. |
| 66 new Box<Object, Object>(); /// 08: compile-time error | 66 new Box<Object, Object>(); /// 08: compile-time error |
| 67 | 67 |
| 68 // Fisk does not exist. | 68 // Fisk does not exist. |
| 69 Box<Fisk> box = null; /// 09: dynamic type error | 69 Box<Fisk> box = null; /// 09: static type error |
| 70 | 70 |
| 71 // Too many type arguments. | 71 // Too many type arguments. |
| 72 Box<Object, Object> box = null; /// 10: dynamic type error | 72 Box<Object, Object> box = null; /// 10: static type error |
| 73 } | 73 } |
| OLD | NEW |