You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Haha-Yes/node_modules/ref/test/string.js

99 lines
2.7 KiB
JavaScript

var assert = require('assert')
var ref = require('../')
describe('C string', function () {
describe('readCString()', function () {
it('should return "" for a Buffer containing "\\0"', function () {
var buf = new Buffer('\0')
assert.strictEqual('', buf.readCString(0))
})
it('should return "hello" for a Buffer containing "hello\\0world"', function () {
var buf = new Buffer('hello\0world')
assert.strictEqual('hello', buf.readCString(0))
})
it('should throw an Error when reading from the NULL pointer', function () {
assert.throws(function () {
ref.NULL.readCString()
})
})
})
describe('writeCString()', function () {
it('should write a C string (NULL terminated) to a Buffer', function () {
var buf = new Buffer(20)
var str = 'hello world'
buf.writeCString(str)
for (var i = 0; i < str.length; i++) {
assert.equal(str.charCodeAt(i), buf[i])
}
assert.equal(0, buf[str.length])
})
})
describe('allocCString()', function () {
it('should return a new Buffer containing the given string', function () {
var buf = ref.allocCString('hello world')
assert.strictEqual('hello world', buf.readCString())
})
it('should return the NULL pointer for `null` values', function () {
var buf = ref.allocCString(null)
assert(buf.isNull())
assert.strictEqual(0, buf.address())
})
it('should return the NULL pointer for `undefined` values', function () {
var buf = ref.allocCString(undefined)
assert(buf.isNull())
assert.strictEqual(0, buf.address())
})
it('should return the NULL pointer for a NULL pointer Buffer', function () {
var buf = ref.allocCString(ref.NULL)
assert(buf.isNull())
assert.strictEqual(0, buf.address())
})
})
describe('CString', function () {
it('should return JS `null` when given a pointer pointing to NULL', function () {
var buf = ref.alloc(ref.types.CString)
buf.writePointer(ref.NULL)
assert.strictEqual(null, buf.deref())
// another version of the same test
assert.strictEqual(null, ref.get(ref.NULL_POINTER, 0, ref.types.CString))
})
it('should read a utf8 string from a Buffer', function () {
var str = 'hello world'
var buf = ref.alloc(ref.types.CString)
buf.writePointer(new Buffer(str + '\0'))
assert.strictEqual(str, buf.deref())
})
// https://github.com/node-ffi/node-ffi/issues/169
it('should set a Buffer as backing store', function () {
var str = 'hey!'
var store = new Buffer(str + '\0')
var buf = ref.alloc(ref.types.CString)
ref.set(buf, 0, store)
assert.equal(str, ref.get(buf, 0))
})
})
})