mirror of
https://github.com/nodejs/node.git
synced 2025-08-17 22:58:52 +02:00

The convention for js-native-api/<test_name>: * <test_name>.c or <test_name>.cc has the entry point * The name of the target is <test_name> PR-URL: https://github.com/nodejs/node/pull/38692 Reviewed-By: Rich Trott <rtrott@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Michael Dawson <midawson@redhat.com> Reviewed-By: Chengzhong Wu <legendecas@gmail.com> Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
48 lines
2 KiB
JavaScript
48 lines
2 KiB
JavaScript
'use strict';
|
|
const common = require('../../common');
|
|
const assert = require('assert');
|
|
const addon = require(`./build/${common.buildType}/6_object_wrap`);
|
|
|
|
const getterOnlyErrorRE =
|
|
/^TypeError: Cannot set property .* of #<.*> which has only a getter$/;
|
|
|
|
const valueDescriptor = Object.getOwnPropertyDescriptor(
|
|
addon.MyObject.prototype, 'value');
|
|
const valueReadonlyDescriptor = Object.getOwnPropertyDescriptor(
|
|
addon.MyObject.prototype, 'valueReadonly');
|
|
const plusOneDescriptor = Object.getOwnPropertyDescriptor(
|
|
addon.MyObject.prototype, 'plusOne');
|
|
assert.strictEqual(typeof valueDescriptor.get, 'function');
|
|
assert.strictEqual(typeof valueDescriptor.set, 'function');
|
|
assert.strictEqual(valueDescriptor.value, undefined);
|
|
assert.strictEqual(valueDescriptor.enumerable, false);
|
|
assert.strictEqual(valueDescriptor.configurable, false);
|
|
assert.strictEqual(typeof valueReadonlyDescriptor.get, 'function');
|
|
assert.strictEqual(valueReadonlyDescriptor.set, undefined);
|
|
assert.strictEqual(valueReadonlyDescriptor.value, undefined);
|
|
assert.strictEqual(valueReadonlyDescriptor.enumerable, false);
|
|
assert.strictEqual(valueReadonlyDescriptor.configurable, false);
|
|
|
|
assert.strictEqual(plusOneDescriptor.get, undefined);
|
|
assert.strictEqual(plusOneDescriptor.set, undefined);
|
|
assert.strictEqual(typeof plusOneDescriptor.value, 'function');
|
|
assert.strictEqual(plusOneDescriptor.enumerable, false);
|
|
assert.strictEqual(plusOneDescriptor.configurable, false);
|
|
|
|
const obj = new addon.MyObject(9);
|
|
assert.strictEqual(obj.value, 9);
|
|
obj.value = 10;
|
|
assert.strictEqual(obj.value, 10);
|
|
assert.strictEqual(obj.valueReadonly, 10);
|
|
assert.throws(() => { obj.valueReadonly = 14; }, getterOnlyErrorRE);
|
|
assert.strictEqual(obj.plusOne(), 11);
|
|
assert.strictEqual(obj.plusOne(), 12);
|
|
assert.strictEqual(obj.plusOne(), 13);
|
|
|
|
assert.strictEqual(obj.multiply().value, 13);
|
|
assert.strictEqual(obj.multiply(10).value, 130);
|
|
|
|
const newobj = obj.multiply(-1);
|
|
assert.strictEqual(newobj.value, -13);
|
|
assert.strictEqual(newobj.valueReadonly, -13);
|
|
assert.notStrictEqual(obj, newobj);
|