// Copyright (c) 2012, 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.7

import "native_testing.dart";

typedef void Callback0();
typedef void Callback1(arg1);
typedef void Callback2(arg1, arg2);

@Native("A")
class A {
  foo1(Callback1 closure, [arg1 = 0]) native;
  foo2(Callback2 closure, [arg1 = 0, arg2 = 1]) native;
}

A makeA() native;

void setup() {
  JS('', r"""
(function(){
  function A() {}
  A.prototype.foo1 = function(closure, arg1) { return closure(arg1); };
  A.prototype.foo2 = function(closure, arg1, arg2) {
    return closure(arg1, arg2);
  };
  makeA = function(){return new A()};
  self.nativeConstructor(A);
})()""");
}

main() {
  nativeTesting();
  setup();
  var a = makeA();
  // Statically known receiver type calls.
  Expect.equals(43, a.foo1((arg1) => arg1, 43));
  Expect.equals(0, a.foo1((arg1) => arg1));

  Expect.equals(44, a.foo2((arg1, arg2) => arg1 + arg2, 21, 23));
  Expect.equals(22, a.foo2((arg1, arg2) => arg1 + arg2, 21));

  // Dynamic calls.
  Expect.equals(43, confuse(a).foo1((arg1) => arg1, 43));
  Expect.equals(0, confuse(a).foo1((arg1) => arg1));

  Expect.equals(44, confuse(a).foo2((arg1, arg2) => arg1 + arg2, 21, 23));
  Expect.equals(22, confuse(a).foo2((arg1, arg2) => arg1 + arg2, 21));
}
