// Copyright (c) 2011, 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.
// Dart test for testing order of constructor invocation.

// @dart = 2.9

import "package:expect/expect.dart";

var trace = "";

int rec(int i) {
  trace += "$i ";
  return i;
}

class A {
  A(int x) : x = rec(4) {
    Expect.equals(3, x); // Parameter x
    Expect.equals(4, this.x);
    rec(5);
  }
  final int x;
}

class B extends A {
  B(this.a, int y, int z)
      : z = rec(1),
        y = rec(2),
        super(rec(3)) {
    rec(6);
  }
  int a;
  int y;
  int z;
}

main() {
  var test = new B(rec(0), 0, 0);
  Expect.equals(0, test.a);
  Expect.equals(4, test.x);
  Expect.equals(2, test.y);
  Expect.equals(1, test.z);
  Expect.equals("0 1 2 3 4 5 6 ", trace);
}
