koffi
Version:
Fast and simple C FFI (foreign function interface) for Node.js
42 lines (31 loc) • 1.71 kB
JavaScript
const assert = require('assert');
module.exports = require('../common').runTest(test);
function test (binding) {
function testDeleteProperty (nativeDeleteProperty) {
const obj = { one: 1, two: 2 };
Object.defineProperty(obj, 'three', { configurable: false, value: 3 });
assert.strictEqual(nativeDeleteProperty(obj, 'one'), true);
assert.strictEqual(nativeDeleteProperty(obj, 'missing'), true);
/* Returns true for all cases except when the property is an own non-
configurable property, in which case, false is returned in non-strict mode. */
assert.strictEqual(nativeDeleteProperty(obj, 'three'), false);
assert.deepStrictEqual(obj, { two: 2 });
}
function testShouldThrowErrorIfKeyIsInvalid (nativeDeleteProperty) {
assert.throws(() => {
nativeDeleteProperty(undefined, 'test');
}, /Cannot convert undefined or null to object/);
}
const testObj = { 15: 42, three: 3 };
binding.object.deletePropertyWithUint32(testObj, 15);
assert.strictEqual(Object.prototype.hasOwnProperty.call(testObj, 15), false);
testDeleteProperty(binding.object.deletePropertyWithNapiValue);
testDeleteProperty(binding.object.deletePropertyWithNapiWrapperValue);
testDeleteProperty(binding.object.deletePropertyWithCStyleString);
testDeleteProperty(binding.object.deletePropertyWithCppStyleString);
testShouldThrowErrorIfKeyIsInvalid(binding.object.deletePropertyWithNapiValue);
testShouldThrowErrorIfKeyIsInvalid(binding.object.deletePropertyWithNapiWrapperValue);
testShouldThrowErrorIfKeyIsInvalid(binding.object.deletePropertyWithCStyleString);
testShouldThrowErrorIfKeyIsInvalid(binding.object.deletePropertyWithCppStyleString);
}
;