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