Index: tests/language/field_initialization_order_test.dart |
=================================================================== |
--- tests/language/field_initialization_order_test.dart (revision 0) |
+++ tests/language/field_initialization_order_test.dart (revision 0) |
@@ -0,0 +1,70 @@ |
+// 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. |
+// Test that field initializers are evaluated in the right order. |
+ |
+int counter = 0; |
+ |
+class Mark { |
+ static StringBuffer buffer; |
+ Mark(value) { |
+ buffer.add('$value.'); |
+ } |
+} |
+ |
+class OneField { |
+ var a = new Mark('a'); |
+ |
+ OneField(); |
+ |
+ OneField.init() : a = new Mark('ai'); |
+} |
+ |
+class TwoFields { |
+ var b = new Mark('b'); |
+ var a = new Mark('a'); |
+ |
+ TwoFields(); |
+ |
+ TwoFields.initA() : a = new Mark('ai'); |
+ |
+ TwoFields.initB() : b = new Mark('bi'); |
+ |
+ TwoFields.initBoth() : a = new Mark('ai'), b = new Mark('bi'); |
+} |
+ |
+class InheritOneField extends OneField { |
+ var b = new Mark('b'); |
+ |
+ InheritOneField() : super(); |
+ |
+ InheritOneField.init() : b = new Mark('bi'), super(); |
+ |
+ InheritOneField.superWithInit() : super.init(); |
+ |
+ InheritOneField.initWithSuperInit() : b = new Mark('bi'), super.init(); |
+ |
+ InheritOneField.initWithSuperInit2() : super.init(), b = new Mark('bi'); |
+} |
+ |
+String run(callback) { |
+ Mark.buffer = new StringBuffer(); |
+ callback(); |
+ return Mark.buffer.toString(); |
+} |
+ |
+main() { |
+ Expect.equals('a.', run(() => new OneField())); |
+ Expect.equals('a.ai.', run(() => new OneField.init())); |
+ |
+ Expect.equals('b.a.', run(() => new TwoFields())); |
+ Expect.equals('b.a.ai.', run(() => new TwoFields.initA())); |
+ Expect.equals('b.a.bi.', run(() => new TwoFields.initB())); |
+ Expect.equals('b.a.ai.bi.', run(() => new TwoFields.initBoth())); |
+ |
+ Expect.equals('b.a.', run(() => new InheritOneField())); |
+ Expect.equals('b.bi.a.', run(() => new InheritOneField.init())); |
+ Expect.equals('b.a.ai.', run(() => new InheritOneField.superWithInit())); |
+ Expect.equals('b.bi.a.ai.', run(() => new InheritOneField.initWithSuperInit())); |
+ Expect.equals('b.a.ai.bi.', run(() => new InheritOneField.initWithSuperInit2())); |
+} |