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