UNPKG

koffi

Version:

Fast and simple C FFI (foreign function interface) for Node.js

151 lines (136 loc) 4.55 kB
'use strict'; const assert = require('assert'); const testUtil = require('./testUtil'); module.exports = require('./common').runTest(test); function test (binding) { return testUtil.runGCTests([ 'Internal Buffer', () => { const test = binding.buffer.createBuffer(); binding.buffer.checkBuffer(test); assert.ok(test instanceof Buffer); const test2 = Buffer.alloc(test.length); test.copy(test2); binding.buffer.checkBuffer(test2); }, 'Buffer copy', () => { const test = binding.buffer.createBufferCopy(); binding.buffer.checkBuffer(test); assert.ok(test instanceof Buffer); }, 'External Buffer', () => { const test = binding.buffer.createExternalBuffer(); binding.buffer.checkBuffer(test); assert.ok(test instanceof Buffer); assert.strictEqual(0, binding.buffer.getFinalizeCount()); }, () => { global.gc(); assert.strictEqual(0, binding.buffer.getFinalizeCount()); }, 'External Buffer with finalizer', () => { const test = binding.buffer.createExternalBufferWithFinalize(); binding.buffer.checkBuffer(test); assert.ok(test instanceof Buffer); assert.strictEqual(0, binding.buffer.getFinalizeCount()); }, () => { global.gc(); }, () => { assert.strictEqual(1, binding.buffer.getFinalizeCount()); }, 'External Buffer with finalizer hint', () => { const test = binding.buffer.createExternalBufferWithFinalizeHint(); binding.buffer.checkBuffer(test); assert.ok(test instanceof Buffer); assert.strictEqual(0, binding.buffer.getFinalizeCount()); }, () => { global.gc(); }, () => { assert.strictEqual(1, binding.buffer.getFinalizeCount()); }, 'Create or Copy External Buffer', () => { const test = binding.buffer.createOrCopyExternalBuffer(); binding.buffer.checkBuffer(test); assert.ok(test instanceof Buffer); assert.strictEqual(0, binding.buffer.getFinalizeCount()); }, () => { global.gc(); assert.strictEqual(0, binding.buffer.getFinalizeCount()); }, 'Create or Copy External Buffer with finalizer', () => { const test = binding.buffer.createOrCopyExternalBufferWithFinalize(); binding.buffer.checkBuffer(test); assert.ok(test instanceof Buffer); assert.strictEqual(0, binding.buffer.getFinalizeCount()); }, () => { global.gc(); }, () => { assert.strictEqual(1, binding.buffer.getFinalizeCount()); }, 'Create or Copy External Buffer with finalizer hint', () => { const test = binding.buffer.createOrCopyExternalBufferWithFinalizeHint(); binding.buffer.checkBuffer(test); assert.ok(test instanceof Buffer); assert.strictEqual(0, binding.buffer.getFinalizeCount()); }, () => { global.gc(); }, () => { assert.strictEqual(1, binding.buffer.getFinalizeCount()); }, 'Create or Copy External Buffer when NODE_API_NO_EXTERNAL_BUFFERS_ALLOWED defined', () => { const test = binding.bufferNoExternal.createOrCopyExternalBuffer(); binding.buffer.checkBuffer(test); assert.ok(test instanceof Buffer); assert.strictEqual(0, binding.buffer.getFinalizeCount()); }, () => { global.gc(); assert.strictEqual(0, binding.buffer.getFinalizeCount()); }, 'Create or Copy External Buffer with finalizer when NODE_API_NO_EXTERNAL_BUFFERS_ALLOWED defined', () => { const test = binding.bufferNoExternal.createOrCopyExternalBufferWithFinalize(); binding.buffer.checkBuffer(test); assert.ok(test instanceof Buffer); // finalizer should have been called when the buffer was created. assert.strictEqual(1, binding.buffer.getFinalizeCount()); }, () => { global.gc(); }, () => { assert.strictEqual(1, binding.buffer.getFinalizeCount()); }, 'Create or Copy External Buffer with finalizer hint when NODE_API_NO_EXTERNAL_BUFFERS_ALLOWED defined', () => { const test = binding.bufferNoExternal.createOrCopyExternalBufferWithFinalizeHint(); binding.buffer.checkBuffer(test); assert.ok(test instanceof Buffer); // finalizer should have been called when the buffer was created. assert.strictEqual(1, binding.buffer.getFinalizeCount()); }, () => { global.gc(); }, () => { assert.strictEqual(1, binding.buffer.getFinalizeCount()); } ]); }