// Copyright (c) 2018, 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";

abstract class Bar {
  String bar();
}

abstract class Foo {
  String foo();
}

mixin M implements Bar {
  dynamic noSuchMethod(i) => "M${i.memberName == #foo ? "foo" : "bar"}";
}

abstract class C {
  dynamic noSuchMethod(i) => "C${i.memberName == #foo ? "foo" : "bar"}";
}

abstract class D {
  String foo() => "D:foo";
  String bar() => "D:bar";
}

class A1 extends Foo with M {}
class A2 extends C with M implements Foo {}
class A3 extends D with M implements Foo {}

main() {
  Expect.equals("M:foo", A1().foo());
  Expect.equals("M:bar", A1().bar());
  Expect.equals("M:foo", A2().foo());
  Expect.equals("M:bar", A2().bar());
  Expect.equals("D:foo", A3().foo());
  Expect.equals("D:bar", A3().bar());
}