// Copyright (c) 2012, 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=--no-minify

import "package:expect/expect.dart";

class A extends Object {}

class Concater {
  final x;
  final y;
  Concater(x, y)
      : this.x = x,
        this.y = y;
  add() => x + y.toString();
}

test(expected, x) {
  Expect.equals(expected, x.toString());
  Expect.equals(expected, new Concater("", x).add());
}

main() {
  test("Instance of 'Object'", new Object());
  test("Instance of 'A'", new A());
  test("[]", []);
  test("1", 1);
}
