'use strict';
// Flags: --expose-gc

const common = require('../../common');
const assert = require('assert');

// Testing api calls for function
const test_function = require(`./build/${common.buildType}/test_function`);

function func1() {
  return 1;
}
assert.strictEqual(test_function.TestCall(func1), 1);

function func2() {
  console.log('hello world!');
  return null;
}
assert.strictEqual(test_function.TestCall(func2), null);

function func3(input) {
  return input + 1;
}
assert.strictEqual(test_function.TestCall(func3, 1), 2);

function func4(input) {
  return func3(input);
}
assert.strictEqual(test_function.TestCall(func4, 1), 2);

assert.strictEqual(test_function.TestName.name, 'Name');
assert.strictEqual(test_function.TestNameShort.name, 'Name_');

let tracked_function = test_function.MakeTrackedFunction(common.mustCall());
assert(!!tracked_function);
tracked_function = null;
global.gc();

assert.deepStrictEqual(test_function.TestCreateFunctionParameters(), {
  envIsNull: 'Invalid argument',
  nameIsNull: 'napi_ok',
  cbIsNull: 'Invalid argument',
  resultIsNull: 'Invalid argument'
});

assert.throws(
  () => test_function.TestBadReturnExceptionPending(),
  {
    code: 'throwing exception',
    name: 'Error'
  }
);
