| // Copyright (c) 2011, 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 = 2.9 |
| |
| import "package:expect/expect.dart"; |
| |
| // Tests static and instance fields initialization. |
| class DefaultInitTest { |
| static testMain() { |
| Expect.equals(0, A.a); |
| Expect.equals(2, A.b); |
| Expect.equals(null, A.c); |
| |
| A a1 = new A(42); |
| Expect.equals(42, a1.d); |
| Expect.equals(null, a1.e); |
| |
| A a2 = new A.named(43); |
| Expect.equals(null, a2.d); |
| Expect.equals(43, a2.e); |
| |
| Expect.equals(42, B.instance.x); |
| Expect.equals(3, C.instance.z); |
| } |
| } |
| |
| class A { |
| static const int a = 0; |
| static const int b = 2; |
| static int c; |
| int d; |
| int e; |
| |
| A(int val) { |
| d = val; |
| } |
| |
| A.named(int val) { |
| e = val; |
| } |
| } |
| |
| // The following tests cover cases described in b/4101270 |
| |
| class B { |
| static const B instance = const B(); |
| // by putting this field after the static initializer above, the JS code gen |
| // was calling the constructor before the setter of this property was defined. |
| final int x; |
| const B() : this.x = (41 + 1); |
| } |
| |
| class C { |
| // forward reference to another class |
| static const D instance = const D(); |
| C() {} |
| } |
| |
| class D { |
| const D() : this.z = 3; |
| final int z; |
| } |
| |
| main() { |
| DefaultInitTest.testMain(); |
| } |