11cb0ef41Sopenharmony_ci'use strict';
21cb0ef41Sopenharmony_ciconst common = require('../../common');
31cb0ef41Sopenharmony_ciconst assert = require('assert');
41cb0ef41Sopenharmony_ciconst addon = require(`./build/${common.buildType}/6_object_wrap`);
51cb0ef41Sopenharmony_ci
61cb0ef41Sopenharmony_ciconst getterOnlyErrorRE =
71cb0ef41Sopenharmony_ci  /^TypeError: Cannot set property .* of #<.*> which has only a getter$/;
81cb0ef41Sopenharmony_ci
91cb0ef41Sopenharmony_ciconst valueDescriptor = Object.getOwnPropertyDescriptor(
101cb0ef41Sopenharmony_ci  addon.MyObject.prototype, 'value');
111cb0ef41Sopenharmony_ciconst valueReadonlyDescriptor = Object.getOwnPropertyDescriptor(
121cb0ef41Sopenharmony_ci  addon.MyObject.prototype, 'valueReadonly');
131cb0ef41Sopenharmony_ciconst plusOneDescriptor = Object.getOwnPropertyDescriptor(
141cb0ef41Sopenharmony_ci  addon.MyObject.prototype, 'plusOne');
151cb0ef41Sopenharmony_ciassert.strictEqual(typeof valueDescriptor.get, 'function');
161cb0ef41Sopenharmony_ciassert.strictEqual(typeof valueDescriptor.set, 'function');
171cb0ef41Sopenharmony_ciassert.strictEqual(valueDescriptor.value, undefined);
181cb0ef41Sopenharmony_ciassert.strictEqual(valueDescriptor.enumerable, false);
191cb0ef41Sopenharmony_ciassert.strictEqual(valueDescriptor.configurable, false);
201cb0ef41Sopenharmony_ciassert.strictEqual(typeof valueReadonlyDescriptor.get, 'function');
211cb0ef41Sopenharmony_ciassert.strictEqual(valueReadonlyDescriptor.set, undefined);
221cb0ef41Sopenharmony_ciassert.strictEqual(valueReadonlyDescriptor.value, undefined);
231cb0ef41Sopenharmony_ciassert.strictEqual(valueReadonlyDescriptor.enumerable, false);
241cb0ef41Sopenharmony_ciassert.strictEqual(valueReadonlyDescriptor.configurable, false);
251cb0ef41Sopenharmony_ci
261cb0ef41Sopenharmony_ciassert.strictEqual(plusOneDescriptor.get, undefined);
271cb0ef41Sopenharmony_ciassert.strictEqual(plusOneDescriptor.set, undefined);
281cb0ef41Sopenharmony_ciassert.strictEqual(typeof plusOneDescriptor.value, 'function');
291cb0ef41Sopenharmony_ciassert.strictEqual(plusOneDescriptor.enumerable, false);
301cb0ef41Sopenharmony_ciassert.strictEqual(plusOneDescriptor.configurable, false);
311cb0ef41Sopenharmony_ci
321cb0ef41Sopenharmony_ciconst obj = new addon.MyObject(9);
331cb0ef41Sopenharmony_ciassert.strictEqual(obj.value, 9);
341cb0ef41Sopenharmony_ciobj.value = 10;
351cb0ef41Sopenharmony_ciassert.strictEqual(obj.value, 10);
361cb0ef41Sopenharmony_ciassert.strictEqual(obj.valueReadonly, 10);
371cb0ef41Sopenharmony_ciassert.throws(() => { obj.valueReadonly = 14; }, getterOnlyErrorRE);
381cb0ef41Sopenharmony_ciassert.strictEqual(obj.plusOne(), 11);
391cb0ef41Sopenharmony_ciassert.strictEqual(obj.plusOne(), 12);
401cb0ef41Sopenharmony_ciassert.strictEqual(obj.plusOne(), 13);
411cb0ef41Sopenharmony_ci
421cb0ef41Sopenharmony_ciassert.strictEqual(obj.multiply().value, 13);
431cb0ef41Sopenharmony_ciassert.strictEqual(obj.multiply(10).value, 130);
441cb0ef41Sopenharmony_ci
451cb0ef41Sopenharmony_ciconst newobj = obj.multiply(-1);
461cb0ef41Sopenharmony_ciassert.strictEqual(newobj.value, -13);
471cb0ef41Sopenharmony_ciassert.strictEqual(newobj.valueReadonly, -13);
481cb0ef41Sopenharmony_ciassert.notStrictEqual(obj, newobj);
49