| // 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 testing setting/getting/initializing static fields. |
| |
| // @dart = 2.9 |
| |
| import "package:expect/expect.dart"; |
| |
| class First { |
| First() {} |
| static var a; |
| static var b; |
| static const int c = 1; |
| static setValues() { |
| a = 24; |
| b = 10; |
| return a + b + c; |
| } |
| } |
| |
| class InitializerTest { |
| static var one; |
| static var two = 2; |
| static var three = 2; |
| |
| static checkValueOfThree() { |
| // We need to keep this check separate to prevent three from |
| // getting initialized before the += is executed. |
| Expect.equals(3, three); |
| } |
| |
| static void testStaticFieldInitialization() { |
| Expect.equals(null, one); |
| Expect.equals(2, two); |
| one = 11; |
| two = 22; |
| Expect.equals(11, one); |
| Expect.equals(22, two); |
| |
| // Assignment operators exercise a different code path. Make sure |
| // that initialization works here as well. |
| three += 1; |
| checkValueOfThree(); |
| } |
| } |
| |
| class StaticFieldTest { |
| static testMain() { |
| First.a = 3; |
| First.b = First.a; |
| Expect.equals(3, First.a); |
| Expect.equals(First.a, First.b); |
| First.b = (First.a = 10); |
| Expect.equals(10, First.a); |
| Expect.equals(10, First.b); |
| First.b = First.a = 15; |
| Expect.equals(15, First.a); |
| Expect.equals(15, First.b); |
| Expect.equals(35, First.setValues()); |
| Expect.equals(24, First.a); |
| Expect.equals(10, First.b); |
| } |
| } |
| |
| class StaticField1RunNegativeTest { |
| static // //# 01: compile-time error |
| var x; |
| testMain() { |
| var foo = new StaticField1RunNegativeTest(); |
| print(x); // Used to compile 'x' and force any errors. |
| var result = foo.x; |
| } |
| } |
| |
| class StaticField1aRunNegativeTest { |
| static // //# 02: compile-time error, runtime error |
| void m() {} |
| |
| testMain() { |
| var foo = new StaticField1aRunNegativeTest(); |
| print(m); // Used to compile 'm' and force any errors. |
| var result = foo.m; |
| } |
| } |
| |
| class StaticField2RunNegativeTest { |
| static //# 03: compile-time error |
| var x; |
| |
| testMain() { |
| var foo = new StaticField2RunNegativeTest(); |
| print(x); // Used to compile 'x' and force any errors. |
| foo.x = 1; |
| } |
| } |
| |
| class StaticField2aRunNegativeTest { |
| static // //# 04: compile-time error |
| void m() {} |
| |
| testMain() { |
| var foo = new StaticField2aRunNegativeTest(); |
| print(m); // Used to compile 'm' and force any errors. |
| foo.m = 1; //# 04:continued |
| } |
| } |
| |
| main() { |
| StaticFieldTest.testMain(); |
| InitializerTest.testStaticFieldInitialization(); |
| new StaticField1RunNegativeTest().testMain(); |
| new StaticField1aRunNegativeTest().testMain(); |
| new StaticField2RunNegativeTest().testMain(); |
| new StaticField2aRunNegativeTest().testMain(); |
| } |