|  | // 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 {} | 
|  |  | 
|  | class M1 {} | 
|  |  | 
|  | class M2 {} | 
|  |  | 
|  | class C = S with M1; | 
|  | class D = S with M1, M2; | 
|  | class E = S with M2, M1; | 
|  |  | 
|  | class F extends E {} | 
|  |  | 
|  | class C_ = S with M1; | 
|  | class D_ = S with M1, M2; | 
|  | class E_ = S with M2, M1; | 
|  |  | 
|  | class F_ extends E_ {} | 
|  |  | 
|  | main() { | 
|  | var c = new C(); | 
|  | Expect.isTrue(c is C); | 
|  | Expect.isFalse(c is D); | 
|  | Expect.isFalse(c is E); | 
|  | Expect.isFalse(c is F); | 
|  | Expect.isTrue(c is S); | 
|  | Expect.isTrue(c is M1); | 
|  | Expect.isFalse(c is M2); | 
|  |  | 
|  | var d = new D(); | 
|  | Expect.isFalse(d is C); | 
|  | Expect.isTrue(d is D); | 
|  | Expect.isFalse(d is E); | 
|  | Expect.isFalse(d is F); | 
|  | Expect.isTrue(d is S); | 
|  | Expect.isTrue(d is M1); | 
|  | Expect.isTrue(d is M2); | 
|  |  | 
|  | var e = new E(); | 
|  | Expect.isFalse(e is C); | 
|  | Expect.isFalse(e is D); | 
|  | Expect.isTrue(e is E); | 
|  | Expect.isFalse(e is F); | 
|  | Expect.isTrue(e is S); | 
|  | Expect.isTrue(e is M1); | 
|  | Expect.isTrue(e is M2); | 
|  |  | 
|  | var f = new F(); | 
|  | Expect.isFalse(f is C); | 
|  | Expect.isFalse(f is D); | 
|  | Expect.isTrue(f is E); | 
|  | Expect.isTrue(f is F); | 
|  | Expect.isTrue(f is S); | 
|  | Expect.isTrue(f is M1); | 
|  | Expect.isTrue(f is M2); | 
|  |  | 
|  | // Make sure we get a new class for each mixin | 
|  | // application (at least the named ones). | 
|  | Expect.isFalse(c is C_); | 
|  | Expect.isFalse(c is D_); | 
|  | Expect.isFalse(c is E_); | 
|  | Expect.isFalse(c is F_); | 
|  |  | 
|  | Expect.isFalse(d is C_); | 
|  | Expect.isFalse(d is D_); | 
|  | Expect.isFalse(d is E_); | 
|  | Expect.isFalse(d is F_); | 
|  |  | 
|  | Expect.isFalse(e is C_); | 
|  | Expect.isFalse(e is D_); | 
|  | Expect.isFalse(e is E_); | 
|  | Expect.isFalse(e is F_); | 
|  |  | 
|  | Expect.isFalse(f is C_); | 
|  | Expect.isFalse(f is D_); | 
|  | Expect.isFalse(f is E_); | 
|  | Expect.isFalse(f is F_); | 
|  | } |