| // 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. |
| |
| // @dart = 2.9 |
| |
| 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(); |
| } |