|  | // 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. | 
|  |  | 
|  | library mixin_lib_extends_field_test; | 
|  |  | 
|  | import 'package:expect/expect.dart'; | 
|  | import "mixin_lib_extends_field_lib.dart" as L; | 
|  |  | 
|  | class S { | 
|  | var foo = "S-foo"; | 
|  | } | 
|  |  | 
|  | class C extends S with L.M1 { } | 
|  | class D extends S with L.M1, L.M2 { } | 
|  | class E extends S with L.M2, L.M1 { } | 
|  |  | 
|  | class F extends E { | 
|  | var fez = "F-fez"; | 
|  | } | 
|  |  | 
|  | main() { | 
|  | var c = new C(); | 
|  | var d = new D(); | 
|  | var e = new E(); | 
|  | var f = new F(); | 
|  |  | 
|  | Expect.equals("S-foo", c.foo); | 
|  | Expect.equals("S-foo", d.foo); | 
|  | Expect.equals("S-foo", e.foo); | 
|  | Expect.equals("S-foo", f.foo); | 
|  |  | 
|  | Expect.equals("M1-bar", c.bar); | 
|  | Expect.equals("M1-bar", d.bar); | 
|  | Expect.equals("M1-bar", e.bar); | 
|  | Expect.equals("M1-bar", f.bar); | 
|  |  | 
|  | Expect.throws(() => c.baz, (error) => error is NoSuchMethodError); | 
|  | Expect.equals("M2-baz", d.baz); | 
|  | Expect.equals("M2-baz", e.baz); | 
|  | Expect.equals("M2-baz", f.baz); | 
|  |  | 
|  | Expect.throws(() => c.fez, (error) => error is NoSuchMethodError); | 
|  | Expect.throws(() => d.fez, (error) => error is NoSuchMethodError); | 
|  | Expect.throws(() => e.fez, (error) => error is NoSuchMethodError); | 
|  | Expect.equals("F-fez", f.fez); | 
|  |  | 
|  | c.foo = "S-foo-c"; | 
|  | Expect.equals("S-foo-c", c.foo); | 
|  | Expect.equals("S-foo", d.foo); | 
|  | Expect.equals("S-foo", e.foo); | 
|  | Expect.equals("S-foo", f.foo); | 
|  |  | 
|  | d.foo = "S-foo-d"; | 
|  | Expect.equals("S-foo-c", c.foo); | 
|  | Expect.equals("S-foo-d", d.foo); | 
|  | Expect.equals("S-foo", e.foo); | 
|  | Expect.equals("S-foo", f.foo); | 
|  |  | 
|  | e.foo = "S-foo-e"; | 
|  | Expect.equals("S-foo-c", c.foo); | 
|  | Expect.equals("S-foo-d", d.foo); | 
|  | Expect.equals("S-foo-e", e.foo); | 
|  | Expect.equals("S-foo", f.foo); | 
|  |  | 
|  | f.foo = "S-foo-f"; | 
|  | Expect.equals("S-foo-c", c.foo); | 
|  | Expect.equals("S-foo-d", d.foo); | 
|  | Expect.equals("S-foo-e", e.foo); | 
|  | Expect.equals("S-foo-f", f.foo); | 
|  |  | 
|  | Expect.throws(() => c.bar = 0, (error) => error is NoSuchMethodError); | 
|  | Expect.throws(() => d.bar = 0, (error) => error is NoSuchMethodError); | 
|  | Expect.throws(() => e.bar = 0, (error) => error is NoSuchMethodError); | 
|  | Expect.throws(() => f.bar = 0, (error) => error is NoSuchMethodError); | 
|  | Expect.equals("M1-bar", c.bar); | 
|  | Expect.equals("M1-bar", d.bar); | 
|  | Expect.equals("M1-bar", e.bar); | 
|  | Expect.equals("M1-bar", f.bar); | 
|  |  | 
|  | Expect.throws(() => c.baz = 0, (error) => error is NoSuchMethodError); | 
|  | Expect.throws(() => c.baz, (error) => error is NoSuchMethodError); | 
|  | Expect.equals("M2-baz", d.baz); | 
|  | Expect.equals("M2-baz", e.baz); | 
|  | Expect.equals("M2-baz", f.baz); | 
|  |  | 
|  | d.baz = "M2-baz-d"; | 
|  | Expect.throws(() => c.baz, (error) => error is NoSuchMethodError); | 
|  | Expect.equals("M2-baz-d", d.baz); | 
|  | Expect.equals("M2-baz", e.baz); | 
|  | Expect.equals("M2-baz", f.baz); | 
|  | Expect.equals("M2-baz", f.baz); | 
|  |  | 
|  | e.baz = "M2-baz-e"; | 
|  | Expect.throws(() => c.baz, (error) => error is NoSuchMethodError); | 
|  | Expect.equals("M2-baz-d", d.baz); | 
|  | Expect.equals("M2-baz-e", e.baz); | 
|  | Expect.equals("M2-baz", f.baz); | 
|  |  | 
|  | f.baz = "M2-baz-f"; | 
|  | Expect.throws(() => c.baz, (error) => error is NoSuchMethodError); | 
|  | Expect.equals("M2-baz-d", d.baz); | 
|  | Expect.equals("M2-baz-e", e.baz); | 
|  | Expect.equals("M2-baz-f", f.baz); | 
|  |  | 
|  | Expect.throws(() => c.fez = 0, (error) => error is NoSuchMethodError); | 
|  | Expect.throws(() => d.fez = 0, (error) => error is NoSuchMethodError); | 
|  | Expect.throws(() => e.fez = 0, (error) => error is NoSuchMethodError); | 
|  |  | 
|  | f.fez = "F-fez-f"; | 
|  | Expect.throws(() => c.fez, (error) => error is NoSuchMethodError); | 
|  | Expect.throws(() => d.fez, (error) => error is NoSuchMethodError); | 
|  | Expect.throws(() => e.fez, (error) => error is NoSuchMethodError); | 
|  | Expect.equals("F-fez-f", f.fez); | 
|  | } |