Chromium Code Reviews| Index: tests/language_2/type_variable_bounds2_test.dart |
| diff --git a/tests/language_2/type_variable_bounds2_test.dart b/tests/language_2/type_variable_bounds2_test.dart |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..e396a666a39e63761186d93d5b0e8268726b04e4 |
| --- /dev/null |
| +++ b/tests/language_2/type_variable_bounds2_test.dart |
| @@ -0,0 +1,63 @@ |
| +// 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. |
| + |
| +import "package:expect/expect.dart"; |
| + |
| +// Test of parameterized types with invalid bounds. |
| + |
| +abstract class J<T> {} |
| + |
| +abstract class K<T> {} |
| + |
| +abstract class I< |
| + T |
| + extends num //# 00: continued |
| + extends num //# 01: continued |
| + extends num //# 02: continued |
| + extends num //# 03: continued |
| + extends num //# 04: continued |
| + extends num //# 05: continued |
| + extends num //# 06: continued |
| + > {} |
| + |
| +class A<T> implements I<T>, J<T> {} |
|
eernst
2017/09/04 17:04:59
We have the following in the language specificatio
|
| + |
| +main() { |
| + // TODO(jcollins-g): Should this be a compile-time error as well? |
|
Bob Nystrom
2017/08/30 20:02:44
This looks OK to me.
|
| + dynamic a = new A<String>(); |
|
eernst
2017/09/04 17:05:00
The static-only test was discussed in the comment
|
| + |
| + { |
| + // Anything having to do with a here should point out that String does |
| + // not extend num. |
|
eernst
2017/09/04 17:05:00
The static type of `a` is `dynamic`, so we shouldn
|
| + I i = a; // //# 00: compile-time error |
| + J j = a; // //# 01: compile-time error |
| + K k = a; // //# 02: compile-time error |
|
Bob Nystrom
2017/08/30 20:02:44
I would expect to see a compile error at the decla
eernst
2017/09/04 17:05:00
Agreed.
|
| + |
| + // A<bool> is a subtype of I. |
| + Expect.isTrue(a is I); // //# 03: compile-time error |
| + |
| + // A<bool> is a subtype of J. |
| + Expect.isTrue(a is J); // //# 04: compile-time error |
| + |
| + // A<bool> is not a subtype of K. |
| + Expect.isTrue(a is !K); // //# 05: compile-time error |
|
eernst
2017/09/04 17:05:00
I have no idea where `A<bool>` enters the situatio
|
| + } |
| + |
| + a = new A<int>(); |
|
eernst
2017/09/04 17:05:00
Now this is possible!
|
| + |
| + { |
| + I i = a; |
| + J j = a; |
| + K k = a; // //# 06: compile-time error |
|
eernst
2017/09/04 17:05:00
But it should not be a compile-time error to initi
|
| + |
| + // A<int> is a subtype of I. |
| + Expect.isTrue(a is I); |
| + |
| + // A<int> is a subtype of J. |
| + Expect.isTrue(a is J); |
| + |
| + // A<int> is not a subtype of K. |
| + Expect.isTrue(a is! K); |
|
eernst
2017/09/04 17:05:00
When we don't have a compile-time error, `A` is ju
|
| + } |
| +} |