koffi
Version:
Fast and simple C FFI (foreign function interface) for Node.js
60 lines (47 loc) • 2.3 kB
JavaScript
const assert = require('assert');
module.exports = require('./common').runTest(test);
function test (binding) {
const expected = '123456789';
assert.throws(binding.name.nullStringShouldThrow, {
name: 'Error',
message: 'Error in native callback'
});
assert.ok(binding.name.checkString(expected, 'utf8'));
assert.ok(binding.name.checkString(expected, 'utf16'));
assert.ok(binding.name.checkString(expected.substr(0, 3), 'utf8', 3));
assert.ok(binding.name.checkString(expected.substr(0, 3), 'utf16', 3));
const str1 = binding.name.createString('utf8');
assert.strictEqual(str1, expected);
assert.ok(binding.name.checkString(str1, 'utf8'));
assert.ok(binding.name.checkString(str1, 'utf16'));
const substr1 = binding.name.createString('utf8', 3);
assert.strictEqual(substr1, expected.substr(0, 3));
assert.ok(binding.name.checkString(substr1, 'utf8', 3));
assert.ok(binding.name.checkString(substr1, 'utf16', 3));
const str2 = binding.name.createString('utf16');
assert.strictEqual(str1, expected);
assert.ok(binding.name.checkString(str2, 'utf8'));
assert.ok(binding.name.checkString(str2, 'utf16'));
const substr2 = binding.name.createString('utf16', 3);
assert.strictEqual(substr1, expected.substr(0, 3));
assert.ok(binding.name.checkString(substr2, 'utf8', 3));
assert.ok(binding.name.checkString(substr2, 'utf16', 3));
// eslint-disable-next-line symbol-description
assert.ok(binding.name.checkSymbol(Symbol()));
assert.ok(binding.name.checkSymbol(Symbol('test')));
const sym1 = binding.name.createSymbol();
assert.strictEqual(typeof sym1, 'symbol');
assert.ok(binding.name.checkSymbol(sym1));
const sym2 = binding.name.createSymbol('test');
assert.strictEqual(typeof sym2, 'symbol');
assert.ok(binding.name.checkSymbol(sym1));
// Check for off-by-one errors which might only appear for strings of certain sizes,
// due to how std::string increments its capacity in chunks.
const longString = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
for (let i = 10; i <= longString.length; i++) {
const str = longString.substr(0, i);
assert.strictEqual(binding.name.echoString(str, 'utf8'), str);
assert.strictEqual(binding.name.echoString(str, 'utf16'), str);
}
}
;