43 lines
1.4 KiB
JavaScript
43 lines
1.4 KiB
JavaScript
|
'use strict';
|
||
|
const assert = require('assert');
|
||
|
const ref = require('ref-napi');
|
||
|
const ffi = require('../');
|
||
|
const bindings = require('node-gyp-build')(__dirname);
|
||
|
|
||
|
describe('Function "type"', function () {
|
||
|
afterEach(global.gc);
|
||
|
|
||
|
it('should be a function', function () {
|
||
|
assert.strictEqual('function', typeof ffi.Function);
|
||
|
});
|
||
|
|
||
|
var voidFn = ffi.Function('void', []);
|
||
|
|
||
|
it('should return a "type" object when invoked with a return type and array of arguments types', function () {
|
||
|
assert(voidFn);
|
||
|
assert.strictEqual('function', typeof voidFn.get);
|
||
|
assert.strictEqual('function', typeof voidFn.set);
|
||
|
});
|
||
|
|
||
|
it('should be accepted as a return "type" to a ForeignFunction', function () {
|
||
|
ffi.ForeignFunction(ref.NULL, voidFn, []);
|
||
|
});
|
||
|
|
||
|
it('should be accepted as an argument "type" to a ForeignFunction', function () {
|
||
|
ffi.ForeignFunction(ref.NULL, 'void', [ voidFn ])
|
||
|
});
|
||
|
|
||
|
it('should work as expected using the "callback_func" static bindings', function () {
|
||
|
const fn = ffi.Function('int', [ 'int' ]);
|
||
|
const callback_func = ffi.ForeignFunction(bindings.callback_func, fn, [ fn ]);
|
||
|
|
||
|
const abs = callback_func(Math.abs);
|
||
|
assert.strictEqual('function', typeof abs);
|
||
|
|
||
|
assert.strictEqual(Math.abs(-5), abs(-5));
|
||
|
assert.strictEqual(Math.abs(-9), abs(-9));
|
||
|
assert.strictEqual(Math.abs(-69), abs(-69));
|
||
|
assert.strictEqual(Math.abs(3), abs(3));
|
||
|
});
|
||
|
});
|