// 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 {
  var foo = "S-foo";
}

class M1 {
  final bar = "M1-bar";
}

class M2 {
  var baz = "M2-baz";
}

class C extends S with M1 {}

class D extends S with M1, M2 {}

class E extends S with M2, 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);
}
