blob: ddfaecdd12e93042d4dbce4b23a9d838e1b6fea1 [file] [log] [blame]
function assert(b) {
if (!b)
throw new Error("Bad assertion");
}
{
let target = function() { }
let handler = {
construct: 45
};
let proxy = new Proxy(target, handler);
for (let i = 0; i < 500; i++) {
let threw = false;
try {
new proxy;
} catch(e) {
threw = true;
assert(e.toString() === "TypeError: 'construct' property of a Proxy's handler should be callable");
}
assert(threw);
}
}
{
let target = function() { }
let handler = {
construct: "hello"
};
let proxy = new Proxy(target, handler);
for (let i = 0; i < 500; i++) {
let threw = false;
try {
new proxy;
} catch(e) {
threw = true;
assert(e.toString() === "TypeError: 'construct' property of a Proxy's handler should be callable");
}
assert(threw);
}
}
{
let target = function() { }
let error = null;
let handler = {
get construct() {
error = new Error;
throw error;
}
};
let proxy = new Proxy(target, handler);
for (let i = 0; i < 500; i++) {
let threw = false;
try {
new proxy;
} catch(e) {
threw = true;
assert(e === error);
}
assert(threw);
error = null;
}
}
{
let target = function() { }
let error = null;
let handler = {
construct: function() {
error = new Error;
throw error;
}
};
let proxy = new Proxy(target, handler);
for (let i = 0; i < 500; i++) {
let threw = false;
try {
new proxy;
} catch(e) {
threw = true;
assert(e === error);
}
assert(threw);
error = null;
}
}
{
let error = null;
let target = function() {
assert(new.target === proxy);
error = new Error;
throw error;
};
let handler = { };
let proxy = new Proxy(target, handler);
for (let i = 0; i < 500; i++) {
let threw = false;
try {
new proxy;
} catch(e) {
assert(e === error);
error = null;
threw = true;
}
assert(threw);
}
}
{
let target = function() { }
let handler = {
construct: function() {
return 25;
}
};
let proxy = new Proxy(target, handler);
for (let i = 0; i < 500; i++) {
let threw = false;
try {
new proxy;
} catch(e) {
threw = true;
assert(e.toString() === "TypeError: Result from Proxy handler's 'construct' method should be an object");
}
assert(threw);
}
}
{
let target = function() { }
let handler = {
construct: function() {
return "hello";
}
};
let proxy = new Proxy(target, handler);
for (let i = 0; i < 500; i++) {
let threw = false;
try {
new proxy;
} catch(e) {
threw = true;
assert(e.toString() === "TypeError: Result from Proxy handler's 'construct' method should be an object");
}
assert(threw);
}
}
{
let target = function() { }
let handler = {
construct: function() {
return Symbol();
}
};
let proxy = new Proxy(target, handler);
for (let i = 0; i < 500; i++) {
let threw = false;
try {
new proxy;
} catch(e) {
threw = true;
assert(e.toString() === "TypeError: Result from Proxy handler's 'construct' method should be an object");
}
assert(threw);
}
}
{
let a = {};
let b = {};
let retValue = null;
let target = function() {
return retValue;
};
let error = null;
let handler = {
construct: function(theTarget, argArray, newTarget) {
assert(theTarget === target);
assert(newTarget === proxy);
return new theTarget(...argArray);
}
};
let proxy = new Proxy(target, handler);
for (let i = 0; i < 500; i++) {
retValue = i % 2 ? a : b;
assert(new proxy === retValue);
}
}
{
let a = {};
let b = {};
let target = function() {
assert(new.target === proxy);
return a;
};
let error = null;
let construct = function(theTarget, argArray, newTarget) {
assert(theTarget === target);
assert(newTarget === proxy);
return b;
};
let handler = { };
let proxy = new Proxy(target, handler);
for (let i = 0; i < 500; i++) {
if (i % 2)
handler.construct = construct;
else
handler.construct = null;
let result = new proxy;
if (i % 2)
assert(result === b)
else
assert(result === a);
}
}
{
let target = function(...args) {
assert(new.target === target);
assert(args[0] === 0);
assert(args[1] === 1);
assert(args[2] === "foo");
};
let error = null;
let construct = function(theTarget, argArray, newTarget) {
assert(theTarget === target);
assert(newTarget === proxy);
return new target(...argArray);
};
let handler = { };
handler.construct = construct;
let proxy = new Proxy(target, handler);
for (let i = 0; i < 500; i++) {
new proxy(0, 1, "foo");
}
}
{
let obj = null;
let target = function(...args) {
assert(new.target === target);
assert(args[0] === 0);
assert(obj);
assert(args[1] === obj);
assert(args[2] === "foo");
};
let error = null;
let construct = function(theTarget, argArray, newTarget) {
assert(theTarget === target);
assert(newTarget === proxy);
return new target(...argArray);
};
let handler = { };
handler.construct = construct;
let proxy = new Proxy(target, handler);
for (let i = 0; i < 500; i++) {
obj = {};
new proxy(0, obj, "foo");
}
}