blob: 36dbf286fa46e48e6300aa09b4e236bc4b3b15da [file] [log] [blame]
// 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();
}
}