/*library: library=[{
  "id": "library/memory:sdk/tests/web/native/main.dart::",
  "kind": "library",
  "name": "js_parameters_test",
  "size": 1891,
  "children": [
    "class/memory:sdk/tests/web/native/main.dart::Bar",
    "class/memory:sdk/tests/web/native/main.dart::Foo",
    "function/memory:sdk/tests/web/native/main.dart::main"
  ],
  "canonicalUri": "memory:sdk/tests/web/native/main.dart"
}]*/
@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 factory Foo();
  /*member: Foo.singleArg:function=[{
  "id": "function/memory:sdk/tests/web/native/main.dart::Foo.singleArg",
  "kind": "function",
  "name": "singleArg",
  "size": 70,
  "outputUnit": "outputUnit/main",
  "parent": "class/memory:sdk/tests/web/native/main.dart::Foo",
  "children": [],
  "modifiers": {
    "static": false,
    "const": false,
    "factory": false,
    "external": true
  },
  "returnType": "dynamic",
  "inferredReturnType": "[null|subclass=Object]",
  "parameters": [
    {
      "name": "a",
      "type": "[exact=JSUInt31]",
      "declaredType": "dynamic"
    }
  ],
  "sideEffects": "SideEffects(reads anything; writes anything)",
  "inlinedCount": 0,
  "code": "singleArg$1(receiver, p0) {\n      return receiver.singleArg(p0);\n    }",
  "type": "dynamic Function(dynamic)"
}]*/
  external singleArg(a);
  /*member: Foo.singlePositionalArg:function=[{
  "id": "function/memory:sdk/tests/web/native/main.dart::Foo.singlePositionalArg",
  "kind": "function",
  "name": "singlePositionalArg",
  "size": 174,
  "outputUnit": "outputUnit/main",
  "parent": "class/memory:sdk/tests/web/native/main.dart::Foo",
  "children": [],
  "modifiers": {
    "static": false,
    "const": false,
    "factory": false,
    "external": true
  },
  "returnType": "dynamic",
  "inferredReturnType": "[null|subclass=Object]",
  "parameters": [
    {
      "name": "a",
      "type": "[null|exact=JSUInt31]",
      "declaredType": "dynamic"
    }
  ],
  "sideEffects": "SideEffects(reads anything; writes anything)",
  "inlinedCount": 0,
  "code": "singlePositionalArg$1(receiver, p0) {\n      return receiver.singlePositionalArg(p0);\n    }\nsinglePositionalArg$0(receiver) {\n      return receiver.singlePositionalArg();\n    }",
  "type": "dynamic Function([dynamic])"
}]*/
  external singlePositionalArg([dynamic? a]);
  /*member: Foo.mixedPositionalArgs:function=[{
  "id": "function/memory:sdk/tests/web/native/main.dart::Foo.mixedPositionalArgs",
  "kind": "function",
  "name": "mixedPositionalArgs",
  "size": 188,
  "outputUnit": "outputUnit/main",
  "parent": "class/memory:sdk/tests/web/native/main.dart::Foo",
  "children": [],
  "modifiers": {
    "static": false,
    "const": false,
    "factory": false,
    "external": true
  },
  "returnType": "dynamic",
  "inferredReturnType": "[null|subclass=Object]",
  "parameters": [
    {
      "name": "a",
      "type": "[exact=JSUInt31]",
      "declaredType": "dynamic"
    },
    {
      "name": "b",
      "type": "[null|exact=JSUInt31]",
      "declaredType": "dynamic"
    }
  ],
  "sideEffects": "SideEffects(reads anything; writes anything)",
  "inlinedCount": 0,
  "code": "mixedPositionalArgs$1(receiver, p0) {\n      return receiver.mixedPositionalArgs(p0);\n    }\nmixedPositionalArgs$2(receiver, p0, p1) {\n      return receiver.mixedPositionalArgs(p0, p1);\n    }",
  "type": "dynamic Function(dynamic,[dynamic])"
}]*/
  external mixedPositionalArgs(a, [dynamic? b]);
}

@JS()
class Bar {
  external static singleArg(a);
  external static singlePositionalArg([dynamic? a]);
  external static mixedPositionalArgs(a, [dynamic? b]);
}

external singleArg(a);
external singlePositionalArg([dynamic? a]);
external mixedPositionalArgs(a, [dynamic? b]);

