// 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 program for constructors and initializers.

class A extends B {
  A(x, y) : super(y), a = x { }

  var a;
}


class B {
  var b;

  B(x) : b = x { }

  B.namedB(var x) : b = x {}
}


// Test the order of initialization: first the instance variable then
// the super constructor.
class Alpha {
  Alpha(v) {
    this.foo(v);
  }
}

class Beta extends Alpha {
  Beta(v) : super(v), b = 1 {}

  foo(v) {
    // Check that 'b' was initialized.
    Expect.equals(1, b);
    b = v;
  }

  var b;
}

class ConstructorTest {
  static testMain() {
    var o = new A(10, 2);
    Expect.equals(10, o.a);
    Expect.equals(2, o.b);

    var o1 = new B.namedB(10);
    Expect.equals(10, o1.b);

    Expect.equals(22, o.a + o.b + o1.b);

    var beta = new Beta(3);
    Expect.equals(3, beta.b);
  }
}

main() {
  ConstructorTest.testMain();
}
