// Copyright (c) 2017, 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.

// @dart = 2.9

import 'package:expect/expect.dart' show Expect;

@pragma("vm:entry-point") // Prevent obfuscation
class A {}

@pragma("vm:entry-point") // Prevent obfuscation
class B {}

@pragma("vm:entry-point") // Prevent obfuscation
class C {}

@pragma("vm:entry-point") // Prevent obfuscation
class D {}

@pragma("vm:entry-point") // Prevent obfuscation
class E {}

@pragma("vm:entry-point") // Prevent obfuscation
class F {}

@pragma("vm:entry-point") // Prevent obfuscation
class M1<Tm1> {
  m1() => "M1<$Tm1>";
}

@pragma("vm:entry-point") // Prevent obfuscation
class M2<Tm2> {
  m2() => "M2<$Tm2>";
}

@pragma("vm:entry-point") // Prevent obfuscation
class M3<Tm3> {
  m3() => "M3<$Tm3>";
}

@pragma("vm:entry-point") // Prevent obfuscation
class M4<Tm4> {
  m4() => "M4<$Tm4>";
}

@pragma("vm:entry-point") // Prevent obfuscation
class M5<Tm5> {
  m5() => "M5<$Tm5>";
}

class C1 = Object with M1, M2<A>, M3, M4<B>, M5<C>;

class C2 = Object with M1<A>, M2<B>, M3<C>, M4<D>, M5<E>;

class C3<T> = Object with M1<A>, M2<T>, M3, M4, M5<B>;

class C4 extends Object with M1, M2<A>, M3, M4<B>, M5<C> {}

class C5 extends Object with M1<A>, M2<B>, M3<C>, M4<D>, M5<E> {}

class C6<T> extends Object with M1<A>, M2<T>, M3, M4, M5<B> {}

class C7 = Object with M1<A>, M2<A>, M3<A>, M4<A>, M5<A>;

class C8 extends Object with M1<A>, M2<A>, M3<A>, M4<A>, M5<A> {}

class C9 = Object
    with M1<List<A>>, M2<List<A>>, M3<List<A>>, M4<List<A>>, M5<List<A>>;

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()));
}
