dart-sdk/tests/language/generic_instanceof.dart
hausner@google.com 8e29370a1b BREAKING CHANGE: enforce part of directive
For historical reasons, the VM is currently too lenient when parsing library parts. Files that get loaded through a 'part' directive must start with a 'part of libraryname;' clause. The VM so far has not reported an error if the clause is missing.

This change enforces the grammar as the Spec mandates it. Library parts that do not start with 'part of' will no longer compile.

R=srdjan@google.com

Review URL: https://codereview.chromium.org//14791005

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@22278 260f80e4-7a28-3924-810f-c04153c831b5
2013-05-01 20:46:48 +00:00

130 lines
4.7 KiB
Dart

// Copyright (c) 2011, 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.
part of GenericInstanceofTest.dart;
class Foo<T> {
Foo() {}
bool isT(x) { // Untyped parameter to ensure that the static type
// does not affect the result.
return x is T;
}
bool isListT(x) {
return x is List<T>;
}
}
class GenericInstanceof {
static void testMain() {
// Using Object instead of String to ensure that the static type
// does not affect the result.
Foo<Object> fooObject = new Foo<String>();
Expect.equals(true, fooObject.isT("string"));
Expect.equals(false, fooObject.isT(1));
Foo<String> fooString = new Foo<String>();
Expect.equals(true, fooString.isT("string"));
Expect.equals(false, fooString.isT(1));
// Not providing a type argument to ensure that the static type
// does not affect the result.
{
Foo foo = new Foo<String>();
Expect.equals(true, foo.isT("string"));
Expect.equals(false, foo.isT(1));
}
{
Foo foo = new Foo();
Expect.equals(true, foo.isT(new List(5)));
Expect.equals(true, foo.isT(new List<Object>(5)));
Expect.equals(true, foo.isT(new List<int>(5)));
Expect.equals(true, foo.isT(new List<num>(5)));
Expect.equals(true, foo.isT(new List<String>(5)));
}
{
Foo foo = new Foo<List>();
Expect.equals(true, foo.isT(new List(5)));
Expect.equals(true, foo.isT(new List<Object>(5)));
Expect.equals(true, foo.isT(new List<int>(5)));
Expect.equals(true, foo.isT(new List<num>(5)));
Expect.equals(true, foo.isT(new List<String>(5)));
}
{
Foo foo = new Foo<List<Object>>();
Expect.equals(true, foo.isT(new List(5)));
Expect.equals(true, foo.isT(new List<Object>(5)));
Expect.equals(true, foo.isT(new List<int>(5)));
Expect.equals(true, foo.isT(new List<num>(5)));
Expect.equals(true, foo.isT(new List<String>(5)));
}
{
Foo foo = new Foo<List<int>>();
Expect.equals(true, foo.isT(new List(5)));
Expect.equals(false, foo.isT(new List<Object>(5)));
Expect.equals(true, foo.isT(new List<int>(5)));
Expect.equals(false, foo.isT(new List<num>(5)));
Expect.equals(false, foo.isT(new List<String>(5)));
}
{
Foo foo = new Foo<List<num>>();
Expect.equals(true, foo.isT(new List(5)));
Expect.equals(false, foo.isT(new List<Object>(5)));
Expect.equals(true, foo.isT(new List<int>(5)));
Expect.equals(true, foo.isT(new List<num>(5)));
Expect.equals(false, foo.isT(new List<String>(5)));
}
{
Foo foo = new Foo<List<String>>();
Expect.equals(true, foo.isT(new List(5)));
Expect.equals(false, foo.isT(new List<Object>(5)));
Expect.equals(false, foo.isT(new List<int>(5)));
Expect.equals(false, foo.isT(new List<num>(5)));
Expect.equals(true, foo.isT(new List<String>(5)));
}
{
Foo foo = new Foo();
Expect.equals(true, foo.isListT(new List(5)));
Expect.equals(true, foo.isListT(new List<Object>(5)));
Expect.equals(true, foo.isListT(new List<int>(5)));
Expect.equals(true, foo.isListT(new List<num>(5)));
Expect.equals(true, foo.isListT(new List<String>(5)));
}
{
Foo foo = new Foo<Object>();
Expect.equals(true, foo.isListT(new List(5)));
Expect.equals(true, foo.isListT(new List<Object>(5)));
Expect.equals(true, foo.isListT(new List<int>(5)));
Expect.equals(true, foo.isListT(new List<num>(5)));
Expect.equals(true, foo.isListT(new List<String>(5)));
}
{
Foo foo = new Foo<int>();
Expect.equals(true, foo.isListT(new List(5)));
Expect.equals(false, foo.isListT(new List<Object>(5)));
Expect.equals(true, foo.isListT(new List<int>(5)));
Expect.equals(false, foo.isListT(new List<num>(5)));
Expect.equals(false, foo.isListT(new List<String>(5)));
}
{
Foo foo = new Foo<num>();
Expect.equals(true, foo.isListT(new List(5)));
Expect.equals(false, foo.isListT(new List<Object>(5)));
Expect.equals(true, foo.isListT(new List<int>(5)));
Expect.equals(true, foo.isListT(new List<num>(5)));
Expect.equals(false, foo.isListT(new List<String>(5)));
}
{
Foo foo = new Foo<String>();
Expect.equals(true, foo.isListT(new List(5)));
Expect.equals(false, foo.isListT(new List<Object>(5)));
Expect.equals(false, foo.isListT(new List<int>(5)));
Expect.equals(false, foo.isListT(new List<num>(5)));
Expect.equals(true, foo.isListT(new List<String>(5)));
}
}
}