// Copyright (c) 2016, 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 test program testing that NoSuchMethod is properly called.

// @dart = 2.9

import "package:expect/expect.dart";

Invocation invocation;

class C {
  noSuchMethod(Invocation i) {
    invocation = i;
    return 42;
  }
}

expectNSME(Object d) {
  try {
    d.noSuchMethod(invocation);
  } on NoSuchMethodError catch (e) {
    Expect.isTrue(e.toString().contains('foobar'));
  }
}

main() {
  dynamic c = new C() as dynamic;
  Expect.equals(42, c.foobar(123));
  Expect.equals(#foobar, invocation.memberName);
  Expect.listEquals([123], invocation.positionalArguments);
  expectNSME(null);
  expectNSME(777);
  expectNSME('hello');
  expectNSME([]);
  expectNSME(<String>['a', 'b', 'c']);
}
