blob: fa8a5f13200f858cddb5ea1b6c603951b67e1e51 [file] [log] [blame]
'use strict';
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);
}