mirror of
https://github.com/dart-lang/sdk
synced 2024-09-19 21:11:40 +00:00
14531fa62d
Only delta from the original is a bad merge of tests/corelib/list_test.dart
This reverts commit 44d8be0ed3
.
BUG=
Review-Url: https://codereview.chromium.org/2774783002 .
83 lines
2.2 KiB
Dart
83 lines
2.2 KiB
Dart
// 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>();
|
|
}
|
|
}
|