// 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"; class ParameterInitializerTest { static testMain() { var obj = new Foo.untyped(1); Expect.equals(1, obj.x); obj = new Foo.subtype(7); Expect.equals(7, obj.x); obj = new Foo.optional(111); Expect.equals(111, obj.x); obj = new Foo.optional(); Expect.equals(5, obj.x); obj = new Foo(1); Expect.equals(2, obj.x); obj = new SubFoo(42); Expect.equals(1, obj.x); obj = new SubSubFoo(42); Expect.equals(1, obj.x); } } class Foo { Foo(num this.x) { // Reference to x must resolve to the field. x++; Expect.equals(this.x, x); } Foo.untyped(this.x) {} Foo.subtype(int this.x) {} Foo.optional([this.x = 5]) {} num x; } class SubFoo extends Foo { SubFoo(num y) : x_ = 0, super(y) { // Subfoo.setter of x has been invoked in the Foo constructor. Expect.equals(x, 1); Expect.equals(x_, 1); // The super.x will resolved to the field in Foo. Expect.equals(super.x, y); } get x { return x_; } set x(num val) { x_ = val; } num x_; } class SubSubFoo extends SubFoo { SubSubFoo(num y) : super(y) { // Subfoo.setter of x has been invoked in the Foo constructor. Expect.equals(x, 1); Expect.equals(x_, 1); // There is no way to get to the field in Foo. Expect.equals(super.x, 1); } } main() { ParameterInitializerTest.testMain(); }