// 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. import "package:expect/expect.dart"; class InstanceofTest { InstanceofTest() {} static void testBasicTypes() { Expect.equals(true, 0 is int); Expect.equals(false, (0 is bool)); Expect.equals(false, (0 is String)); Expect.equals(true, 1 is int); Expect.equals(false, (1 is bool)); Expect.equals(false, (1 is String)); Expect.equals(false, (true is int)); Expect.equals(true, true is bool); Expect.equals(false, (true is String)); Expect.equals(false, (false is int)); Expect.equals(true, false is bool); Expect.equals(false, (false is String)); Expect.equals(false, ("a" is int)); Expect.equals(false, ("a" is bool)); Expect.equals(true, "a" is String); Expect.equals(false, ("" is int)); Expect.equals(false, ("" is bool)); Expect.equals(true, "" is String); } static void testInterfaces() { // Simple Cases with interfaces. var a = new A(); Expect.equals(true, a is I); Expect.equals(true, a is A); Expect.equals(false, (a is String)); Expect.equals(false, (a is int)); Expect.equals(false, (a is bool)); Expect.equals(false, (a is B)); Expect.equals(false, (a is J)); // Interfaces with parent var c = new C(); Expect.equals(true, c is I); Expect.equals(true, c is J); Expect.equals(true, c is K); var d = new D(); Expect.equals(true, d is I); Expect.equals(true, d is J); Expect.equals(true, d is K); Expect.equals(true, [] is List); Expect.equals(true, [1, 2, 3] is List); Expect.equals(false, (d is List)); Expect.equals(false, (null is List)); Expect.equals(false, (null is D)); } static void testnum() { Expect.equals(true, 0 is num); Expect.equals(true, 123 is num); Expect.equals(true, 123.34 is num); Expect.equals(false, ("123" is num)); Expect.equals(false, (null is num)); Expect.equals(false, (true is num)); Expect.equals(false, (false is num)); var a = new A(); Expect.equals(false, (a is num)); } static void testTypeOfInstanceOf() { var a = new A(); // Interfaces with parent var c = new C(); var d = new D(); Expect.equals(true, (null is int) is bool); Expect.equals(true, (null is bool) is bool); Expect.equals(true, (null is String) is bool); Expect.equals(true, (null is A) is bool); Expect.equals(true, (null is B) is bool); Expect.equals(true, (null is I) is bool); Expect.equals(true, (null is J) is bool); Expect.equals(true, (0 is int) is bool); Expect.equals(true, (0 is bool) is bool); Expect.equals(true, (0 is String) is bool); Expect.equals(true, (0 is A) is bool); Expect.equals(true, (0 is B) is bool); Expect.equals(true, (0 is I) is bool); Expect.equals(true, (0 is J) is bool); Expect.equals(true, (1 is int) is bool); Expect.equals(true, (1 is bool) is bool); Expect.equals(true, (1 is String) is bool); Expect.equals(true, (1 is A) is bool); Expect.equals(true, (1 is B) is bool); Expect.equals(true, (1 is I) is bool); Expect.equals(true, (1 is J) is bool); Expect.equals(true, (true is int) is bool); Expect.equals(true, (true is bool) is bool); Expect.equals(true, (true is String) is bool); Expect.equals(true, (true is A) is bool); Expect.equals(true, (true is B) is bool); Expect.equals(true, (true is I) is bool); Expect.equals(true, (true is J) is bool); Expect.equals(true, (false is int) is bool); Expect.equals(true, (false is bool) is bool); Expect.equals(true, (false is String) is bool); Expect.equals(true, (false is A) is bool); Expect.equals(true, (false is B) is bool); Expect.equals(true, (false is I) is bool); Expect.equals(true, (false is J) is bool); Expect.equals(true, ("a" is int) is bool); Expect.equals(true, ("a" is bool) is bool); Expect.equals(true, ("a" is String) is bool); Expect.equals(true, ("a" is A) is bool); Expect.equals(true, ("a" is B) is bool); Expect.equals(true, ("a" is I) is bool); Expect.equals(true, ("a" is J) is bool); Expect.equals(true, ("" is int) is bool); Expect.equals(true, ("" is bool) is bool); Expect.equals(true, ("" is String) is bool); Expect.equals(true, ("" is A) is bool); Expect.equals(true, ("" is B) is bool); Expect.equals(true, ("" is I) is bool); Expect.equals(true, ("" is J) is bool); Expect.equals(true, (a is int) is bool); Expect.equals(true, (a is bool) is bool); Expect.equals(true, (a is String) is bool); Expect.equals(true, (a is A) is bool); Expect.equals(true, (a is B) is bool); Expect.equals(true, (a is I) is bool); Expect.equals(true, (a is J) is bool); Expect.equals(true, (c is int) is bool); Expect.equals(true, (c is bool) is bool); Expect.equals(true, (c is String) is bool); Expect.equals(true, (c is A) is bool); Expect.equals(true, (c is B) is bool); Expect.equals(true, (c is I) is bool); Expect.equals(true, (c is J) is bool); Expect.equals(true, (d is int) is bool); Expect.equals(true, (d is bool) is bool); Expect.equals(true, (d is String) is bool); Expect.equals(true, (d is A) is bool); Expect.equals(true, (d is B) is bool); Expect.equals(true, (d is I) is bool); Expect.equals(true, (d is J) is bool); } static void testMain() { testBasicTypes(); // TODO(sra): enable after fixing b/4604295 // testnum(); testInterfaces(); testTypeOfInstanceOf(); } } abstract class I {} class A implements I { A() {} } class B { B() {} } abstract class J {} abstract class K implements J {} class C implements I, K { C() {} } class D extends C { D() : super() {} } main() { // Repeat type checks so that inlined tests can be tested as well. for (int i = 0; i < 5; i++) { InstanceofTest.testMain(); } }