blob: f28a72f427ee916f8dc301579aee683f2c689190 [file] [log] [blame]
// Copyright (c) 2015, 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.
// SharedOptions=--supermixin
import "package:expect/expect.dart";
bool inCheckedMode() {
try {
var i = 42;
String s = i;
} on TypeError catch (e) {
return true;
}
return false;
}
class MS<
U,
V
extends U //# 01: static type warning
> {}
class M<
U
extends V //# 01: continued
,
V> extends MS<V, U> {}
class NS<
U
extends V //# 01: continued
,
V> {}
class N<
U,
V
extends U //# 01: continued
> extends NS<V, U> {}
class S<T> {}
class MNA<U, V, W> extends S<List<U>>
with M<List<V>, List<U>>, N<List<W>, List<W>> {}
class MNA2<U, V, W> = S<List<U>> with M<List<W>, List<W>>, N<List<U>, List<V>>;
class MNA3<U, V, W> extends S<List<U>>
with MNA<U, V, W>, MNA2<List<U>, List<V>, List<W>> {}
class MNA4<U, V, W> = S<List<U>>
with MNA<U, V, W>, MNA2<List<U>, List<V>, List<W>>;
main() {
new MNA<num, int, bool>();
new MNA2<num, int, bool>();
new MNA3<num, int, bool>();
new MNA4<num, int, bool>();
bool shouldThrow = false
|| inCheckedMode() //# 01: continued
;
if (shouldThrow) {
// Type parameter U of M must extend type parameter V, but
// type argument List<num> is not a subtype of List<int>.
Expect.throws(() => new MNA<int, num, bool>(), (e) => e is TypeError);
// Type parameter V of N must extend type parameter U, but
// type argument List<num> is not a subtype of List<int>.
Expect.throws(() => new MNA2<int, num, bool>(), (e) => e is TypeError);
// Type parameter V of N must extend type parameter U, but
// type argument List<List<num>> is not a subtype of List<List<int>>.
Expect.throws(() => new MNA3<int, num, bool>(), (e) => e is TypeError);
// Type parameter V of N must extend type parameter U, but
// type argument List<List<num>> is not a subtype of List<List<int>>.
Expect.throws(() => new MNA4<int, num, bool>(), (e) => e is TypeError);
} else {
new MNA<int, num, bool>();
new MNA2<int, num, bool>();
new MNA3<int, num, bool>();
new MNA4<int, num, bool>();
}
}