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