50 lines
1.5 KiB
JavaScript
Raw Normal View History

2025-04-28 12:25:20 +08:00
'use strict';
const assert = require('assert');
const ref = require('ref-napi');
const ffi = require('../');
describe('ffi_cif', function () {
{
// Never garbage collect CIF structs during these tests.
let save;
beforeEach(() => save = process.env.DEBUG, process.env.DEBUG += ';ffi');
afterEach(() => process.env.DEBUG = save);
}
afterEach(global.gc);
it('should return a Buffer representing the `ffi_cif` instance', function () {
const cif = ffi.CIF(ref.types.void, [ ]);
assert(Buffer.isBuffer(cif));
});
it('should throw an Error when given an invalid "type"', function () {
const ffi_type = new ffi.FFI_TYPE;
ffi_type.size = 0;
ffi_type.alignment = 0;
ffi_type.type = 0;
ffi_type.elements = ref.NULL;
const bad_type = { size: 1, indirection: 1, ffi_type: ffi_type.ref() };
assert.throws(function () {
ffi.CIF(bad_type, []);
}, function (err) {
assert(err.message.indexOf('FFI_BAD_TYPEDEF') !== -1);
assert.strictEqual('FFI_BAD_TYPEDEF', err.code);
assert.strictEqual(ffi.FFI_BAD_TYPEDEF, err.errno);
return true;
});
});
it('should throw an Error when given an invalid ABI argument', function () {
assert.throws(function () {
ffi.CIF(ref.types.void, [], -1);
}, function (err) {
assert(err.message.indexOf('FFI_BAD_ABI') !== -1);
assert.strictEqual('FFI_BAD_ABI', err.code);
assert.strictEqual(ffi.FFI_BAD_ABI, err.errno);
return true;
});
});
});