| // Copyright (c) 2016, 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'; |
| |
| typedef Convert1<O> = O Function<I>(I input); |
| typedef Convert2<I> = O Function<O>(I input); |
| typedef Convert3 = O Function<I, O>(I input); |
| typedef Other(a, b); |
| |
| class Mixin<E> { |
| E convert1<I>(I input) => throw "uncalled"; |
| } |
| |
| class Class<F> extends Object with Mixin<F> { |
| O convert2<O>(F input) => throw "uncalled"; |
| } |
| |
| O convert3<I, O>(I input) => throw "uncalled"; |
| |
| test1() { |
| var val = new Class<String>(); |
| Expect.isTrue(val.convert1 is Convert1); |
| Expect.isFalse(val.convert1 is Convert2); |
| Expect.isTrue(val.convert1 is Convert1<String>); |
| Expect.isFalse(val.convert1 is Convert1<int>); |
| Expect.isFalse(val.convert1 is Convert2<String>); |
| Expect.isFalse(val.convert1 is Other); |
| } |
| |
| test2() { |
| var val = new Class<String>(); |
| Expect.isTrue(val.convert2 is Convert2); |
| Expect.isTrue(val.convert2 is Convert1); |
| Expect.isTrue(val.convert2 is Convert2<String>); |
| Expect.isTrue(val.convert2 is Convert2<int>); |
| Expect.isFalse(val.convert2 is Convert1<String>); |
| Expect.isFalse(val.convert2 is Other); |
| } |
| |
| test3() { |
| Expect.isTrue(convert3 is Convert3); |
| Expect.isFalse(convert3 is Other); |
| } |
| |
| main() { |
| test1(); //# 01: ok |
| test2(); //# 02: ok |
| test3(); //# 03: ok |
| } |