/*
 * Copyright (c) 2015, 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 Let S be a class, M be a mixin with required superinterfaces
 * T1, . . . , Tn, combined superinterface MS, implemented interfaces
 * I1, . . . , Ik and members as mixin member declarations, and let N be a name.
 * ...
 * The mixin application of M to S with name N introduces a new class, C,
 * with name N, superclass S, implemented interface I1, . . . , Ik and members
 * as instance members.
 * @description Checks that mixin application of the form S with M1,...,Mk;
 * defines a class C with superclass S with M1,...Mk-1. So if Mi have methods
 * with the same names then Mk method overrides the ones from Mi
 * @author sgrekhov@unipro.ru
 */
import '../../../Utils/expect.dart';

class S {
  String get m => "S";
}

class M1 {
  String get m => "M1";
}

class M2 {
  String get m => "M2";
}

class M3 {
  String get m => "M3";
}

class C1 = S with M1;
class C2 = S with M1, M2;
class C3 = S with M1, M2, M3;

main() {
  C1 c1 = new C1();
  Expect.equals("M1", c1.m);

  C2 c2 = new C2();
  Expect.equals("M2", c2.m);

  C3 c3 = new C3();
  Expect.equals("M3", c3.m);
}
