// 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";
}

typedef C = S with M1;
typedef D = S with M1, M2;
typedef E = 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);
}
