| // 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)); | |
| } |