| // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
| // for details. All rights reserved. Use of this source code is governed by a |
| // BSD-style license that can be found in the LICENSE file. |
| // Dart test program for constructors and initializers. |
| |
| // @dart = 2.9 |
| |
| import "package:expect/expect.dart"; |
| |
| // Test 'expression as Type' casts. |
| |
| class C { |
| final int foo = 42; |
| } |
| |
| class D extends C { |
| final int bar = 37; |
| } |
| |
| Object createC() => new C(); |
| Object createD() => new D(); |
| Object getNull() => null; |
| Object createList() => <int>[2]; |
| Object createInt() => 87; |
| Object createString() => "a string"; |
| |
| main() { |
| Object oc = createC(); |
| Object od = createD(); |
| Object on = getNull(); |
| Object ol = createList(); |
| Object oi = createInt(); |
| Object os = createString(); |
| |
| Expect.equals(42, (oc as C).foo); |
| Expect.equals(42, (od as C).foo); |
| Expect.equals(42, (od as D).foo); |
| Expect.equals(37, (od as D).bar); |
| Expect.equals(37, ((od as C) as D).bar); |
| (oc as D).foo; // //# 01: runtime error |
| (on as D).toString(); |
| (on as D).foo; // //# 02: runtime error |
| (on as C).foo; // //# 03: runtime error |
| oc.foo; // //# 04: compile-time error |
| od.foo; // //# 05: compile-time error |
| (on as Object).toString(); |
| (oc as Object).toString(); |
| (od as Object).toString(); |
| (on as dynamic).toString(); |
| (on as dynamic).foo; // //# 07: runtime error |
| (oc as dynamic).foo; |
| (od as dynamic).foo; |
| (oc as dynamic).bar; // //# 08: runtime error |
| (od as dynamic).bar; |
| C c = oc as C; |
| c = od as C; |
| c = oc; |
| D d = od as D; |
| d = oc as D; // //# 10: runtime error |
| d = od; |
| |
| (ol as List)[0]; |
| (ol as List<int>)[0]; |
| (ol as dynamic)[0]; |
| (ol as String).length; // //# 12: runtime error |
| int x = (ol as List<int>)[0]; |
| (ol as List<int>)[0] = (oi as int); |
| |
| (os as String).length; |
| (os as dynamic).length; |
| (oi as String).length; // //# 13: runtime error |
| (os as List).length; // //# 14: runtime error |
| |
| (oi as int) + 2; |
| (oi as List).length; // //# 15: runtime error |
| } |