mirror of
https://github.com/tc39/test262.git
synced 2025-05-03 14:30:27 +02:00
* [javascriptcore-test262-automation] changes from git@github.com:WebKit/webkit.git at sha 949e26452cfa153a7f4afe593da97e2fe9e1b706 on Tue Jul 03 2018 14:35:15 GMT-0400 (Eastern Daylight Time)
162 lines
4.0 KiB
JavaScript
162 lines
4.0 KiB
JavaScript
function assert(b) {
|
|
if (!b)
|
|
throw new Error("Bad assertion");
|
|
}
|
|
|
|
function test(f) {
|
|
for (let i = 0; i < 500; i++)
|
|
f();
|
|
}
|
|
|
|
test(function() {
|
|
let proxy = new Proxy([], {});
|
|
assert(JSON.stringify(proxy) === "[]");
|
|
});
|
|
|
|
test(function() {
|
|
let target = ["foo"];
|
|
let proxy = new Proxy(target, {});
|
|
assert(JSON.stringify(proxy) === JSON.stringify(target));
|
|
});
|
|
|
|
test(function() {
|
|
let target = {
|
|
foo: 25,
|
|
bar: false,
|
|
0: 45
|
|
};
|
|
let proxy = new Proxy(target, {});
|
|
assert(JSON.stringify(proxy) === JSON.stringify(target));
|
|
});
|
|
|
|
test(function() {
|
|
let target = {
|
|
foo: ["baz", {foo: 45}],
|
|
bar: false,
|
|
0: 45,
|
|
baz: "hello world",
|
|
jaz: 4553.434
|
|
};
|
|
let proxy = new Proxy(target, {});
|
|
assert(JSON.stringify(proxy) === JSON.stringify(target));
|
|
});
|
|
|
|
test(function() {
|
|
let target = {
|
|
foo: ["baz", {foo: 45}],
|
|
bar: false,
|
|
0: 45,
|
|
baz: "hello world",
|
|
jaz: 4553.434
|
|
};
|
|
let proxy = new Proxy(target, {});
|
|
for (let i = 0; i < 50; i++)
|
|
proxy = new Proxy(proxy, {});
|
|
assert(JSON.stringify(proxy) === JSON.stringify(target));
|
|
});
|
|
|
|
test(function() {
|
|
let target = [20, 30, "foo", {hello: "world"}];
|
|
let proxy = new Proxy(target, {});
|
|
for (let i = 0; i < 50; i++)
|
|
proxy = new Proxy(proxy, {});
|
|
assert(JSON.stringify(proxy) === JSON.stringify(target));
|
|
});
|
|
|
|
test(function() {
|
|
let target = {
|
|
foo: ["baz", {foo: 45}],
|
|
bar: false,
|
|
0: 45,
|
|
baz: "hello world",
|
|
jaz: 4553.434
|
|
};
|
|
let {proxy, revoke} = Proxy.revocable(target, {});
|
|
assert(JSON.stringify(proxy) === JSON.stringify(target));
|
|
|
|
revoke();
|
|
JSON.stringify(target); // Things are ok.
|
|
let threw = false;
|
|
try {
|
|
JSON.stringify(proxy); // Things are not ok.
|
|
} catch(e) {
|
|
threw = true;
|
|
assert(e.toString() === "TypeError: Proxy has already been revoked. No more operations are allowed to be performed on it");
|
|
}
|
|
assert(threw);
|
|
});
|
|
|
|
test(function() {
|
|
let target = ["foo", "bar", 25, false];
|
|
let proxy = new Proxy(target, {});
|
|
let revoke;
|
|
for (let i = 0; i < 50; i++) {
|
|
if (i === 25) {
|
|
let result = Proxy.revocable(proxy, {});
|
|
proxy = result.proxy;
|
|
revoke = result.revoke;
|
|
} else {
|
|
proxy = new Proxy(proxy, {});
|
|
}
|
|
}
|
|
assert(JSON.stringify(proxy) === JSON.stringify(target));
|
|
|
|
revoke();
|
|
JSON.stringify(target); // Things are ok.
|
|
let threw = false;
|
|
try {
|
|
JSON.stringify(proxy); // Things are not ok.
|
|
} catch(e) {
|
|
threw = true;
|
|
assert(e.toString() === "TypeError: Proxy has already been revoked. No more operations are allowed to be performed on it");
|
|
}
|
|
assert(threw);
|
|
});
|
|
|
|
test(function() {
|
|
let arr = ["foo", 25, "bar"];
|
|
let handler = {
|
|
get: function(theTarget, propName) {
|
|
assert(propName === "toJSON");
|
|
return function() {
|
|
return arr;
|
|
}
|
|
}
|
|
};
|
|
let proxy = new Proxy({}, handler);
|
|
assert(JSON.stringify(proxy) === JSON.stringify(arr));
|
|
});
|
|
|
|
test(function() {
|
|
let arr = ["foo", 25, "bar"];
|
|
let handler = {
|
|
get: function(theTarget, propName) {
|
|
assert(propName === "toJSON");
|
|
return function() {
|
|
return arr;
|
|
}
|
|
}
|
|
};
|
|
let proxy = new Proxy({}, handler);
|
|
let o1 = {foo: arr};
|
|
let o2 = {foo: proxy};
|
|
assert(JSON.stringify(o1) === JSON.stringify(o2));
|
|
});
|
|
|
|
test(function() {
|
|
let arr = ["foo", 25, "bar"];
|
|
let proxy = new Proxy(function() { return arr; }, {});
|
|
assert(JSON.stringify({toJSON: proxy}) === JSON.stringify(arr));
|
|
});
|
|
|
|
test(function() {
|
|
let arr = ["foo", 25, "bar"];
|
|
let proxy = new Proxy({}, {});
|
|
let o = {foo: 20};
|
|
Object.defineProperty(o, "toJSON", {
|
|
enumerable: false,
|
|
value: proxy
|
|
});
|
|
assert(JSON.stringify(o) === JSON.stringify({foo: 20}));
|
|
});
|