// 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 Mixin application semantics is mostly unchanged, except that it's
/// a compile-time error to apply a mixin to a class that doesn't implement all
/// the 'on' type requirements of the mixin declaration, or apply a mixin
/// containing super-invocations to a class that doesn't have a concrete
/// implementation of the super-invoked members compatible with the
/// super-constraint interface.
///
/// @description Checks that there is no compile error if a mixin is applied to a
/// class that implements all the 'on' type requirements of the mixin
/// declaration. Test 'implements' implementation of 'on' clause interfaces and
/// 'implements' part of the mixin
/// @author sgrekhov@unipro.ru

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

String console = "";

class I {
  String get i1 => "I.i1";
  set i2(String v) {
    console = "I:$v";
  }
  String i3() => "I.i3";
  String operator ~() => i1.substring(0, 1);
}
abstract class J {
  String get j1;
  void set j2(String v);
  String j3();
  String operator -();
}

class A {
  String get a1 => "A.a1";
  set a2(String v) {
    console = "A:$v";
  }
  String a3() => "A.a3";
}
abstract class B {
  String get b1;
  void set b2(String v);
  String b3();
}
class C implements A, B, J {
  String get a1 => "C.a1";
  set a2(String v) {
    console = "C:$v";
  }
  String a3() => "C.a3";
  String get b1 => "C.b1";
  void set b2(String v) {
    console = "C:$v";
  }
  String b3() => "C.b3";

  String get j1 => "J.j1";
  set j2(String v) {
    console = "J:$v";
  }
  String j3() => "J.j3";
  String operator -() => j1.substring(2, 3);
}

mixin M on A, B implements I, J {
  String get m1 => "m1";
  void set m2(String v) {
    console = "M:$v";
  }
  String m3() => "m3";

  String get i1 => "I.i1";
  set i2(String v) {
    console = "I:$v";
  }
  String i3() => "I.i3";
  String operator ~() => i1.substring(2, 3);
}

class MA extends C with M {
}

main() {
  MA ma = new MA();

  Expect.equals("C.a1", ma.a1);
  ma.a2 = "a2";
  Expect.equals("C:a2", console);
  Expect.equals("C.a3", ma.a3());

  Expect.equals("C.b1", ma.b1);
  ma.b2 = "b2";
  Expect.equals("C:b2", console);
  Expect.equals("C.b3", ma.b3());

  Expect.equals("m1", ma.m1);
  ma.m2 = "m2";
  Expect.equals("M:m2", console);
  Expect.equals("m3", ma.m3());

  Expect.equals("i", ~ma);
  Expect.equals("j", -ma);
}
