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

// dart2jsOptions=--strong

// Test that Type.toString returns nice strings for native classes with
// reserved names and for raw types.

import "package:expect/expect.dart";

class C<T> {}

class D<X, Y, Z> {}

class Class$With$Dollar {}

void main() {
  Expect.equals('C<dynamic>', new C().runtimeType.toString());
  Expect.equals('C<int>', new C<int>().runtimeType.toString());
  Expect.equals('C<double>', new C<double>().runtimeType.toString());
  Expect.equals('C<num>', new C<num>().runtimeType.toString());
  Expect.equals('C<bool>', new C<bool>().runtimeType.toString());
  Expect.equals('D<dynamic, dynamic, dynamic>', new D().runtimeType.toString());
  Expect.equals('D<dynamic, int, dynamic>',
      new D<dynamic, int, dynamic>().runtimeType.toString());
  D d = new D<dynamic, D, D<dynamic, dynamic, int>>();
  Expect.equals(
      'D<dynamic, D<dynamic, dynamic, dynamic>, D<dynamic, dynamic, int>>',
      d.runtimeType.toString());
  Expect.equals(r'C<Class$With$Dollar>',
      new C<Class$With$Dollar>().runtimeType.toString());
}
