blob: 00c923eaed21cb5354d894fea213191617361922 [file] [log] [blame]
// Copyright (c) 2019, 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
// Tests that mixin application forwarding constructors correctly forward
// optional parameter default values.
import "package:expect/expect.dart";
import "mixin_constructor_parameter_forwarding_helper.dart"
show B2, privateValue;
class B<T> {
final T x;
final Object y;
const B(T x, [Object y = 0])
: x = x,
y = y;
const B.b1(T x, {Object y = 0})
: x = x,
y = y;
const B.b2(T x, [Object y = const <int>[0]])
: x = x,
y = y;
}
mixin M1 on B<int> {
void check(int x, Object y) {
Expect.identical(x, this.x);
Expect.identical(y, this.y);
}
}
mixin M2<T> on B<T> {
void check(T x, Object y) {
Expect.identical(x, this.x);
Expect.identical(y, this.y);
}
}
class A1 = B<int> with M1;
class A2 = B<int> with M2<int>;
class P1 = B2<int> with M2<int>;
main() {
A1(1, 2).check(1, 2);
A1.b1(1, y: 2).check(1, 2);
A1.b2(1, 2).check(1, 2);
A2(1, 2).check(1, 2);
A2.b1(1, y: 2).check(1, 2);
A2.b2(1, 2).check(1, 2);
P1(1, 2).check(1, 2);
A1(1).check(1, 0);
A1.b1(1).check(1, 0);
A1.b2(1).check(1, const <int>[0]);
A2(1).check(1, 0);
A2.b1(1).check(1, 0);
A2.b2(1).check(1, const <int>[0]);
P1(1).check(1, privateValue);
const A1(1, 2).check(1, 2);
const A1.b1(1, y: 2).check(1, 2);
const A1.b2(1, 2).check(1, 2);
const A2(1, 2).check(1, 2);
const A2.b1(1, y: 2).check(1, 2);
const A2.b2(1, 2).check(1, 2);
const P1(1, 2).check(1, 2);
const A1(1).check(1, 0);
const A1.b1(1).check(1, 0);
const A1.b2(1).check(1, const <int>[0]);
const A2(1).check(1, 0);
const A2.b1(1).check(1, 0);
const A2.b2(1).check(1, const <int>[0]);
const P1(1).check(1, privateValue);
}