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

// Tests self referencing types.

import "package:expect/expect.dart";

@pragma("vm:entry-point")  // Prevent obfuscation
class Base<T> {
  get t => T;
}

// Derived<T> is contractive.
@pragma("vm:entry-point")  // Prevent obfuscation
class Derived<T> extends Base<Derived<T>> {} // //# 00: ok

// Derived<T> is contractive.
@pragma("vm:entry-point")  // Prevent obfuscation
class Derived<T> extends Base<Derived<Derived<int>>> {} // //# 01: ok

// Derived<T> is non-contractive.
@pragma("vm:entry-point")  // Prevent obfuscation
class Derived<T> extends Base<Derived<Derived<T>>> {} // //# 02: ok

// Derived1<U> and Derived2<V> are contractive.
@pragma("vm:entry-point")  // Prevent obfuscation
class Derived1<U> extends Base<Derived2<U>> {} //  //# 03: ok
@pragma("vm:entry-point")  // Prevent obfuscation
class Derived2<V> extends Base<Derived1<V>> {} //  //# 03: ok

// Derived1<U> and Derived2<V> are non-contractive.
@pragma("vm:entry-point")  // Prevent obfuscation
class Derived1<U> extends Base<Derived2<U>> {} //  //# 04: ok
@pragma("vm:entry-point")  // Prevent obfuscation
class Derived2<V> extends Base<Derived1<Derived2<V>>> {} //  //# 04: ok

main() {
  // In the tests below we test that we get "int" and "bool" when calling
  // toString() on the int and bool type respectively. This is not required
  // behavior. However, we want to keep the original names for the most common
  // core types so we make sure to handle these specifically in the compiler.

  var d;
  d = new Derived(); // //# 00: continued
  Expect.equals("Derived<dynamic>", d.t.toString()); // //# 00: continued
  d = new Derived<bool>(); // //# 00: continued
  Expect.equals("Derived<bool>", d.t.toString()); // //# 00: continued
  d = new Derived<Derived>(); // //# 00: continued
  Expect.equals("Derived<Derived<dynamic>>", d.t.toString()); // //# 00: continued

  d = new Derived(); // //# 01: continued

  Expect.equals("Derived<Derived<int>>", d.t.toString()); // //# 01: continued
  d = new Derived<bool>(); // //# 01: continued
  Expect.equals("Derived<Derived<int>>", d.t.toString()); // //# 01: continued
  d = new Derived<Derived>(); // //# 01: continued
  Expect.equals("Derived<Derived<int>>", d.t.toString()); // //# 01: continued

  d = new Derived(); // //# 02: continued
  Expect.equals("Derived<Derived<dynamic>>", d.t.toString()); // //# 02: continued
  d = new Derived<bool>(); // //# 02: continued
  Expect.equals("Derived<Derived<bool>>", d.t.toString()); // //# 02: continued
  d = new Derived<Derived>(); // //# 02: continued
  Expect.equals("Derived<Derived<Derived<dynamic>>>", d.t.toString()); // //# 02: continued

  d = new Derived1(); // //# 03: continued
  Expect.equals("Derived2<dynamic>", d.t.toString()); // //# 03: continued
  d = new Derived2(); // //# 03: continued
  Expect.equals("Derived1<dynamic>", d.t.toString()); // //# 03: continued
  d = new Derived2<Derived1<int>>(); // //# 03: continued
  Expect.equals("Derived1<Derived1<int>>", d.t.toString()); // //# 03: continued

  d = new Derived1(); // //# 04: continued
  Expect.equals("Derived2<dynamic>", d.t.toString()); // //# 04: continued
  d = new Derived2(); // //# 04: continued
  Expect.equals("Derived1<Derived2<dynamic>>", d.t.toString()); // //# 04: continued
  d = new Derived2<Derived1<int>>(); // //# 04: continued
  Expect.equals("Derived1<Derived2<Derived1<int>>>", d.t.toString()); // //# 04: continued
}
