| // 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. |
| |
| import "package:expect/expect.dart"; |
| |
| // Test that initializers for final fields are evaluated in the right |
| // order. |
| |
| int counter = 0; |
| |
| class Mark { |
| static late StringBuffer buffer; |
| Mark(value) { |
| buffer.write('$value.'); |
| } |
| } |
| |
| class OneField { |
| final a = new Mark('a'); |
| OneField(); |
| } |
| |
| class TwoFields { |
| final a = new Mark('a'); |
| final b = new Mark('b'); |
| TwoFields(); |
| } |
| |
| class InheritOneField extends OneField { |
| final b = new Mark('b'); |
| InheritOneField(); |
| } |
| |
| class MixedFields extends OneField { |
| final b = new Mark('b'); |
| var c = new Mark('c'); |
| final d = new Mark('d'); |
| MixedFields(); |
| MixedFields.c0() : c = new Mark('cc'); |
| MixedFields.c1() |
| : c = new Mark('cc'), |
| super(); |
| } |
| |
| String run(callback) { |
| Mark.buffer = new StringBuffer(); |
| callback(); |
| return Mark.buffer.toString(); |
| } |
| |
| main() { |
| Expect.equals('a.', run(() => new OneField())); |
| Expect.equals('a.b.', run(() => new TwoFields())); |
| Expect.equals('b.a.', run(() => new InheritOneField())); |
| |
| Expect.equals('b.c.d.a.', run(() => new MixedFields())); |
| Expect.equals('b.c.d.cc.a.', run(() => new MixedFields.c0())); |
| Expect.equals('b.c.d.cc.a.', run(() => new MixedFields.c1())); |
| } |