// 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.

/// @assertion If more than one super-constraint interface declares a member
/// with the same name, at least one of those members is more specific than the
/// rest,  and this is the unique signature that super-invocations are allowed
/// to invoke.
///
/// @description Checks that if more than one super-constraint interface declares
/// a member with the same name, at least one of those members is more specific
/// than the rest, and this is the unique signature that super-invocations are
/// allowed to invoke.
/// @author ngl@unipro.ru
/// @author sgrekhov@unipro.ru

import "../../Utils/expect.dart";

class I {}
class J {}

class B {
  String get b1 => "B";
}
class C {
  String get b1 => "C";
}

mixin M on B, C implements I, J {
  test() {
    Expect.equals("A", super.b1);
  }
}

class A implements B, C {
  String get b1 => "A";
}

class MA extends A with M {
}

main() {
  MA ma = new MA();
  ma.test();
}
