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 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
80 assertThrows(function() { Reflect.get(42, "bla"); }, TypeError); | 80 assertThrows(function() { Reflect.get(42, "bla"); }, TypeError); |
81 assertThrows(function() { Reflect.get(null, "bla"); }, TypeError); | 81 assertThrows(function() { Reflect.get(null, "bla"); }, TypeError); |
82 })(); | 82 })(); |
83 | 83 |
84 | 84 |
85 (function testReflectGetKeyConversion() { | 85 (function testReflectGetKeyConversion() { |
86 var target = {bla: 42}; | 86 var target = {bla: 42}; |
87 var a = { [Symbol.toPrimitive]: function() { return "bla" } }; | 87 var a = { [Symbol.toPrimitive]: function() { return "bla" } }; |
88 var b = { [Symbol.toPrimitive]: function() { throw "gaga" } }; | 88 var b = { [Symbol.toPrimitive]: function() { throw "gaga" } }; |
89 assertEquals(42, Reflect.get(target, a)); | 89 assertEquals(42, Reflect.get(target, a)); |
90 assertThrows(function() { Reflect.get(target, b); }, "gaga"); | 90 assertThrowsEquals(function() { Reflect.get(target, b); }, "gaga"); |
91 })(); | 91 })(); |
92 | 92 |
93 | 93 |
94 (function testReflectGetOnObject() { | 94 (function testReflectGetOnObject() { |
95 var receiver = {bla: false}; | 95 var receiver = {bla: false}; |
96 for (let target of objects) { | 96 for (let target of objects) { |
97 prepare(target); | 97 prepare(target); |
98 assertEquals(true, Reflect.get(target, "bla")); | 98 assertEquals(true, Reflect.get(target, "bla")); |
99 assertEquals(true, Reflect.get(target, "bla", target)); | 99 assertEquals(true, Reflect.get(target, "bla", target)); |
100 assertEquals(true, Reflect.get(target, "bla", receiver)); | 100 assertEquals(true, Reflect.get(target, "bla", receiver)); |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
149 assertThrows(function() { Reflect.set(null, "bla"); }, TypeError); | 149 assertThrows(function() { Reflect.set(null, "bla"); }, TypeError); |
150 })(); | 150 })(); |
151 | 151 |
152 | 152 |
153 (function testReflectSetKeyConversion() { | 153 (function testReflectSetKeyConversion() { |
154 var target = {}; | 154 var target = {}; |
155 var a = { [Symbol.toPrimitive]: function() { return "bla" } }; | 155 var a = { [Symbol.toPrimitive]: function() { return "bla" } }; |
156 var b = { [Symbol.toPrimitive]: function() { throw "gaga" } }; | 156 var b = { [Symbol.toPrimitive]: function() { throw "gaga" } }; |
157 assertTrue(Reflect.set(target, a, 42)); | 157 assertTrue(Reflect.set(target, a, 42)); |
158 assertEquals(42, target.bla); | 158 assertEquals(42, target.bla); |
159 assertThrows(function() { Reflect.set(target, b, 42); }, "gaga"); | 159 assertThrowsEquals(function() { Reflect.set(target, b, 42); }, "gaga"); |
160 })(); | 160 })(); |
161 | 161 |
162 | 162 |
163 (function testReflectSetOnObject() { | 163 (function testReflectSetOnObject() { |
164 var receiver = {bla: false}; | 164 var receiver = {bla: false}; |
165 var value = 34234; | 165 var value = 34234; |
166 for (let target of objects) { | 166 for (let target of objects) { |
167 prepare(target); | 167 prepare(target); |
168 assertTrue(Reflect.set(target, "bla", value)); | 168 assertTrue(Reflect.set(target, "bla", value)); |
169 assertEquals(value, target.bla); | 169 assertEquals(value, target.bla); |
(...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
290 assertThrows(function() { Reflect.has(42, "bla"); }, TypeError); | 290 assertThrows(function() { Reflect.has(42, "bla"); }, TypeError); |
291 assertThrows(function() { Reflect.has(null, "bla"); }, TypeError); | 291 assertThrows(function() { Reflect.has(null, "bla"); }, TypeError); |
292 })(); | 292 })(); |
293 | 293 |
294 | 294 |
295 (function testReflectHasKeyConversion() { | 295 (function testReflectHasKeyConversion() { |
296 var target = {bla: 42}; | 296 var target = {bla: 42}; |
297 var a = { [Symbol.toPrimitive]: function() { return "bla" } }; | 297 var a = { [Symbol.toPrimitive]: function() { return "bla" } }; |
298 var b = { [Symbol.toPrimitive]: function() { throw "gaga" } }; | 298 var b = { [Symbol.toPrimitive]: function() { throw "gaga" } }; |
299 assertTrue(Reflect.has(target, a)); | 299 assertTrue(Reflect.has(target, a)); |
300 assertThrows(function() { Reflect.has(target, b); }, "gaga"); | 300 assertThrowsEquals(function() { Reflect.has(target, b); }, "gaga"); |
301 })(); | 301 })(); |
302 | 302 |
303 | 303 |
304 (function testReflectHasOnObject() { | 304 (function testReflectHasOnObject() { |
305 for (let target of objects) { | 305 for (let target of objects) { |
306 prepare(target); | 306 prepare(target); |
307 assertTrue(Reflect.has(target, "bla")); | 307 assertTrue(Reflect.has(target, "bla")); |
308 assertTrue(Reflect.has(target, 4)); | 308 assertTrue(Reflect.has(target, 4)); |
309 assertTrue(Reflect.has(target, "4")); | 309 assertTrue(Reflect.has(target, "4")); |
310 assertTrue(Reflect.has(target, sym)); | 310 assertTrue(Reflect.has(target, sym)); |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
343 TypeError); | 343 TypeError); |
344 })(); | 344 })(); |
345 | 345 |
346 | 346 |
347 (function testReflectDefinePropertyKeyConversion() { | 347 (function testReflectDefinePropertyKeyConversion() { |
348 var target = {}; | 348 var target = {}; |
349 var a = { [Symbol.toPrimitive]: function() { return "bla" } }; | 349 var a = { [Symbol.toPrimitive]: function() { return "bla" } }; |
350 var b = { [Symbol.toPrimitive]: function() { throw "gaga" } }; | 350 var b = { [Symbol.toPrimitive]: function() { throw "gaga" } }; |
351 assertTrue(Reflect.defineProperty(target, a, {value: 42})); | 351 assertTrue(Reflect.defineProperty(target, a, {value: 42})); |
352 assertEquals(target.bla, 42); | 352 assertEquals(target.bla, 42); |
353 assertThrows(function() { Reflect.defineProperty(target, b); }, "gaga"); | 353 assertThrowsEquals(function() { Reflect.defineProperty(target, b); }, "gaga"); |
354 })(); | 354 })(); |
355 | 355 |
356 | 356 |
357 // See reflect-define-property.js for further tests. | 357 // See reflect-define-property.js for further tests. |
358 | 358 |
359 | 359 |
360 | 360 |
361 //////////////////////////////////////////////////////////////////////////////// | 361 //////////////////////////////////////////////////////////////////////////////// |
362 // Reflect.deleteProperty | 362 // Reflect.deleteProperty |
363 | 363 |
364 | 364 |
365 (function testReflectDeletePropertyArity() { | 365 (function testReflectDeletePropertyArity() { |
366 assertEquals(2, Reflect.deleteProperty.length); | 366 assertEquals(2, Reflect.deleteProperty.length); |
367 })(); | 367 })(); |
368 | 368 |
369 | 369 |
370 (function testReflectDeletePropertyOnNonObject() { | 370 (function testReflectDeletePropertyOnNonObject() { |
371 assertThrows(function() { Reflect.deleteProperty(); }, TypeError); | 371 assertThrows(function() { Reflect.deleteProperty(); }, TypeError); |
372 assertThrows(function() { Reflect.deleteProperty(42, "bla"); }, TypeError); | 372 assertThrows(function() { Reflect.deleteProperty(42, "bla"); }, TypeError); |
373 assertThrows(function() { Reflect.deleteProperty(null, "bla"); }, TypeError); | 373 assertThrows(function() { Reflect.deleteProperty(null, "bla"); }, TypeError); |
374 })(); | 374 })(); |
375 | 375 |
376 | 376 |
377 (function testReflectDeletePropertyKeyConversion() { | 377 (function testReflectDeletePropertyKeyConversion() { |
378 var target = {bla: 42}; | 378 var target = {bla: 42}; |
379 var a = { [Symbol.toPrimitive]: function() { return "bla" } }; | 379 var a = { [Symbol.toPrimitive]: function() { return "bla" } }; |
380 var b = { [Symbol.toPrimitive]: function() { throw "gaga" } }; | 380 var b = { [Symbol.toPrimitive]: function() { throw "gaga" } }; |
381 assertTrue(Reflect.deleteProperty(target, a)); | 381 assertTrue(Reflect.deleteProperty(target, a)); |
382 assertThrows(function() { Reflect.deleteProperty(target, b); }, "gaga"); | 382 assertThrowsEquals(function() { Reflect.deleteProperty(target, b); }, "gaga"); |
383 })(); | 383 })(); |
384 | 384 |
385 | 385 |
386 (function testReflectDeletePropertyOnObject() { | 386 (function testReflectDeletePropertyOnObject() { |
387 for (let target of objects) { | 387 for (let target of objects) { |
388 prepare(target); | 388 prepare(target); |
389 assertTrue(Reflect.deleteProperty(target, "bla")); | 389 assertTrue(Reflect.deleteProperty(target, "bla")); |
390 assertEquals(undefined, Object.getOwnPropertyDescriptor(target, "bla")); | 390 assertEquals(undefined, Object.getOwnPropertyDescriptor(target, "bla")); |
391 if (target instanceof Int32Array) { | 391 if (target instanceof Int32Array) { |
392 assertFalse(Reflect.deleteProperty(target, 4)); | 392 assertFalse(Reflect.deleteProperty(target, 4)); |
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
523 assertThrows(function() { Reflect.getOwnPropertyDescriptor(null); }, | 523 assertThrows(function() { Reflect.getOwnPropertyDescriptor(null); }, |
524 TypeError); | 524 TypeError); |
525 })(); | 525 })(); |
526 | 526 |
527 | 527 |
528 (function testReflectGetOwnPropertyDescriptorKeyConversion() { | 528 (function testReflectGetOwnPropertyDescriptorKeyConversion() { |
529 var target = {bla: 42}; | 529 var target = {bla: 42}; |
530 var a = { [Symbol.toPrimitive]: function() { return "bla" } }; | 530 var a = { [Symbol.toPrimitive]: function() { return "bla" } }; |
531 var b = { [Symbol.toPrimitive]: function() { throw "gaga" } }; | 531 var b = { [Symbol.toPrimitive]: function() { throw "gaga" } }; |
532 assertEquals(42, Reflect.getOwnPropertyDescriptor(target, a).value); | 532 assertEquals(42, Reflect.getOwnPropertyDescriptor(target, a).value); |
533 assertThrows(function() { Reflect.getOwnPropertyDescriptor(target, b); }, | 533 assertThrowsEquals(() => Reflect.getOwnPropertyDescriptor(target, b), "gaga"); |
534 "gaga"); | |
535 })(); | 534 })(); |
536 | 535 |
537 | 536 |
538 // See reflect-get-own-property-descriptor.js for further tests. | 537 // See reflect-get-own-property-descriptor.js for further tests. |
539 | 538 |
540 | 539 |
541 | 540 |
542 //////////////////////////////////////////////////////////////////////////////// | 541 //////////////////////////////////////////////////////////////////////////////// |
543 // Reflect.ownKeys | 542 // Reflect.ownKeys |
544 | 543 |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
585 assertThrows(function() { Reflect.preventExtensions(); }, TypeError); | 584 assertThrows(function() { Reflect.preventExtensions(); }, TypeError); |
586 assertThrows(function() { Reflect.preventExtensions(42); }, TypeError); | 585 assertThrows(function() { Reflect.preventExtensions(42); }, TypeError); |
587 assertThrows(function() { Reflect.preventExtensions(null); }, TypeError); | 586 assertThrows(function() { Reflect.preventExtensions(null); }, TypeError); |
588 })(); | 587 })(); |
589 | 588 |
590 | 589 |
591 // See reflect-prevent-extensions.js for further tests. | 590 // See reflect-prevent-extensions.js for further tests. |
592 | 591 |
593 // TODO(neis): Need proxies to test the situation where | 592 // TODO(neis): Need proxies to test the situation where |
594 // [[preventExtensions]] returns false. | 593 // [[preventExtensions]] returns false. |
OLD | NEW |