// Copyright (c) 2015, 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";

Object bar(Object x) {
  return x;
}

Function baz = bar;

dynamic dyn = bar;

class Foo {
  Object call(Object x) {
    return 'Foo$x';
  }
}

typedef Object FooType(Object x);
FooType foo = bar;

void main() {
  Expect.equals(42, bar.call(42));
  Expect.equals(42, baz.call(42));
  Expect.equals(42, foo.call(42));
  Expect.equals(42, dyn.call(42));
  Expect.equals(42, bar(42));
  Expect.equals(42, baz(42));
  Expect.equals(42, foo(42));
  Expect.equals(42, dyn(42));

  baz = new Foo();
  foo = new Foo();
  dyn = new Foo();
  Expect.equals('Foo42', baz.call(42));
  Expect.equals('Foo42', foo.call(42));
  Expect.equals('Foo42', dyn.call(42));
  Expect.equals('Foo42', baz(42));
  Expect.equals('Foo42', foo(42));
  Expect.equals('Foo42', dyn(42));

  var s = (FooType).toString();
  var minified = s != 'FooType'; // dart2js --minify has minified names.
  dynamic d = null;
  Expect.throws(() => d(),
      (e) => e is NoSuchMethodError && (minified || '$e'.contains('call')));
}
