| // 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(); | 
 | } |