Chromium Code Reviews| Index: test/mjsunit/harmony/reflect.js |
| diff --git a/test/mjsunit/harmony/reflect.js b/test/mjsunit/harmony/reflect.js |
| index 73d0115db916f3d7041ae3333d7dc9f059e09220..9f12e9ab483b1de1ef2569935a49f51ec5da1e5f 100644 |
| --- a/test/mjsunit/harmony/reflect.js |
| +++ b/test/mjsunit/harmony/reflect.js |
| @@ -52,11 +52,15 @@ function prepare(tgt) { |
| tgt[4] = 42; |
| tgt[sym] = "foo"; |
| tgt["noconf"] = 43; |
| + |
| Object.defineProperty(tgt, "noconf", {configurable: false}); |
| + Object.defineProperty(tgt, "nowrite", {writable: false, value: 44}); |
| Object.defineProperty(tgt, "getter", |
| { get: function () {return this.bla}, configurable: true }); |
| Object.defineProperty(tgt, "setter", |
| - { set: function () {}, configurable: true }); |
| + { set: function (x) {this.gaga = x}, configurable: true }); |
| + Object.defineProperty(tgt, "setter2", |
| + { set: function (x) {}, configurable: true}); |
| } |
| @@ -130,6 +134,136 @@ function prepare(tgt) { |
| //////////////////////////////////////////////////////////////////////////////// |
| +// Reflect.set |
| + |
| + |
| +(function testReflectSetArity() { |
| + assertEquals(3, Reflect.set.length); |
| +})(); |
| + |
| + |
| +(function testReflectSetOnNonObject() { |
| + assertThrows(function() { Reflect.set(); }, TypeError); |
| + assertThrows(function() { Reflect.set(42, "bla"); }, TypeError); |
| + assertThrows(function() { Reflect.set(null, "bla"); }, TypeError); |
| +})(); |
| + |
| + |
| +(function testReflectSetKeyConversion() { |
| + var tgt = {}; |
| + var a = { [Symbol.toPrimitive]: function() { return "bla" } }; |
| + var b = { [Symbol.toPrimitive]: function() { throw "gaga" } }; |
| + assertTrue(Reflect.set(tgt, a, 42)); |
| + assertEquals(42, tgt.bla); |
| + assertThrows(function() { Reflect.set(tgt, b, 42); }, "gaga"); |
| +})(); |
| + |
| + |
| +(function testReflectSetOnObject() { |
| + var receiver = {bla: false}; |
| + var value = 34234; |
| + for (let tgt of objects) { |
| + prepare(tgt); |
| + assertTrue(Reflect.set(tgt, "bla", value)); |
| + assertEquals(value, tgt.bla); |
| + |
| + prepare(tgt); |
| + assertTrue(Reflect.set(tgt, "bla", value, tgt)); |
| + assertEquals(value, tgt.bla); |
| + |
| + prepare(tgt); |
| + assertTrue(Reflect.set(tgt, "bla", value, receiver)); |
| + assertEquals(true, tgt.bla); |
| + assertEquals(value, receiver.bla); |
| + receiver.bla = false; |
| + |
| + prepare(tgt); |
| + assertTrue(Reflect.set(tgt, 4, value)); |
| + assertEquals(value, tgt[4]); |
| + |
| + prepare(tgt); |
| + assertTrue(Reflect.set(tgt, 4, value, tgt)); |
| + assertEquals(value, tgt[4]); |
| + |
| + prepare(tgt); |
| + assertTrue(Reflect.set(tgt, 4, value, receiver)); |
| + assertEquals(42, tgt[4]); |
| + assertEquals(value, receiver[4]); |
| + delete receiver[4]; |
| + |
| + prepare(tgt); |
| + assertTrue(Reflect.set(tgt, sym, value)); |
| + assertEquals(value, tgt[sym]); |
| + |
| + prepare(tgt); |
| + assertTrue(Reflect.set(tgt, sym, value, tgt)); |
| + assertEquals(value, tgt[sym]); |
| + |
| + prepare(tgt); |
| + assertTrue(Reflect.set(tgt, sym, value, receiver)); |
| + assertEquals("foo", tgt[sym]); |
| + assertEquals(value, receiver[sym]); |
| + delete receiver[sym]; |
| + |
| + prepare(tgt); |
| + assertTrue(Reflect.set(tgt, "noconf", value)); |
| + assertEquals(value, tgt.noconf); |
| + |
| + prepare(tgt); |
| + assertTrue(Reflect.set(tgt, "noconf", value, tgt)); |
| + assertEquals(value, tgt.noconf); |
| + |
| + prepare(tgt); |
| + assertTrue(Reflect.set(tgt, "noconf", value, receiver)); |
| + assertEquals(43, tgt.noconf); |
| + assertEquals(value, receiver.noconf); |
| + delete receiver.noconf; |
| + |
| + assertTrue(Reflect.set(tgt, "setter", value)); |
| + assertEquals(value, tgt.gaga) |
| + delete tgt.gaga; |
| + |
| + assertTrue(Reflect.set(tgt, "setter", value, tgt)); |
| + assertEquals(value, tgt.gaga) |
| + delete tgt.gaga; |
| + |
| + assertTrue(Reflect.set(tgt, "setter", value, receiver)); |
| + assertFalse("gaga" in tgt); |
| + assertEquals(value, receiver.gaga); |
| + delete receiver.gaga; |
| + |
| + assertFalse(Reflect.set(tgt, "nowrite", value)); |
| + assertEquals(44, tgt.nowrite); |
| + |
| + assertFalse(Reflect.set(tgt, "nowrite", value, tgt)); |
| + assertEquals(44, tgt.nowrite); |
| + |
| + assertFalse(Reflect.set(tgt, "nowrite", value, receiver)); |
| + assertEquals(44, tgt.nowrite); |
| + assertFalse("nowrite" in receiver); |
| + |
| + assertFalse(Reflect.set({}, "nowrite", value, tgt)); |
| + |
| + // Data vs Accessor |
| + // TODO(neis): This must return false but currently doesn't. |
| + // assertFalse(Reflect.set(tgt, "bla", value, {set bla(x) {}})); |
| + |
| + // Accessor vs Data |
| + assertTrue(Reflect.set({set bla(x) {}}), "bla", value, tgt); |
| + |
| + // Data vs Non-Object |
| + // TODO(neis): These must return false but currently don't. |
| + // assertFalse(Reflect.set({}, "bla", null)); |
|
rossberg
2015/10/29 16:38:24
Something is missing here...
|
| + // assertFalse(Reflect.set({bla: 42}, "bla", null)); |
| + |
| + // Accessor vs Non-Object |
| + assertTrue(Reflect.set(tgt, "setter2", value, null)); |
| + } |
| +})(); |
| + |
| + |
| + |
| +//////////////////////////////////////////////////////////////////////////////// |
| // Reflect.has |