// Test that the onNativeCall hook is called when native function is
// called inside self-hosted JS with Function.prototype.{call,apply}.

load(libdir + 'eqArrayHelper.js');

var g = newGlobal({ newCompartment: true });
var dbg = new Debugger();
var gdbg = dbg.addDebuggee(g);

const rv = [];
dbg.onNativeCall = (callee, reason) => {
  rv.push(callee.name);
};

gdbg.executeInGlobal(`
// Directly call.
dateNow.call();
dateNow.apply();

// Call via bind.
Function.prototype.call.bind(Function.prototype.call)(dateNow);
Function.prototype.apply.bind(Function.prototype.apply)(dateNow);

// Call via std_Function_apply
Reflect.apply(dateNow, null, []);
`);
assertEqArray(rv, [
  "call", "dateNow",
  "apply", "dateNow",
  "bind", "bound call", "call", "call", "dateNow",
  "bind", "bound apply", "apply", "apply", "dateNow",
  "apply", "dateNow",
]);
