dart-sdk/tests/language_2/call_with_no_such_method_test.dart
Jenny Messerly bed5debbeb Callable object support in Analyzer and DDC.
Fixes #32156
Fixes #32157
Fixes #32426

This also fixes `implements Function` so it has no effect in Dart 2
(it is ignored for the purposes of subtyping.)

Change-Id: Ibec9c77cd516b8b97fef68a579998598d0acf8c6
Reviewed-on: https://dart-review.googlesource.com/45141
Commit-Queue: Jenny Messerly <jmesserly@google.com>
Reviewed-by: Paul Berry <paulberry@google.com>
Reviewed-by: Vijay Menon <vsm@google.com>
2018-03-30 18:14:55 +00:00

31 lines
854 B
Dart

// 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.
import "package:expect/expect.dart";
class F {
final int value;
F(this.value);
call() => value;
noSuchMethod(Invocation i) {
if (i.memberName == #call && i.isMethod) {
return i.positionalArguments[0];
}
return super.noSuchMethod(i);
}
}
main() {
F f = new F(42);
// Tears off f.call, fails with nSM (wrong number of arguments).
Expect.throwsNoSuchMethodError(() => Function.apply(f, ['a', 'b', 'c', 'd']));
dynamic d = f;
var result = d('a', 'b', 'c', 'd'); // calls F.noSuchMethod
Expect.equals('a', result);
// Tears off f.call, call succeeds
Expect.equals(42, Function.apply(f, []));
}