XNSim/XNSimHtml/node_modules/ref-napi/test/reinterpretUntilZeros.js

43 lines
1.5 KiB
JavaScript
Raw Permalink Normal View History

2025-04-28 12:25:20 +08:00
'use strict';
const fs = require('fs');
const assert = require('assert');
const ref = require('../');
describe('reinterpretUntilZeros()', function() {
beforeEach(gc);
it('should return a new Buffer instance up until the first 0', function() {
const buf = Buffer.from('hello\0world');
const buf2 = buf.reinterpretUntilZeros(1);
assert.strictEqual(buf2.length, 'hello'.length);
assert.strictEqual(buf2.toString(), 'hello');
})
it('should return a new Buffer instance up until the first 0 starting from offset', function() {
const buf = Buffer.from('hello\0world');
const buf2 = buf.reinterpretUntilZeros(1, 3);
assert.strictEqual(buf2.length, 'lo'.length);
assert.strictEqual(buf2.toString(), 'lo');
})
it('should return a new Buffer instance up until the first 2-byte sequence of 0s', function() {
const str = 'hello world';
const buf = Buffer.alloc(50);
const len = buf.write(str, 'ucs2');
buf.writeInt16LE(0, len); // NULL terminate the string
const buf2 = buf.reinterpretUntilZeros(2);
assert.strictEqual(str.length, buf2.length / 2);
assert.strictEqual(buf2.toString('ucs2'), str);
})
it('should return a large Buffer instance > 10,000 bytes with UTF16-LE char bytes', function() {
const data = fs.readFileSync(__dirname + '/utf16le.bin');
const strBuf = ref.reinterpretUntilZeros(data, 2);
assert(strBuf.length > 10000);
const str = strBuf.toString('ucs2');
// the data in `utf16le.bin` should be a JSON parsable string
assert(JSON.parse(str));
});
});