| // Copyright (c) 2013, 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 S<T> { |
| bool matches(o) => o is T; |
| } |
| |
| class M {} |
| |
| class C0<T> = S with M; |
| class C1<T> = S<T> with M; |
| class C2<T> = S<int> with M; |
| class C3 = S<String> with M; |
| |
| main() { |
| var c0 = new C0(); |
| Expect.isTrue(c0 is S); |
| Expect.isFalse(c0 is S<int>); |
| Expect.isFalse(c0 is S<String>); |
| Expect.isTrue(c0.matches(c0)); |
| Expect.isTrue(c0.matches(42)); |
| Expect.isTrue(c0.matches("hello")); |
| |
| var c0_int = new C0<int>(); |
| Expect.isTrue(c0_int is S); |
| Expect.isFalse(c0_int is S<int>); |
| Expect.isFalse(c0_int is S<String>); |
| Expect.isTrue(c0_int.matches(c0)); |
| Expect.isTrue(c0_int.matches(42)); |
| Expect.isTrue(c0_int.matches("hello")); |
| |
| var c0_String = new C0<String>(); |
| Expect.isTrue(c0_String is S); |
| Expect.isFalse(c0_String is S<int>); |
| Expect.isFalse(c0_String is S<String>); |
| Expect.isTrue(c0_String.matches(c0)); |
| Expect.isTrue(c0_String.matches(42)); |
| Expect.isTrue(c0_String.matches("hello")); |
| |
| var c1 = new C1(); |
| Expect.isTrue(c1 is S); |
| Expect.isFalse(c1 is S<int>); |
| Expect.isFalse(c1 is S<String>); |
| Expect.isTrue(c1.matches(c1)); |
| Expect.isTrue(c1.matches(42)); |
| Expect.isTrue(c1.matches("hello")); |
| |
| var c1_int = new C1<int>(); |
| Expect.isTrue(c1_int is S); |
| Expect.isTrue(c1_int is S<int>); |
| Expect.isFalse(c1_int is S<String>); |
| Expect.isFalse(c1_int.matches(c1)); |
| Expect.isTrue(c1_int.matches(42)); |
| Expect.isFalse(c1_int.matches("hello")); |
| |
| var c1_String = new C1<String>(); |
| Expect.isTrue(c1_String is S); |
| Expect.isFalse(c1_String is S<int>); |
| Expect.isTrue(c1_String is S<String>); |
| Expect.isFalse(c1_String.matches(c1)); |
| Expect.isFalse(c1_String.matches(42)); |
| Expect.isTrue(c1_String.matches("hello")); |
| |
| var c2 = new C2(); |
| Expect.isTrue(c2 is S); |
| Expect.isTrue(c2 is S<int>); |
| Expect.isFalse(c2 is S<String>); |
| Expect.isFalse(c2.matches(c2)); |
| Expect.isTrue(c2.matches(42)); |
| Expect.isFalse(c2.matches("hello")); |
| |
| var c2_int = new C2<int>(); |
| Expect.isTrue(c2_int is S); |
| Expect.isTrue(c2_int is S<int>); |
| Expect.isFalse(c2_int is S<String>); |
| Expect.isFalse(c2_int.matches(c2)); |
| Expect.isTrue(c2_int.matches(42)); |
| Expect.isFalse(c2_int.matches("hello")); |
| |
| var c2_String = new C2<String>(); |
| Expect.isTrue(c2_String is S); |
| Expect.isTrue(c2_String is S<int>); |
| Expect.isFalse(c2_String is S<String>); |
| Expect.isFalse(c2_String.matches(c2)); |
| Expect.isTrue(c2_String.matches(42)); |
| Expect.isFalse(c2_String.matches("hello")); |
| |
| var c3 = new C3(); |
| Expect.isTrue(c3 is S); |
| Expect.isFalse(c3 is S<int>); |
| Expect.isTrue(c3 is S<String>); |
| Expect.isFalse(c3.matches(c2)); |
| Expect.isFalse(c3.matches(42)); |
| Expect.isTrue(c3.matches("hello")); |
| } |