Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1327)

Unified Diff: test/mjsunit/harmony/reflect.js

Issue 1415883007: [es6] Partially implement Reflect.set. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 5 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/builtins.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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
« no previous file with comments | « src/builtins.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698