// 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.

// 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
}
