| // 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. |
| |
| // @dart = 2.9 |
| |
| // 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)); |
| } |