| // 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. | |
| 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(); | |
| } | |
| } |