| // 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. |
| // Test that instanceof works correctly with type variables. |
| |
| // @dart = 2.9 |
| |
| import "package:expect/expect.dart"; |
| |
| // Test that partially typed generic instances are correctly constructed. |
| |
| // Test factory case. |
| class Foo<K, V> { |
| Foo() {} |
| |
| factory Foo.fac() { |
| return new Foo<K, V>(); |
| } |
| |
| FooString() { |
| return new Foo<K, String>.fac(); |
| } |
| } |
| |
| // Test constructor case. |
| class Moo<K, V> { |
| Moo() {} |
| |
| MooString() { |
| return new Moo<K, String>(); |
| } |
| } |
| |
| testAll() { |
| var foo_int_num = new Foo<int, num>(); |
| Expect.isTrue(foo_int_num is Foo<int, num>); |
| Expect.isTrue(foo_int_num is! Foo<int, String>); |
| // foo_int_num.FooString() returns a Foo<int, String> |
| Expect.isTrue(foo_int_num.FooString() is! Foo<int, num>); |
| Expect.isTrue(foo_int_num.FooString() is Foo<int, String>); |
| |
| var foo_raw = new Foo(); |
| Expect.isTrue(foo_raw is! Foo<int, num>); |
| Expect.isTrue(foo_raw is! Foo<int, String>); |
| Expect.isTrue(foo_raw is Foo<dynamic, dynamic>); |
| // foo_raw.FooString() returns a Foo<dynamic, String> |
| Expect.isTrue(foo_raw.FooString() is! Foo<int, num>); |
| Expect.isTrue(foo_raw.FooString() is! Foo<int, String>); |
| Expect.isTrue(foo_raw.FooString() is Foo<dynamic, String>); |
| |
| var moo_int_num = new Moo<int, num>(); |
| Expect.isTrue(moo_int_num is Moo<int, num>); |
| Expect.isTrue(moo_int_num is! Moo<int, String>); |
| // moo_int_num.MooString() returns a Moo<int, String> |
| Expect.isTrue(moo_int_num.MooString() is! Moo<int, num>); |
| Expect.isTrue(moo_int_num.MooString() is Moo<int, String>); |
| |
| var moo_raw = new Moo(); |
| Expect.isTrue(moo_raw is! Moo<int, num>); |
| Expect.isTrue(moo_raw is! Moo<int, String>); |
| Expect.isTrue(moo_raw is Moo<dynamic, dynamic>); |
| // moo_raw.MooString() returns a Moo<dynamic, String> |
| Expect.isTrue(moo_raw.MooString() is! Moo<int, num>); |
| Expect.isTrue(moo_raw.MooString() is! Moo<int, String>); |
| Expect.isTrue(moo_raw.MooString() is Moo<dynamic, String>); |
| } |
| |
| main() { |
| // Repeat type checks so that inlined tests can be tested as well. |
| for (int i = 0; i < 5; i++) { |
| testAll(); |
| } |
| } |