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

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

Issue 1379313002: [es6] Implement parts of the Reflect object. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Rebase and use strict 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/objects.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
new file mode 100644
index 0000000000000000000000000000000000000000..d9cd51f649d6d8c8f75b723658ade0f4f304de11
--- /dev/null
+++ b/test/mjsunit/harmony/reflect.js
@@ -0,0 +1,210 @@
+// Copyright 2015 the V8 project authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Flags: --harmony-reflect
+
+// TODO(neis): Test with proxies.
+
+
+
+////////////////////////////////////////////////////////////////////////////////
+// (Auxiliaries)
+
+
+"use strict";
+
+var global = this;
+
+var sym = Symbol("gaga");
+
+var objects = [
+ {},
+ [],
+ function() {},
+ function() {
+ return arguments;
+ }(),
+ function() {
+ 'use strict';
+ return arguments;
+ }(),
+ Object(1),
+ Object(true),
+ Object('bla'),
+ new Date,
+ new RegExp,
+ new Set,
+ new Map,
+ new WeakMap,
+ new WeakSet,
+ new ArrayBuffer(10),
+ new Int32Array(5),
+ Object,
+ Function,
+ Date,
+ RegExp,
+ global
+];
+
+function prepare(tgt) {
+ tgt["bla"] = true;
+ tgt[4] = 42;
+ tgt[sym] = "foo";
+ tgt["noconf"] = 43;
+ Object.defineProperty(tgt, "noconf", {configurable: false});
+}
+
+
+
+////////////////////////////////////////////////////////////////////////////////
+// Reflect.get
+
+
+(function testReflectGetArity() {
+ assertEquals(3, Reflect.get.length);
+})();
+
+
+(function testReflectGetOnNonObject() {
+ assertThrows(function() { Reflect.get(); }, TypeError);
+ assertThrows(function() { Reflect.get(42, "bla"); }, TypeError);
+ assertThrows(function() { Reflect.get(null, "bla"); }, TypeError);
+})();
+
+
+(function testReflectGetKeyConversion() {
+ var tgt = {bla: 42};
+ var a = { [Symbol.toPrimitive]: function() { return "bla" } };
+ var b = { [Symbol.toPrimitive]: function() { throw "gaga" } };
+ assertEquals(42, Reflect.get(tgt, a));
+ assertThrows(function() { Reflect.get(tgt, b); }, "gaga");
+})();
+
+
+(function testReflectGetOnObject() {
+ for (let tgt of objects) {
+ prepare(tgt);
+ assertEquals(true, Reflect.get(tgt, "bla"));
+ assertEquals(42, Reflect.get(tgt, 4));
+ assertEquals(42, Reflect.get(tgt, "4"));
+ assertEquals("foo", Reflect.get(tgt, sym));
+ assertEquals(undefined, Reflect.get(tgt, "doesnotexist"));
+ assertEquals(undefined, Reflect.get(tgt, 666));
+ }
+})();
+
+
+
+////////////////////////////////////////////////////////////////////////////////
+// Reflect.has
+
+
+(function testReflectHasArity() {
+ assertEquals(2, Reflect.has.length);
+})();
+
+
+(function testReflectHasOnNonObject() {
+ assertThrows(function() { Reflect.has(); }, TypeError);
+ assertThrows(function() { Reflect.has(42, "bla"); }, TypeError);
+ assertThrows(function() { Reflect.has(null, "bla"); }, TypeError);
+})();
+
+
+(function testReflectHasKeyConversion() {
+ var tgt = {bla: 42};
+ var a = { [Symbol.toPrimitive]: function() { return "bla" } };
+ var b = { [Symbol.toPrimitive]: function() { throw "gaga" } };
+ assertTrue(Reflect.has(tgt, a));
+ assertThrows(function() { Reflect.has(tgt, b); }, "gaga");
+})();
+
+
+(function testReflectHasOnObject() {
+ for (let tgt of objects) {
+ prepare(tgt);
+ assertTrue(Reflect.has(tgt, "bla"));
+ assertTrue(Reflect.has(tgt, 4));
+ assertTrue(Reflect.has(tgt, "4"));
+ assertTrue(Reflect.has(tgt, sym));
+ assertFalse(Reflect.has(tgt, "doesnotexist"));
+ assertFalse(Reflect.has(tgt, 666));
+ }
+})();
+
+
+
+////////////////////////////////////////////////////////////////////////////////
+// Reflect.deleteProperty
+
+
+(function testReflectDeletePropertyArity() {
+ assertEquals(2, Reflect.deleteProperty.length);
+})();
+
+
+(function testReflectDeletePropertyOnNonObject() {
+ assertThrows(function() { Reflect.deleteProperty(); }, TypeError);
+ assertThrows(function() { Reflect.deleteProperty(42, "bla"); }, TypeError);
+ assertThrows(function() { Reflect.deleteProperty(null, "bla"); }, TypeError);
+})();
+
+
+(function testReflectDeletePropertyKeyConversion() {
+ var tgt = {bla: 42};
+ var a = { [Symbol.toPrimitive]: function() { return "bla" } };
+ var b = { [Symbol.toPrimitive]: function() { throw "gaga" } };
+ assertTrue(Reflect.deleteProperty(tgt, a));
+ assertThrows(function() { Reflect.deleteProperty(tgt, b); }, "gaga");
+})();
+
+
+(function testReflectDeletePropertyOnObject() {
+ for (let tgt of objects) {
+ prepare(tgt);
+ assertTrue(Reflect.deleteProperty(tgt, "bla"));
+ assertEquals(undefined, Object.getOwnPropertyDescriptor(tgt, "bla"));
+ if (tgt instanceof Int32Array) {
+ assertFalse(Reflect.deleteProperty(tgt, 4));
+ } else {
+ assertTrue(Reflect.deleteProperty(tgt, 4));
+ assertEquals(undefined, Object.getOwnPropertyDescriptor(tgt, 4));
+ }
+ assertTrue(Reflect.deleteProperty(tgt, sym));
+ assertEquals(undefined, Object.getOwnPropertyDescriptor(tgt, sym));
+ assertTrue(Reflect.deleteProperty(tgt, "doesnotexist"));
+ assertTrue(Reflect.deleteProperty(tgt, 666));
+ assertFalse(Reflect.deleteProperty(tgt, "noconf"));
+ assertEquals(43, tgt.noconf);
+ }
+})();
+
+
+
+////////////////////////////////////////////////////////////////////////////////
+// Reflect.isExtensible
+
+
+(function testReflectIsExtensibleArity() {
+ assertEquals(1, Reflect.isExtensible.length);
+})();
+
+
+(function testReflectIsExtensibleOnNonObject() {
+ assertThrows(function() { Reflect.isExtensible(); }, TypeError);
+ assertThrows(function() { Reflect.isExtensible(42); }, TypeError);
+ assertThrows(function() { Reflect.isExtensible(null); }, TypeError);
+})();
+
+
+(function testReflectIsExtensibleOnObject() {
+ // This should be the last test as it modifies the objects irreversibly.
+ for (let tgt of objects) {
+ prepare(tgt);
+ if (tgt instanceof Int32Array) continue; // issue v8:4460
+ assertTrue(Reflect.isExtensible(tgt));
+ Object.preventExtensions(tgt);
+ assertFalse(Reflect.isExtensible(tgt));
+ }
+})();
« no previous file with comments | « src/objects.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698