| 15 | }; |
| 16 | |
| 17 | const testAccessor = (obj, clazz) => { |
| 18 | // read-only, write-only |
| 19 | { |
| 20 | obj.testSetter = 'instance getter'; |
| 21 | assert.strictEqual(obj.testGetter, 'instance getter'); |
| 22 | assert.strictEqual(obj.testGetterT, 'instance getter'); |
| 23 | |
| 24 | obj.testSetter = 'instance getter 2'; |
| 25 | assert.strictEqual(obj.testGetter, 'instance getter 2'); |
| 26 | assert.strictEqual(obj.testGetterT, 'instance getter 2'); |
| 27 | |
| 28 | assert.throws(() => clazz.prototype.testGetter, /Invalid argument/); |
| 29 | assert.throws(() => clazz.prototype.testGetterT, /Invalid argument/); |
| 30 | } |
| 31 | |
| 32 | // read write-only |
| 33 | { |
| 34 | let error; |
| 35 | // eslint-disable-next-line no-unused-vars |
| 36 | try { const read = obj.testSetter; } catch (e) { error = e; } |
| 37 | // no error |
| 38 | assert.strictEqual(error, undefined); |
| 39 | |
| 40 | // read is undefined |
| 41 | assert.strictEqual(obj.testSetter, undefined); |
| 42 | } |
| 43 | |
| 44 | // write read-only |
| 45 | { |
| 46 | let error; |
| 47 | try { obj.testGetter = 'write'; } catch (e) { error = e; } |
| 48 | assert.strictEqual(error.name, 'TypeError'); |
| 49 | |
| 50 | try { obj.testGetterT = 'write'; } catch (e) { error = e; } |
| 51 | assert.strictEqual(error.name, 'TypeError'); |
| 52 | } |
| 53 | |
| 54 | // rw |
| 55 | { |
| 56 | obj.testGetSet = 'instance getset'; |
| 57 | assert.strictEqual(obj.testGetSet, 'instance getset'); |
| 58 | |
| 59 | obj.testGetSet = 'instance getset 2'; |
| 60 | assert.strictEqual(obj.testGetSet, 'instance getset 2'); |
| 61 | |
| 62 | obj.testGetSetT = 'instance getset 3'; |
| 63 | assert.strictEqual(obj.testGetSetT, 'instance getset 3'); |
| 64 | |
| 65 | obj.testGetSetT = 'instance getset 4'; |
| 66 | assert.strictEqual(obj.testGetSetT, 'instance getset 4'); |
| 67 | |
| 68 | assert.throws(() => { clazz.prototype.testGetSet = 'instance getset'; }, /Invalid argument/); |
| 69 | assert.throws(() => { clazz.prototype.testGetSetT = 'instance getset'; }, /Invalid argument/); |
| 70 | } |
| 71 | |
| 72 | // rw symbol |
| 73 | { |
| 74 | obj[clazz.kTestAccessorInternal] = 'instance internal getset'; |