// Copyright (c) 2024, 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. /// WARNING /// /// Not all of the expectations in this test match the language specification. /// /// This is part of a set of tests covering "callable objects". Please consider /// them all together when making changes: /// /// ``` /// tests/web/call_field_test.dart /// tests/web/call_getter_test.dart /// tests/web/call_method_test.dart /// ``` /// /// This test was created with expectations that match the current behavior to /// make it more clear when something changes and when the results in the web /// compilers differ. /// /// If your change causes an expectation to fail you should decide if the /// new result is desirable and update the expectation accordingly. import 'package:expect/expect.dart'; @pragma('dart2js:noInline') @pragma('dart2js:assumeDynamic') dynamic confuse(dynamic x) => x; class C { int call(String s) => s.length; } extension on A { int call(String s) => s.length; } class A {} extension type ExtType(B _) { int call(String s) => s.length; } class B {} void main() { var c = C(); Expect.equals(5, c.call('Cello')); Expect.equals(5, (c.call)('Cello')); Expect.equals(5, c('Cello')); var d = confuse(C()); Expect.equals(5, d.call('Fosse')); Expect.equals(5, (d.call)('Fosse')); Expect.equals(5, d('Fosse')); var a = A(); Expect.equals(5, a.call('Cello')); Expect.equals(5, (a.call)('Cello')); Expect.equals(5, a('Cello')); d = confuse(A()); Expect.throwsNoSuchMethodError(() => d.call('Fosse')); Expect.throwsNoSuchMethodError(() => (d.call)('Fosse')); Expect.throwsNoSuchMethodError(() => d('Fosse')); var b = ExtType(B()); Expect.equals(5, b.call('Cello')); Expect.equals(5, (b.call)('Cello')); Expect.equals(5, b('Cello')); d = confuse(ExtType(B())); Expect.throwsNoSuchMethodError(() => d.call('Fosse')); Expect.throwsNoSuchMethodError(() => (d.call)('Fosse')); Expect.throwsNoSuchMethodError(() => d('Fosse')); }