getter-primitive-value.js (2974B)
1 function testNativeGetter() { 2 function test() { 3 var xs = [Symbol("a"), Symbol("b")]; 4 var ys = ["a", "b"]; 5 6 for (var i = 0; i < 100; ++i) { 7 var r = xs[i & 1].description; 8 assertEq(r, ys[i & 1]); 9 } 10 } 11 for (var i = 0; i < 2; ++i) test(); 12 } 13 testNativeGetter(); 14 15 function testScriptedGetter() { 16 Object.defineProperty(Symbol.prototype, "desc", { 17 get() { 18 "use strict"; 19 assertEq(typeof this, "symbol"); 20 return this.description; 21 } 22 }); 23 24 function test() { 25 var xs = [Symbol("a"), Symbol("b")]; 26 var ys = ["a", "b"]; 27 28 for (var i = 0; i < 100; ++i) { 29 var r = xs[i & 1].desc; 30 assertEq(r, ys[i & 1]); 31 } 32 } 33 for (var i = 0; i < 2; ++i) test(); 34 } 35 testScriptedGetter(); 36 37 function testScriptedGetterNonStrict() { 38 Object.defineProperty(Symbol.prototype, "desc_nonstrict", { 39 get() { 40 assertEq(typeof this, "object"); 41 return this.description; 42 } 43 }); 44 45 function test() { 46 var xs = [Symbol("a"), Symbol("b")]; 47 var ys = ["a", "b"]; 48 49 for (var i = 0; i < 100; ++i) { 50 var r = xs[i & 1].desc_nonstrict; 51 assertEq(r, ys[i & 1]); 52 } 53 } 54 for (var i = 0; i < 2; ++i) test(); 55 } 56 testScriptedGetterNonStrict(); 57 58 function testNativeGetterPrototype() { 59 Object.defineProperty(Object.prototype, "description_proto", 60 Object.getOwnPropertyDescriptor(Symbol.prototype, "description")); 61 62 function test() { 63 var xs = [Symbol("a"), Symbol("b")]; 64 var ys = ["a", "b"]; 65 66 for (var i = 0; i < 100; ++i) { 67 var r = xs[i & 1].description_proto; 68 assertEq(r, ys[i & 1]); 69 } 70 } 71 for (var i = 0; i < 2; ++i) test(); 72 } 73 testNativeGetterPrototype(); 74 75 function testScriptedGetterPrototype() { 76 Object.defineProperty(Object.prototype, "desc_proto", { 77 get() { 78 "use strict"; 79 assertEq(typeof this, "symbol"); 80 return this.description; 81 } 82 }); 83 84 function test() { 85 var xs = [Symbol("a"), Symbol("b")]; 86 var ys = ["a", "b"]; 87 88 for (var i = 0; i < 100; ++i) { 89 var r = xs[i & 1].desc_proto; 90 assertEq(r, ys[i & 1]); 91 } 92 } 93 for (var i = 0; i < 2; ++i) test(); 94 } 95 testScriptedGetterPrototype(); 96 97 function testScriptedGetterNonStrictPrototype() { 98 Object.defineProperty(Object.prototype, "desc_nonstrict_proto", { 99 get() { 100 assertEq(typeof this, "object"); 101 return this.description; 102 } 103 }); 104 105 function test() { 106 var xs = [Symbol("a"), Symbol("b")]; 107 var ys = ["a", "b"]; 108 109 for (var i = 0; i < 100; ++i) { 110 var r = xs[i & 1].desc_nonstrict_proto; 111 assertEq(r, ys[i & 1]); 112 } 113 } 114 for (var i = 0; i < 2; ++i) test(); 115 } 116 testScriptedGetterNonStrictPrototype();