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

Unified Diff: test/mjsunit/harmony/proxies-json.js

Issue 1815773002: Remove runtime flags for Proxy and Reflect (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Rebased Created 4 years, 9 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 | « test/mjsunit/harmony/proxies-is-extensible.js ('k') | test/mjsunit/harmony/proxies-keys.js » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: test/mjsunit/harmony/proxies-json.js
diff --git a/test/mjsunit/harmony/proxies-json.js b/test/mjsunit/harmony/proxies-json.js
deleted file mode 100644
index 6eb0ce90524a814391615087c552295fbc00e207..0000000000000000000000000000000000000000
--- a/test/mjsunit/harmony/proxies-json.js
+++ /dev/null
@@ -1,507 +0,0 @@
-// Copyright 2012 the V8 project authors. All rights reserved.
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following
-// disclaimer in the documentation and/or other materials provided
-// with the distribution.
-// * Neither the name of Google Inc. nor the names of its
-// contributors may be used to endorse or promote products derived
-// from this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-// Flags: --harmony-proxies --harmony-reflect
-
-
-
-///////////////////////////////////////////////////////////////////////////////
-// JSON.stringify
-
-
-function testStringify(expected, object) {
- // Test fast case that bails out to slow case.
- assertEquals(expected, JSON.stringify(object));
- // Test slow case.
- assertEquals(expected, JSON.stringify(object, undefined, 0));
-}
-
-
-// Test serializing a proxy, a function proxy, and objects that contain them.
-
-var handler1 = {
- get: function(target, name) {
- return name.toUpperCase();
- },
- ownKeys: function() {
- return ['a', 'b', 'c'];
- },
- getOwnPropertyDescriptor: function() {
- return { enumerable: true, configurable: true };
- }
-}
-
-var proxy1 = new Proxy({}, handler1);
-testStringify('{"a":"A","b":"B","c":"C"}', proxy1);
-
-var proxy_fun = new Proxy(() => {}, handler1);
-assertTrue(typeof(proxy_fun) === 'function');
-testStringify(undefined, proxy_fun);
-testStringify('[1,null]', [1, proxy_fun]);
-
-handler1.apply = function() { return 666; };
-testStringify(undefined, proxy_fun);
-testStringify('[1,null]', [1, proxy_fun]);
-
-var parent1a = { b: proxy1 };
-testStringify('{"b":{"a":"A","b":"B","c":"C"}}', parent1a);
-
-var parent1b = { a: 123, b: proxy1, c: true };
-testStringify('{"a":123,"b":{"a":"A","b":"B","c":"C"},"c":true}', parent1b);
-
-var parent1c = [123, proxy1, true];
-testStringify('[123,{"a":"A","b":"B","c":"C"},true]', parent1c);
-
-
-// Proxy with side effect.
-
-var handler2 = {
- get: function(target, name) {
- delete parent2.c;
- return name.toUpperCase();
- },
- ownKeys: function() {
- return ['a', 'b', 'c'];
- },
- getOwnPropertyDescriptor: function() {
- return { enumerable: true, configurable: true };
- }
-}
-
-var proxy2 = new Proxy({}, handler2);
-var parent2 = { a: "delete", b: proxy2, c: "remove" };
-var expected2 = '{"a":"delete","b":{"a":"A","b":"B","c":"C"}}';
-assertEquals(expected2, JSON.stringify(parent2));
-parent2.c = "remove"; // Revert side effect.
-assertEquals(expected2, JSON.stringify(parent2, undefined, 0));
-
-
-// Proxy with a get function that uses the receiver argument.
-
-var handler3 = {
- get: function(target, name, receiver) {
- if (name == 'valueOf' || name === Symbol.toPrimitive) {
- return function() { return "proxy" };
- };
- if (typeof name !== 'symbol') return name + "(" + receiver + ")";
- },
- ownKeys: function() {
- return ['a', 'b', 'c'];
- },
- getOwnPropertyDescriptor: function() {
- return { enumerable: true, configurable: true };
- }
-}
-
-var proxy3 = new Proxy({}, handler3);
-var parent3 = { x: 123, y: proxy3 }
-testStringify('{"x":123,"y":{"a":"a(proxy)","b":"b(proxy)","c":"c(proxy)"}}',
- parent3);
-
-
-// Empty proxy.
-
-var handler4 = {
- get: function(target, name) {
- return 0;
- },
- has: function() {
- return true;
- },
- getOwnPropertyDescriptor: function(target, name) {
- return { enumerable: false };
- }
-}
-
-var proxy4 = new Proxy({}, handler4);
-testStringify('{}', proxy4);
-testStringify('{"a":{}}', { a: proxy4 });
-
-
-// Proxy that provides a toJSON function that uses this.
-
-var handler5 = {
- get: function(target, name) {
- if (name == 'z') return 97000;
- return function(key) { return key.charCodeAt(0) + this.z; };
- },
- ownKeys: function(target) {
- return ['toJSON', 'z'];
- },
- has: function() {
- return true;
- },
- getOwnPropertyDescriptor: function(target, name) {
- return { enumerable: true };
- }
-}
-
-var proxy5 = new Proxy({}, handler5);
-testStringify('{"a":97097}', { a: proxy5 });
-
-
-// Proxy that provides a toJSON function that returns undefined.
-
-var handler6 = {
- get: function(target, name) {
- return function(key) { return undefined; };
- },
- ownKeys: function(target) {
- return ['toJSON'];
- },
- has: function() {
- return true;
- },
- getOwnPropertyDescriptor: function(target, name) {
- return { enumerable: true };
- }
-}
-
-var proxy6 = new Proxy({}, handler6);
-testStringify('[1,null,true]', [1, proxy6, true]);
-testStringify('{"a":1,"c":true}', {a: 1, b: proxy6, c: true});
-
-
-// Object containing a proxy that changes the parent's properties.
-
-var handler7 = {
- get: function(target, name) {
- delete parent7.a;
- delete parent7.c;
- parent7.e = "5";
- return name.toUpperCase();
- },
- ownKeys: function() {
- return ['a', 'b', 'c'];
- },
- getOwnPropertyDescriptor: function() {
- return { enumerable: true, configurable: true };
- }
-}
-
-var proxy7 = new Proxy({}, handler7);
-var parent7 = { a: "1", b: proxy7, c: "3", d: "4" };
-assertEquals('{"a":"1","b":{"a":"A","b":"B","c":"C"},"d":"4"}',
- JSON.stringify(parent7));
-assertEquals('{"b":{"a":"A","b":"B","c":"C"},"d":"4","e":"5"}',
- JSON.stringify(parent7));
-
-
-// (Proxy handler to log trap calls)
-
-var log = [];
-var logger = {};
-var handler = new Proxy({}, logger);
-
-logger.get = function(t, trap, r) {
- return function() {
- log.push([trap, ...arguments]);
- return Reflect[trap](...arguments);
- }
-};
-
-
-// Object is a callable proxy
-
-log.length = 0;
-var target = () => 42;
-var proxy = new Proxy(target, handler);
-assertTrue(typeof proxy === 'function');
-
-assertEquals(undefined, JSON.stringify(proxy));
-assertEquals(1, log.length)
-for (var i in log) assertSame(target, log[i][1]);
-
-assertEquals(["get", target, "toJSON", proxy], log[0]);
-
-
-// Object is a non-callable non-arraylike proxy
-
-log.length = 0;
-var target = {foo: 42}
-var proxy = new Proxy(target, handler);
-assertFalse(Array.isArray(proxy));
-
-assertEquals('{"foo":42}', JSON.stringify(proxy));
-assertEquals(4, log.length)
-for (var i in log) assertSame(target, log[i][1]);
-
-assertEquals(
- ["get", target, "toJSON", proxy], log[0]);
-assertEquals(
- ["ownKeys", target], log[1]); // EnumerableOwnNames
-assertEquals(
- ["getOwnPropertyDescriptor", target, "foo"], log[2]); // EnumerableOwnNames
-assertEquals(
- ["get", target, "foo", proxy], log[3]);
-
-
-// Object is an arraylike proxy
-
-log.length = 0;
-var target = [42];
-var proxy = new Proxy(target, handler);
-assertTrue(Array.isArray(proxy));
-
-assertEquals('[42]', JSON.stringify(proxy));
-assertEquals(3, log.length)
-for (var i in log) assertSame(target, log[i][1]);
-
-assertEquals(["get", target, "toJSON", proxy], log[0]);
-assertEquals(["get", target, "length", proxy], log[1]);
-assertEquals(["get", target, "0", proxy], log[2]);
-
-
-// Replacer is a callable proxy
-
-log.length = 0;
-var object = {0: "foo", 1: 666};
-var target = (key, val) => key == "1" ? val + 42 : val;
-var proxy = new Proxy(target, handler);
-assertTrue(typeof proxy === 'function');
-
-assertEquals('{"0":"foo","1":708}', JSON.stringify(object, proxy));
-assertEquals(3, log.length)
-for (var i in log) assertSame(target, log[i][1]);
-
-assertEquals(4, log[0].length)
-assertEquals("apply", log[0][0]);
-assertEquals("", log[0][3][0]);
-assertEquals({0: "foo", 1: 666}, log[0][3][1]);
-assertEquals(4, log[1].length)
-assertEquals("apply", log[1][0]);
-assertEquals(["0", "foo"], log[1][3]);
-assertEquals(4, log[2].length)
-assertEquals("apply", log[2][0]);
-assertEquals(["1", 666], log[2][3]);
-
-
-// Replacer is an arraylike proxy
-
-log.length = 0;
-var object = {0: "foo", 1: 666};
-var target = [0];
-var proxy = new Proxy(target, handler);
-assertTrue(Array.isArray(proxy));
-
-assertEquals('{"0":"foo"}', JSON.stringify(object, proxy));
-assertEquals(2, log.length)
-for (var i in log) assertSame(target, log[i][1]);
-
-assertEquals(["get", target, "length", proxy], log[0]);
-assertEquals(["get", target, "0", proxy], log[1]);
-
-
-// Replacer is an arraylike proxy and object is an array
-
-log.length = 0;
-var object = ["foo", 42];
-var target = [0];
-var proxy = new Proxy(target, handler);
-assertTrue(Array.isArray(proxy));
-
-assertEquals('["foo",42]', JSON.stringify(object, proxy));
-assertEquals(2, log.length);
-for (var i in log) assertSame(target, log[i][1]);
-
-assertEquals(["get", target, "length", proxy], log[0]);
-assertEquals(["get", target, "0", proxy], log[1]);
-
-
-// Replacer is an arraylike proxy with a non-trivial length
-
-var getTrap = function(t, key) {
- if (key === "length") return {[Symbol.toPrimitive]() {return 42}};
- if (key === "41") return "foo";
- if (key === "42") return "bar";
-};
-var target = [];
-var proxy = new Proxy(target, {get: getTrap});
-assertTrue(Array.isArray(proxy));
-var object = {foo: true, bar: 666};
-assertEquals('{"foo":true}', JSON.stringify(object, proxy));
-
-
-// Replacer is an arraylike proxy with a bogus length
-
-var getTrap = function(t, key) {
- if (key === "length") return Symbol();
- if (key === "41") return "foo";
- if (key === "42") return "bar";
-};
-var target = [];
-var proxy = new Proxy(target, {get: getTrap});
-assertTrue(Array.isArray(proxy));
-var object = {foo: true, bar: 666};
-assertThrows(() => JSON.stringify(object, proxy), TypeError);
-
-
-// Replacer returns a non-callable non-arraylike proxy
-
-log.length = 0;
-var object = ["foo", 42];
-var target = {baz: 5};
-var proxy = new Proxy(target, handler);
-var replacer = (key, val) => key === "1" ? proxy : val;
-
-assertEquals('["foo",{"baz":5}]', JSON.stringify(object, replacer));
-assertEquals(3, log.length);
-for (var i in log) assertSame(target, log[i][1]);
-
-assertEquals(["ownKeys", target], log[0]);
-assertEquals(["getOwnPropertyDescriptor", target, "baz"], log[1]);
-
-
-// Replacer returns an arraylike proxy
-
-log.length = 0;
-var object = ["foo", 42];
-var target = ["bar"];
-var proxy = new Proxy(target, handler);
-var replacer = (key, val) => key === "1" ? proxy : val;
-
-assertEquals('["foo",["bar"]]', JSON.stringify(object, replacer));
-assertEquals(2, log.length);
-for (var i in log) assertSame(target, log[i][1]);
-
-assertEquals(["get", target, "length", proxy], log[0]);
-assertEquals(["get", target, "0", proxy], log[1]);
-
-
-// Replacer returns an arraylike proxy with a non-trivial length
-
-var getTrap = function(t, key) {
- if (key === "length") return {[Symbol.toPrimitive]() {return 3}};
- if (key === "2") return "baz";
- if (key === "3") return "bar";
-};
-var target = [];
-var proxy = new Proxy(target, {get: getTrap});
-var replacer = (key, val) => key === "goo" ? proxy : val;
-var object = {foo: true, goo: false};
-assertEquals('{"foo":true,"goo":[null,null,"baz"]}',
- JSON.stringify(object, replacer));
-
-
-// Replacer returns an arraylike proxy with a bogus length
-
-var getTrap = function(t, key) {
- if (key === "length") return Symbol();
- if (key === "2") return "baz";
- if (key === "3") return "bar";
-};
-var target = [];
-var proxy = new Proxy(target, {get: getTrap});
-var replacer = (key, val) => key === "goo" ? proxy : val;
-var object = {foo: true, goo: false};
-assertThrows(() => JSON.stringify(object, replacer), TypeError);
-
-
-// Replacer returns a callable proxy
-
-log.length = 0;
-var target = () => 666;
-var proxy = new Proxy(target, handler);
-var replacer = (key, val) => key === "1" ? proxy : val;
-
-assertEquals('["foo",null]', JSON.stringify(["foo", 42], replacer));
-assertEquals(0, log.length);
-
-assertEquals('{"0":"foo"}', JSON.stringify({0: "foo", 1: 42}, replacer));
-assertEquals(0, log.length);
-
-
-
-///////////////////////////////////////////////////////////////////////////////
-// JSON.parse
-
-
-// Reviver is a callable proxy
-
-log.length = 0;
-var target = () => 42;
-var proxy = new Proxy(target, handler);
-assertTrue(typeof proxy === "function");
-
-assertEquals(42, JSON.parse("[true, false]", proxy));
-assertEquals(3, log.length);
-for (var i in log) assertSame(target, log[i][1]);
-
-assertEquals(4, log[0].length);
-assertEquals("apply", log[0][0]);
-assertEquals(["0", true], log[0][3]);
-assertEquals(4, log[1].length);
-assertEquals("apply", log[1][0]);
-assertEquals(["1", false], log[1][3]);
-assertEquals(4, log[2].length);
-assertEquals("apply", log[2][0]);
-assertEquals(["", [42, 42]], log[2][3]);
-
-
-// Reviver plants a non-arraylike proxy into a yet-to-be-visited property
-
-log.length = 0;
-var target = {baz: 42};
-var proxy = new Proxy(target, handler);
-var reviver = function(p, v) {
- if (p === "baz") return 5;
- if (p === "foo") this.bar = proxy;
- return v;
-}
-
-assertEquals({foo: 0, bar: proxy}, JSON.parse('{"foo":0,"bar":1}', reviver));
-assertEquals(4, log.length);
-for (var i in log) assertSame(target, log[i][1]);
-
-assertEquals(["ownKeys", target], log[0]);
-assertEquals(["getOwnPropertyDescriptor", target, "baz"], log[1]);
-assertEquals(["get", target, "baz", proxy], log[2]);
-assertEquals(["defineProperty", target, "baz",
- {value: 5, configurable: true, writable: true, enumerable: true}], log[3]);
-
-
-// Reviver plants an arraylike proxy into a yet-to-be-visited property
-
-log.length = 0;
-var target = [42];
-var proxy = new Proxy(target, handler);
-assertTrue(Array.isArray(proxy));
-var reviver = function(p, v) {
- if (p === "0") return undefined;
- if (p === "foo") this.bar = proxy;
- return v;
-}
-
-var result = JSON.parse('{"foo":0,"bar":1}', reviver);
-assertEquals({foo: 0, bar: proxy}, result);
-assertSame(result.bar, proxy);
-assertEquals(3, log.length);
-for (var i in log) assertSame(target, log[i][1]);
-
-assertEquals(["get", target, "length", proxy], log[0]);
-assertEquals(["get", target, "0", proxy], log[1]);
-assertEquals(["deleteProperty", target, "0"], log[2]);
« no previous file with comments | « test/mjsunit/harmony/proxies-is-extensible.js ('k') | test/mjsunit/harmony/proxies-keys.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698