/*member: main:
 function=[{
  "id": "function/memory:sdk/tests/web/native/main.dart::main",
  "kind": "function",
  "name": "main",
  "size": 1783,
  "outputUnit": "outputUnit/main",
  "parent": "library/memory:sdk/tests/web/native/main.dart::",
  "children": [],
  "modifiers": {
    "static": false,
    "const": false,
    "factory": false,
    "external": false
  },
  "returnType": "dynamic",
  "inferredReturnType": "[null]",
  "parameters": [],
  "sideEffects": "SideEffects(reads anything; writes anything)",
  "inlinedCount": 0,
  "code": "main() {\n      var foo, t1;\n      self.eval(\"    function Foo() {}\\n    Foo.prototype.singleArg = function(a) {\\n      return a;\\n    }\\n    Foo.prototype.singlePositionalArg = singleArg;\\n    Foo.prototype.mixedPositionalArgs = function(a, b) {\\n      if (arguments.length == 0) return a;\\n      return arguments[arguments.length - 1];\\n    }\\n    var Bar = {\\n      singleArg: function(a) {\\n        return a;\\n      },\\n      singlePositionalArg: singleArg,\\n      mixedPositionalArgs: function(a, b) {\\n        if (arguments.length == 0) return a;\\n        return arguments[arguments.length - 1];\\n      },\\n    };\\n    function singleArg(a) {\\n      return a;\\n    }\\n    var singlePositionalArg = singleArg;\\n    function mixedPositionalArgs(a, b) {\\n      if (arguments.length == 0) return a;\\n      return arguments[arguments.length - 1];\\n    }\\n  \");\n      foo = new self.Foo();\n      t1 = J.getInterceptor$x(foo);\n      A.Expect_equals(t1.singleArg$1(foo, 2), 2);\n      A.Expect_equals(t1.singlePositionalArg$1(foo, 2), 2);\n      A.Expect_equals(t1.singlePositionalArg$0(foo), null);\n      A.Expect_equals(t1.mixedPositionalArgs$1(foo, 3), 3);\n      A.Expect_equals(t1.mixedPositionalArgs$2(foo, 3, 4), 4);\n      A.Expect_equals(self.Bar.singleArg(2), 2);\n      A.Expect_equals(self.Bar.singlePositionalArg(2), 2);\n      A.Expect_equals(self.Bar.singlePositionalArg(), null);\n      A.Expect_equals(self.Bar.mixedPositionalArgs(3), 3);\n      A.Expect_equals(self.Bar.mixedPositionalArgs(3, 4), 4);\n      A.Expect_equals(self.singleArg(2), 2);\n      A.Expect_equals(self.singlePositionalArg(2), 2);\n      A.Expect_equals(self.singlePositionalArg(), null);\n      A.Expect_equals(self.mixedPositionalArgs(3), 3);\n      A.Expect_equals(self.mixedPositionalArgs(3, 4), 4);\n    }",
  "type": "dynamic Function()"
}],
 holding=[
  {"id":"function/dart:_interceptors::getNativeInterceptor","mask":null},
  {"id":"function/memory:sdk/tests/web/native/main.dart::Foo.mixedPositionalArgs","mask":"[subclass=LegacyJavaScriptObject]"},
  {"id":"function/memory:sdk/tests/web/native/main.dart::Foo.mixedPositionalArgs","mask":"[subclass=LegacyJavaScriptObject]"},
  {"id":"function/memory:sdk/tests/web/native/main.dart::Foo.singleArg","mask":"[subclass=LegacyJavaScriptObject]"},
  {"id":"function/memory:sdk/tests/web/native/main.dart::Foo.singlePositionalArg","mask":"[subclass=LegacyJavaScriptObject]"},
  {"id":"function/memory:sdk/tests/web/native/main.dart::Foo.singlePositionalArg","mask":"[subclass=LegacyJavaScriptObject]"},
  {"id":"function/package:expect/expect.dart::Expect.equals","mask":null}]
*/
main() {
  eval(r"""
    function Foo() {}
    Foo.prototype.singleArg = function(a) {
      return a;
    }
    Foo.prototype.singlePositionalArg = singleArg;
    Foo.prototype.mixedPositionalArgs = function(a, b) {
      if (arguments.length == 0) return a;
      return arguments[arguments.length - 1];
    }
    var Bar = {
      singleArg: function(a) {
        return a;
      },
      singlePositionalArg: singleArg,
      mixedPositionalArgs: function(a, b) {
        if (arguments.length == 0) return a;
        return arguments[arguments.length - 1];
      },
    };
    function singleArg(a) {
      return a;
    }
    var singlePositionalArg = singleArg;
    function mixedPositionalArgs(a, b) {
      if (arguments.length == 0) return a;
      return arguments[arguments.length - 1];
    }
  """);

  var foo = Foo();
  Expect.equals(foo.singleArg(2), 2);
  Expect.equals(foo.singlePositionalArg(2), 2);
  Expect.equals(foo.singlePositionalArg(), null);
  Expect.equals(foo.mixedPositionalArgs(3), 3);
  Expect.equals(foo.mixedPositionalArgs(3, 4), 4);

  Expect.equals(Bar.singleArg(2), 2);
  Expect.equals(Bar.singlePositionalArg(2), 2);
  Expect.equals(Bar.singlePositionalArg(), null);
  Expect.equals(Bar.mixedPositionalArgs(3), 3);
  Expect.equals(Bar.mixedPositionalArgs(3, 4), 4);

  Expect.equals(singleArg(2), 2);
  Expect.equals(singlePositionalArg(2), 2);
  Expect.equals(singlePositionalArg(), null);
  Expect.equals(mixedPositionalArgs(3), 3);
  Expect.equals(mixedPositionalArgs(3, 4), 4);
}
