UNPKG

koffi

Version:

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

60 lines (47 loc) 2.3 kB
'use strict'; 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); } }