// 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' show Expect;

/*class: A:checks=[]*/
class A {}

/*class: B:checks=[]*/
class B {}

/*class: C:checks=[]*/
class C {}

/*class: D:checks=[]*/
class D {}

/*class: E:checks=[]*/
class E {}

/*class: F:checks=[],typeArgument*/
class F {}

/*class: M1:checks=[]*/
class M1<Tm1> {
  m1() => "M1<$Tm1>";
}

/*class: M2:checks=[]*/
class M2<Tm2> {
  m2() => "M2<$Tm2>";
}

/*class: M3:checks=[]*/
class M3<Tm3> {
  m3() => "M3<$Tm3>";
}

/*class: M4:checks=[]*/
class M4<Tm4> {
  m4() => "M4<$Tm4>";
}

/*class: M5:checks=[]*/
class M5<Tm5> {
  m5() => "M5<$Tm5>";
}

/*class: C1:checks=[$asM1,$asM2,$asM3,$asM4,$asM5],instance*/
class C1 = Object with M1, M2<A>, M3, M4<B>, M5<C>;

/*class: C2:checks=[$asM1,$asM2,$asM3,$asM4,$asM5],instance*/
class C2 = Object with M1<A>, M2<B>, M3<C>, M4<D>, M5<E>;

/*class: C3:checks=[$asM1,$asM3,$asM4,$asM5],instance*/
class C3<T> = Object with M1<A>, M2<T>, M3, M4, M5<B>;

/*class: C4:checks=[$asM1,$asM2,$asM3,$asM4,$asM5],instance*/
class C4 extends Object with M1, M2<A>, M3, M4<B>, M5<C> {}

/*class: C5:checks=[$asM1,$asM2,$asM3,$asM4,$asM5],instance*/
class C5 extends Object with M1<A>, M2<B>, M3<C>, M4<D>, M5<E> {}

/*class: C6:checks=[$asM1,$asM3,$asM4,$asM5],instance*/
class C6<T> extends Object with M1<A>, M2<T>, M3, M4, M5<B> {}

/*class: C7:checks=[$asM1,$asM2,$asM3,$asM4,$asM5],instance*/
class C7 = Object with M1<A>, M2<A>, M3<A>, M4<A>, M5<A>;

/*class: C8:checks=[$asM1,$asM2,$asM3,$asM4,$asM5],instance*/
class C8 extends Object with M1<A>, M2<A>, M3<A>, M4<A>, M5<A> {}

/*class: C9:checks=[$asM1,$asM2,$asM3,$asM4,$asM5],instance*/
class C9 = Object
    with M1<List<A>>, M2<List<A>>, M3<List<A>>, M4<List<A>>, M5<List<A>>;

/*class: CA:checks=[$asM1,$asM2,$asM3,$asM4,$asM5],instance*/
class CA extends Object
    with M1<List<A>>, M2<List<A>>, M3<List<A>>, M4<List<A>>, M5<List<A>> {}

trace(x) => "${x.m1()}, ${x.m2()}, ${x.m3()}, ${x.m4()}, ${x.m5()}";

main() {
  Expect.stringEquals(
      "M1<dynamic>, M2<A>, M3<dynamic>, M4<B>, M5<C>", trace(new C1()));
  Expect.stringEquals("M1<A>, M2<B>, M3<C>, M4<D>, M5<E>", trace(new C2()));
  Expect.stringEquals(
      "M1<A>, M2<dynamic>, M3<dynamic>, M4<dynamic>, M5<B>", trace(new C3()));
  Expect.stringEquals(
      "M1<A>, M2<F>, M3<dynamic>, M4<dynamic>, M5<B>", trace(new C3<F>()));
  Expect.stringEquals(
      "M1<dynamic>, M2<A>, M3<dynamic>, M4<B>, M5<C>", trace(new C4()));
  Expect.stringEquals("M1<A>, M2<B>, M3<C>, M4<D>, M5<E>", trace(new C5()));
  Expect.stringEquals(
      "M1<A>, M2<dynamic>, M3<dynamic>, M4<dynamic>, M5<B>", trace(new C6()));
  Expect.stringEquals(
      "M1<A>, M2<F>, M3<dynamic>, M4<dynamic>, M5<B>", trace(new C6<F>()));
  Expect.stringEquals("M1<A>, M2<A>, M3<A>, M4<A>, M5<A>", trace(new C7()));
  Expect.stringEquals("M1<A>, M2<A>, M3<A>, M4<A>, M5<A>", trace(new C8()));
  Expect.stringEquals(
      "M1<List<A>>, M2<List<A>>, M3<List<A>>, M4<List<A>>, M5<List<A>>",
      trace(new C9()));
  Expect.stringEquals(
      "M1<List<A>>, M2<List<A>>, M3<List<A>>, M4<List<A>>, M5<List<A>>",
      trace(new CA()));
}
