blob: 28a4138d294b4321b7c66191a536298604a73be3 [file] [log] [blame]
// Copyright (c) 2018, 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
/// @assertion We say that a type T0 is a subtype of a type T1 (written T0 <: T1)
/// when:
/// Interface Compositionality: T0 is an interface type
/// C0<S0, ..., Sk> and T1 is C0<U0, ..., Uk> and each Si <: Ui
/// @description Check that if type T0 is an interface type
/// C0<S0, ..., Sk> and T1 is C0<U0, ..., Uk> and each Si <: Ui then T0 is a
/// subtype of T1
/// @author sgrekhov@unipro.ru
///
/// @description Check that if type T0 is a subtype of a type T1, then instance
/// of T0 can be be used as an argument of type T1. Test mixin members
/// @author sgrekhov@unipro.ru
///
/// This test is generated from interface_compositionality_A02.dart and
/// arguments_binding_x03.dart.
/// Don't modify it. If you want to change this test, change one of the files
/// above and then run generator.dart to regenerate the tests.
// @dart = 2.9
abstract class U0 {}
abstract class U1 {}
abstract class U2 {}
abstract class S0 extends U0 {}
abstract class S1 extends Object with U1 {}
class S2 = Object with U2;
class C0<X, Y, Z> {}
C0<S0, S1, S2> t0Instance = new C0<S0, S1, S2>();
C0<U0, U1, U2> t1Instance = new C0<U0, U1, U2>();
// @dart = 2.9
class ArgumentsBindingMixin1_t03 {
C0<U0, U1, U2> m;
void superTest(C0<U0, U1, U2> val) {}
void superTestPositioned(C0<U0, U1, U2> val, [C0<U0, U1, U2> val2]) {}
void superTestNamed(C0<U0, U1, U2> val, {C0<U0, U1, U2> val2}) {}
C0<U0, U1, U2> get superGetter => m;
void set superSetter(C0<U0, U1, U2> val) {}
}
class ArgumentsBinding1_t03 extends Object with ArgumentsBindingMixin1_t03 {
test(dynamic t1, dynamic t2) {
superTest(t1);
superTestPositioned(t1);
superTestPositioned(t2, t1);
superTestNamed(t1);
superTestNamed(t2, val2: t1);
superSetter = t1;
m = t1;
superGetter;
}
}
class ArgumentsBindingMixin2_t03<X> {
X m;
void superTest(X val) {}
void superTestPositioned(X val, [X val2]) {}
void superTestNamed(X val, {X val2}) {}
X get superGetter => m;
void set superSetter(X val) {}
}
class ArgumentsBinding2_t03<X> extends Object with ArgumentsBindingMixin2_t03<X> {
test(dynamic t1, dynamic t2) {
superTest(t1);
superTestPositioned(t1);
superTestPositioned(t2, t1);
superTestNamed(t1);
superTestNamed(t2, val2: t1);
superSetter = t1;
m = t1;
superGetter;
}
}
main() {
ArgumentsBinding1_t03 c1 = new ArgumentsBinding1_t03();
c1.test(t0Instance, t1Instance);
c1.superTest(t0Instance);
c1.superTestPositioned(t0Instance);
c1.superTestPositioned(t1Instance, t0Instance);
c1.superTestNamed(t0Instance);
c1.superTestNamed(t1Instance, val2: t0Instance);
c1.superSetter = t0Instance;
c1.superGetter;
// Test type parameters
ArgumentsBinding2_t03<C0<U0, U1, U2>> c2 = new ArgumentsBinding2_t03<C0<U0, U1, U2>>();
c2.test(t0Instance, t1Instance);
c2.superTest(t0Instance);
c2.superTestPositioned(t0Instance);
c2.superTestPositioned(t1Instance, t0Instance);
c2.superTestNamed(t0Instance);
c2.superTestNamed(t1Instance, val2: t0Instance);
c2.superSetter = t0Instance;
c2.superGetter;
}