// Copyright (c) 2020, 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. // Tests method calls (typed and dynamic) on various forms of JS objects. @JS() library js_parameters_test; import 'package:js/js.dart'; import 'package:expect/expect.dart'; @JS() external void eval(String code); @JS() class Foo { external Foo(); external dynamic method(int x); } @JS() external Foo makeFooLiteral(); @JS() external Foo makeFooObjectCreate(); main() { // These examples from based on benchmarks-internal/js eval(r''' self.Foo = function Foo() {} self.Foo.prototype.method = function(x) { return x + 1; } self.makeFooLiteral = function() { return { method: function(x) { return x + 1; } } } // Objects created in this way have no prototype. self.makeFooObjectCreate = function() { var o = Object.create(null); o.method = function(x) { return x + 1; } return o; } '''); var foo = Foo(); Expect.equals(2, foo.method(1)); foo = makeFooLiteral(); Expect.equals(2, foo.method(1)); foo = makeFooObjectCreate(); Expect.equals(2, foo.method(1)); dynamic dynamicFoo = Foo(); Expect.equals(2, dynamicFoo.method(1)); dynamicFoo = makeFooLiteral(); Expect.equals(2, dynamicFoo.method(1)); dynamicFoo = makeFooObjectCreate(); Expect.equals(2, dynamicFoo.method(1)); }