mirror of https://github.com/tc39/test262.git
111 lines
2.4 KiB
JavaScript
111 lines
2.4 KiB
JavaScript
function assert(b) {
|
|
if (!b)
|
|
throw new Error("Bad assertion!");
|
|
}
|
|
|
|
{
|
|
let p = {};
|
|
let target = {__proto__: p};
|
|
let called = false;
|
|
let handler = {
|
|
get(target, key, receiver) {
|
|
called = true;
|
|
assert(key === "__proto__");
|
|
return target[key];
|
|
},
|
|
|
|
getPrototypeOf() {
|
|
assert(false);
|
|
}
|
|
};
|
|
|
|
let proxy = new Proxy(target, handler);
|
|
for (let i = 0; i < 500; i++) {
|
|
assert(proxy.__proto__ === p);
|
|
assert(called);
|
|
called = false;
|
|
}
|
|
}
|
|
|
|
{
|
|
let p = {};
|
|
let target = {__proto__: p};
|
|
let called1 = false;
|
|
let called2 = false;
|
|
let handler = {
|
|
get(target, key, receiver) {
|
|
called1 = true;
|
|
assert(key === "__proto__");
|
|
return Reflect.get(target, key, receiver);
|
|
},
|
|
|
|
getPrototypeOf(...args) {
|
|
called2 = true;
|
|
return Reflect.getPrototypeOf(...args);
|
|
}
|
|
};
|
|
|
|
let proxy = new Proxy(target, handler);
|
|
for (let i = 0; i < 500; i++) {
|
|
assert(proxy.__proto__ === p);
|
|
assert(called1);
|
|
assert(called2);
|
|
called1 = false;
|
|
called2 = false;
|
|
}
|
|
}
|
|
|
|
{
|
|
let p = {};
|
|
let target = {__proto__: null};
|
|
let called = false;
|
|
let handler = {
|
|
set(target, key, value, receiver) {
|
|
called = true;
|
|
assert(key === "__proto__");
|
|
return target[key] = value;
|
|
},
|
|
|
|
setPrototypeOf() {
|
|
assert(false);
|
|
}
|
|
};
|
|
|
|
let proxy = new Proxy(target, handler);
|
|
for (let i = 0; i < 500; i++) {
|
|
proxy.__proto__ = p;
|
|
assert(proxy.__proto__ === p);
|
|
assert(target.__proto__ === p);
|
|
target.__proto__ = null;
|
|
assert(called);
|
|
called = false;
|
|
}
|
|
}
|
|
|
|
{
|
|
let p = {};
|
|
let target = {__proto__: null};
|
|
let called = false;
|
|
let handler = {
|
|
set(target, key, value, receiver) {
|
|
called = true;
|
|
assert(key === "__proto__");
|
|
return Reflect.set(target, key, value, receiver);
|
|
},
|
|
|
|
setPrototypeOf() {
|
|
assert(false);
|
|
}
|
|
};
|
|
|
|
let proxy = new Proxy(target, handler);
|
|
for (let i = 0; i < 500; i++) {
|
|
proxy.__proto__ = p;
|
|
assert(proxy.__proto__ === p);
|
|
assert(target.__proto__ === p);
|
|
target.__proto__ = null;
|
|
assert(called);
|
|
called = false;
|
|
}
|
|
}
|