MIRROR: javascript for 馃悳's, a tiny runtime with big ambitions
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at master 134 lines 2.3 kB view raw
1import { test, summary } from './helpers.js'; 2 3console.log('Getter/Setter Tests\n'); 4 5let obj1 = { 6 get value() { 7 return 42; 8 } 9}; 10test('basic getter', obj1.value, 42); 11 12let obj2 = { 13 _count: 0, 14 get count() { 15 return this._count; 16 }, 17 set count(val) { 18 this._count = val; 19 } 20}; 21test('getter initial value', obj2.count, 0); 22obj2.count = 10; 23test('setter updates value', obj2.count, 10); 24 25let obj3 = { 26 firstName: 'John', 27 lastName: 'Doe', 28 get fullName() { 29 return this.firstName + ' ' + this.lastName; 30 } 31}; 32test('computed getter', obj3.fullName, 'John Doe'); 33 34let obj4 = { 35 get 'special-key'() { 36 return 'special'; 37 } 38}; 39test('string key getter', obj4['special-key'], 'special'); 40 41let obj5 = { 42 get 0() { 43 return 'zero'; 44 } 45}; 46test('number key getter', obj5[0], 'zero'); 47 48let obj6 = { 49 _x: 0, 50 _y: 0, 51 get x() { 52 return this._x; 53 }, 54 set x(v) { 55 this._x = v; 56 }, 57 get y() { 58 return this._y; 59 }, 60 set y(v) { 61 this._y = v; 62 } 63}; 64obj6.x = 5; 65obj6.y = 10; 66test('multiple getters x', obj6.x, 5); 67test('multiple getters y', obj6.y, 10); 68 69let obj7 = { 70 get data() { 71 return { a: 1, b: 2 }; 72 } 73}; 74test('getter returns object', obj7.data.a, 1); 75 76let obj8 = { 77 _age: 0, 78 get age() { 79 return this._age; 80 }, 81 set age(val) { 82 if (val < 0) val = 0; 83 this._age = val; 84 } 85}; 86obj8.age = -5; 87test('setter validation', obj8.age, 0); 88obj8.age = 25; 89test('setter valid value', obj8.age, 25); 90 91let obj9 = { 92 get readonly() { 93 return 'constant'; 94 } 95}; 96test('getter-only read', obj9.readonly, 'constant'); 97obj9.readonly = 'changed'; 98test('getter-only unchanged', obj9.readonly, 'constant'); 99 100let strictError = (function () { 101 'use strict'; 102 try { 103 let strictObj = { 104 get x() { 105 return 1; 106 } 107 }; 108 strictObj.x = 2; 109 return false; 110 } catch (e) { 111 return e instanceof TypeError; 112 } 113})(); 114test('strict mode getter-only throws', strictError, true); 115 116let obj10 = { 117 multiplier: 3, 118 _value: 7, 119 get computed() { 120 return this._value * this.multiplier; 121 } 122}; 123test('getter with this', obj10.computed, 21); 124 125let sideEffect = 0; 126let obj11 = { 127 set trigger(val) { 128 sideEffect = val * 2; 129 } 130}; 131obj11.trigger = 5; 132test('setter side effect', sideEffect, 10); 133 134summary();