OLD | NEW |
1 // Copyright 2015 the V8 project authors. All rights reserved. | 1 // Copyright 2015 the V8 project authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 // Flags: --harmony-reflect | 5 // Flags: --harmony-reflect |
6 | 6 |
7 // TODO(neis): Test with proxies. | 7 // TODO(neis): Test with proxies. |
8 | 8 |
9 | 9 |
10 | 10 |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
46 RegExp, | 46 RegExp, |
47 global | 47 global |
48 ]; | 48 ]; |
49 | 49 |
50 function prepare(tgt) { | 50 function prepare(tgt) { |
51 tgt["bla"] = true; | 51 tgt["bla"] = true; |
52 tgt[4] = 42; | 52 tgt[4] = 42; |
53 tgt[sym] = "foo"; | 53 tgt[sym] = "foo"; |
54 tgt["noconf"] = 43; | 54 tgt["noconf"] = 43; |
55 Object.defineProperty(tgt, "noconf", {configurable: false}); | 55 Object.defineProperty(tgt, "noconf", {configurable: false}); |
| 56 Object.defineProperty(tgt, "getter", |
| 57 { get: function () {return this.bla}, configurable: true }); |
| 58 Object.defineProperty(tgt, "setter", |
| 59 { set: function () {}, configurable: true }); |
56 } | 60 } |
57 | 61 |
58 | 62 |
59 | 63 |
60 //////////////////////////////////////////////////////////////////////////////// | 64 //////////////////////////////////////////////////////////////////////////////// |
61 // Reflect.get | 65 // Reflect.get |
62 | 66 |
63 | 67 |
64 (function testReflectGetArity() { | 68 (function testReflectGetArity() { |
65 assertEquals(3, Reflect.get.length); | 69 assertEquals(3, Reflect.get.length); |
(...skipping 10 matching lines...) Expand all Loading... |
76 (function testReflectGetKeyConversion() { | 80 (function testReflectGetKeyConversion() { |
77 var tgt = {bla: 42}; | 81 var tgt = {bla: 42}; |
78 var a = { [Symbol.toPrimitive]: function() { return "bla" } }; | 82 var a = { [Symbol.toPrimitive]: function() { return "bla" } }; |
79 var b = { [Symbol.toPrimitive]: function() { throw "gaga" } }; | 83 var b = { [Symbol.toPrimitive]: function() { throw "gaga" } }; |
80 assertEquals(42, Reflect.get(tgt, a)); | 84 assertEquals(42, Reflect.get(tgt, a)); |
81 assertThrows(function() { Reflect.get(tgt, b); }, "gaga"); | 85 assertThrows(function() { Reflect.get(tgt, b); }, "gaga"); |
82 })(); | 86 })(); |
83 | 87 |
84 | 88 |
85 (function testReflectGetOnObject() { | 89 (function testReflectGetOnObject() { |
| 90 var receiver = {bla: false}; |
86 for (let tgt of objects) { | 91 for (let tgt of objects) { |
87 prepare(tgt); | 92 prepare(tgt); |
88 assertEquals(true, Reflect.get(tgt, "bla")); | 93 assertEquals(true, Reflect.get(tgt, "bla")); |
| 94 assertEquals(true, Reflect.get(tgt, "bla", tgt)); |
| 95 assertEquals(true, Reflect.get(tgt, "bla", receiver)); |
89 assertEquals(42, Reflect.get(tgt, 4)); | 96 assertEquals(42, Reflect.get(tgt, 4)); |
| 97 assertEquals(42, Reflect.get(tgt, 4, tgt)); |
| 98 assertEquals(42, Reflect.get(tgt, 4, receiver)); |
90 assertEquals(42, Reflect.get(tgt, "4")); | 99 assertEquals(42, Reflect.get(tgt, "4")); |
| 100 assertEquals(42, Reflect.get(tgt, "4", tgt)); |
| 101 assertEquals(42, Reflect.get(tgt, "4", receiver)); |
91 assertEquals("foo", Reflect.get(tgt, sym)); | 102 assertEquals("foo", Reflect.get(tgt, sym)); |
92 assertEquals(undefined, Reflect.get(tgt, "doesnotexist")); | 103 assertEquals("foo", Reflect.get(tgt, sym, tgt)); |
| 104 assertEquals("foo", Reflect.get(tgt, sym, receiver)); |
| 105 assertEquals(43, Reflect.get(tgt, "noconf")); |
| 106 assertEquals(43, Reflect.get(tgt, "noconf", tgt)); |
| 107 assertEquals(43, Reflect.get(tgt, "noconf", receiver)); |
| 108 assertEquals(true, Reflect.get(tgt, "getter")); |
| 109 assertEquals(true, Reflect.get(tgt, "getter", tgt)); |
| 110 assertEquals(false, Reflect.get(tgt, "getter", receiver)); |
| 111 assertEquals(undefined, Reflect.get(tgt, "setter")); |
| 112 assertEquals(undefined, Reflect.get(tgt, "setter", tgt)); |
| 113 assertEquals(undefined, Reflect.get(tgt, "setter", receiver)); |
| 114 assertEquals(undefined, Reflect.get(tgt, "foo")); |
| 115 assertEquals(undefined, Reflect.get(tgt, "foo", tgt)); |
| 116 assertEquals(undefined, Reflect.get(tgt, "foo", receiver)); |
93 assertEquals(undefined, Reflect.get(tgt, 666)); | 117 assertEquals(undefined, Reflect.get(tgt, 666)); |
| 118 assertEquals(undefined, Reflect.get(tgt, 666, tgt)); |
| 119 assertEquals(undefined, Reflect.get(tgt, 666, receiver)); |
| 120 |
| 121 let proto = tgt.__proto__; |
| 122 tgt.__proto__ = { get foo() {return this.bla} }; |
| 123 assertEquals(true, Reflect.get(tgt, "foo")); |
| 124 assertEquals(true, Reflect.get(tgt, "foo", tgt)); |
| 125 assertEquals(false, Reflect.get(tgt, "foo", receiver)); |
| 126 tgt.__proto__ = proto; |
94 } | 127 } |
95 })(); | 128 })(); |
96 | 129 |
97 | 130 |
98 | 131 |
99 //////////////////////////////////////////////////////////////////////////////// | 132 //////////////////////////////////////////////////////////////////////////////// |
100 // Reflect.has | 133 // Reflect.has |
101 | 134 |
102 | 135 |
103 (function testReflectHasArity() { | 136 (function testReflectHasArity() { |
(...skipping 17 matching lines...) Expand all Loading... |
121 })(); | 154 })(); |
122 | 155 |
123 | 156 |
124 (function testReflectHasOnObject() { | 157 (function testReflectHasOnObject() { |
125 for (let tgt of objects) { | 158 for (let tgt of objects) { |
126 prepare(tgt); | 159 prepare(tgt); |
127 assertTrue(Reflect.has(tgt, "bla")); | 160 assertTrue(Reflect.has(tgt, "bla")); |
128 assertTrue(Reflect.has(tgt, 4)); | 161 assertTrue(Reflect.has(tgt, 4)); |
129 assertTrue(Reflect.has(tgt, "4")); | 162 assertTrue(Reflect.has(tgt, "4")); |
130 assertTrue(Reflect.has(tgt, sym)); | 163 assertTrue(Reflect.has(tgt, sym)); |
131 assertFalse(Reflect.has(tgt, "doesnotexist")); | 164 assertTrue(Reflect.has(tgt, "noconf")); |
| 165 assertTrue(Reflect.has(tgt, "getter")); |
| 166 assertTrue(Reflect.has(tgt, "setter")); |
| 167 assertFalse(Reflect.has(tgt, "foo")); |
132 assertFalse(Reflect.has(tgt, 666)); | 168 assertFalse(Reflect.has(tgt, 666)); |
| 169 |
| 170 let proto = tgt.__proto__; |
| 171 tgt.__proto__ = { get foo() {return this.bla} }; |
| 172 assertEquals(true, Reflect.has(tgt, "foo")); |
| 173 tgt.__proto__ = proto; |
133 } | 174 } |
134 })(); | 175 })(); |
135 | 176 |
136 | 177 |
137 | 178 |
138 //////////////////////////////////////////////////////////////////////////////// | 179 //////////////////////////////////////////////////////////////////////////////// |
139 // Reflect.deleteProperty | 180 // Reflect.deleteProperty |
140 | 181 |
141 | 182 |
142 (function testReflectDeletePropertyArity() { | 183 (function testReflectDeletePropertyArity() { |
(...skipping 23 matching lines...) Expand all Loading... |
166 assertTrue(Reflect.deleteProperty(tgt, "bla")); | 207 assertTrue(Reflect.deleteProperty(tgt, "bla")); |
167 assertEquals(undefined, Object.getOwnPropertyDescriptor(tgt, "bla")); | 208 assertEquals(undefined, Object.getOwnPropertyDescriptor(tgt, "bla")); |
168 if (tgt instanceof Int32Array) { | 209 if (tgt instanceof Int32Array) { |
169 assertFalse(Reflect.deleteProperty(tgt, 4)); | 210 assertFalse(Reflect.deleteProperty(tgt, 4)); |
170 } else { | 211 } else { |
171 assertTrue(Reflect.deleteProperty(tgt, 4)); | 212 assertTrue(Reflect.deleteProperty(tgt, 4)); |
172 assertEquals(undefined, Object.getOwnPropertyDescriptor(tgt, 4)); | 213 assertEquals(undefined, Object.getOwnPropertyDescriptor(tgt, 4)); |
173 } | 214 } |
174 assertTrue(Reflect.deleteProperty(tgt, sym)); | 215 assertTrue(Reflect.deleteProperty(tgt, sym)); |
175 assertEquals(undefined, Object.getOwnPropertyDescriptor(tgt, sym)); | 216 assertEquals(undefined, Object.getOwnPropertyDescriptor(tgt, sym)); |
176 assertTrue(Reflect.deleteProperty(tgt, "doesnotexist")); | |
177 assertTrue(Reflect.deleteProperty(tgt, 666)); | |
178 assertFalse(Reflect.deleteProperty(tgt, "noconf")); | 217 assertFalse(Reflect.deleteProperty(tgt, "noconf")); |
179 assertEquals(43, tgt.noconf); | 218 assertEquals(43, tgt.noconf); |
| 219 assertTrue(Reflect.deleteProperty(tgt, "getter")); |
| 220 assertTrue(Reflect.deleteProperty(tgt, "setter")); |
| 221 assertTrue(Reflect.deleteProperty(tgt, "foo")); |
| 222 assertTrue(Reflect.deleteProperty(tgt, 666)); |
| 223 |
| 224 let proto = tgt.__proto__; |
| 225 tgt.__proto__ = { get foo() {return this.bla} }; |
| 226 assertEquals(true, Reflect.deleteProperty(tgt, "foo")); |
| 227 tgt.__proto__ = proto; |
180 } | 228 } |
181 })(); | 229 })(); |
182 | 230 |
183 | 231 |
184 | 232 |
185 //////////////////////////////////////////////////////////////////////////////// | 233 //////////////////////////////////////////////////////////////////////////////// |
186 // Reflect.isExtensible | 234 // Reflect.isExtensible |
187 | 235 |
188 | 236 |
189 (function testReflectIsExtensibleArity() { | 237 (function testReflectIsExtensibleArity() { |
(...skipping 11 matching lines...) Expand all Loading... |
201 (function testReflectIsExtensibleOnObject() { | 249 (function testReflectIsExtensibleOnObject() { |
202 // This should be the last test as it modifies the objects irreversibly. | 250 // This should be the last test as it modifies the objects irreversibly. |
203 for (let tgt of objects) { | 251 for (let tgt of objects) { |
204 prepare(tgt); | 252 prepare(tgt); |
205 if (tgt instanceof Int32Array) continue; // issue v8:4460 | 253 if (tgt instanceof Int32Array) continue; // issue v8:4460 |
206 assertTrue(Reflect.isExtensible(tgt)); | 254 assertTrue(Reflect.isExtensible(tgt)); |
207 Object.preventExtensions(tgt); | 255 Object.preventExtensions(tgt); |
208 assertFalse(Reflect.isExtensible(tgt)); | 256 assertFalse(Reflect.isExtensible(tgt)); |
209 } | 257 } |
210 })(); | 258 })(); |
OLD | NEW |