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