Files
sdk/tests/language_2/parameter/initializer_test.dart
T
Leaf Petersen b101a7d002 Add language versions to _2 test libraries
Change-Id: Ib33169c3e0ffc870915c189404074a1dea472546
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/196548
Reviewed-by: Bob Nystrom <rnystrom@google.com>
Commit-Queue: Leaf Petersen <leafp@google.com>
2021-04-26 17:58:57 +00:00

85 lines
1.6 KiB
Dart

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