| // Copyright (c) 2017, 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 |
| |
| import 'package:expect/expect.dart'; |
| |
| class A {} |
| |
| class B extends A {} |
| |
| class Foo<T extends A> { |
| String foo(T x) { |
| if (x is B) { |
| var list = [x]; |
| return list.runtimeType.toString(); |
| } |
| return ''; |
| } |
| |
| List<T> bar(T x) { |
| var tlist = <T>[]; |
| if (x is B) { |
| var list = [x]; |
| tlist = list; |
| } |
| return tlist; |
| } |
| } |
| |
| main() { |
| var foo = new Foo<B>(); |
| var b = new B(); |
| |
| // List class has many different platform specific implementations |
| // so we can't rely on the fact that all of them have the same |
| // user visible name. Instead we build a name for List<B> from List<A>. |
| final expected = (<A>[]).runtimeType.toString().replaceAll('<$A>', '<$B>'); |
| Expect.equals(expected, foo.foo(b)); |
| Expect.listEquals([b], foo.bar(b)); |
| } |