mirror of https://github.com/tc39/test262.git
341 lines
7.9 KiB
JavaScript
341 lines
7.9 KiB
JavaScript
function assert(b) {
|
|
if (!b)
|
|
throw new Error("Bad assertion");
|
|
}
|
|
|
|
{
|
|
let target = {};
|
|
let error = null;
|
|
let handler = {
|
|
get isExtensible() {
|
|
error = new Error;
|
|
throw error;
|
|
}
|
|
};
|
|
|
|
let proxy = new Proxy(target, handler);
|
|
for (let i = 0; i < 500; i++) {
|
|
let threw = false;
|
|
try {
|
|
Reflect.isExtensible(proxy);
|
|
} catch(e) {
|
|
assert(e === error);
|
|
threw = true;
|
|
}
|
|
assert(threw);
|
|
}
|
|
}
|
|
|
|
{
|
|
let target = {};
|
|
let error = null;
|
|
let handler = {
|
|
isExtensible: function() {
|
|
error = new Error;
|
|
throw error;
|
|
}
|
|
};
|
|
|
|
let proxy = new Proxy(target, handler);
|
|
for (let i = 0; i < 500; i++) {
|
|
let threw = false;
|
|
try {
|
|
Reflect.isExtensible(proxy);
|
|
} catch(e) {
|
|
assert(e === error);
|
|
threw = true;
|
|
}
|
|
assert(threw);
|
|
}
|
|
}
|
|
|
|
{
|
|
let error = null;
|
|
let target = new Proxy({}, {
|
|
isExtensible: function() {
|
|
error = new Error;
|
|
throw error;
|
|
}
|
|
});
|
|
let handler = {
|
|
isExtensible: function(theTarget) {
|
|
return Reflect.isExtensible(theTarget);
|
|
}
|
|
};
|
|
|
|
let proxy = new Proxy(target, handler);
|
|
for (let i = 0; i < 500; i++) {
|
|
let threw = false;
|
|
try {
|
|
Reflect.isExtensible(proxy);
|
|
} catch(e) {
|
|
assert(e === error);
|
|
threw = true;
|
|
}
|
|
assert(threw);
|
|
}
|
|
}
|
|
|
|
{
|
|
let target = {};
|
|
let handler = {
|
|
isExtensible: function(theTarget) {
|
|
return false;
|
|
}
|
|
};
|
|
|
|
let proxy = new Proxy(target, handler);
|
|
for (let i = 0; i < 500; i++) {
|
|
let threw = false;
|
|
try {
|
|
Reflect.isExtensible(proxy);
|
|
} catch(e) {
|
|
assert(e.toString() === "TypeError: Proxy object's 'isExtensible' trap returned false when the target is extensible. It should have returned true");
|
|
threw = true;
|
|
}
|
|
assert(threw);
|
|
}
|
|
}
|
|
|
|
{
|
|
let target = {};
|
|
Reflect.preventExtensions(target);
|
|
let handler = {
|
|
isExtensible: function(theTarget) {
|
|
return true;
|
|
}
|
|
};
|
|
|
|
let proxy = new Proxy(target, handler);
|
|
for (let i = 0; i < 500; i++) {
|
|
let threw = false;
|
|
try {
|
|
Reflect.isExtensible(proxy);
|
|
} catch(e) {
|
|
assert(e.toString() === "TypeError: Proxy object's 'isExtensible' trap returned true when the target is non-extensible. It should have returned false");
|
|
threw = true;
|
|
}
|
|
assert(threw);
|
|
}
|
|
}
|
|
|
|
{
|
|
let target = {};
|
|
Object.freeze(target);
|
|
let handler = {
|
|
isExtensible: function(theTarget) {
|
|
return true;
|
|
}
|
|
};
|
|
|
|
let proxy = new Proxy(target, handler);
|
|
for (let i = 0; i < 500; i++) {
|
|
let threw = false;
|
|
try {
|
|
Reflect.isExtensible(proxy);
|
|
} catch(e) {
|
|
assert(e.toString() === "TypeError: Proxy object's 'isExtensible' trap returned true when the target is non-extensible. It should have returned false");
|
|
threw = true;
|
|
}
|
|
assert(threw);
|
|
}
|
|
}
|
|
|
|
{
|
|
let target = {};
|
|
Object.seal(target);
|
|
let handler = {
|
|
isExtensible: function(theTarget) {
|
|
return true;
|
|
}
|
|
};
|
|
|
|
let proxy = new Proxy(target, handler);
|
|
for (let i = 0; i < 500; i++) {
|
|
let threw = false;
|
|
try {
|
|
Reflect.isExtensible(proxy);
|
|
} catch(e) {
|
|
assert(e.toString() === "TypeError: Proxy object's 'isExtensible' trap returned true when the target is non-extensible. It should have returned false");
|
|
threw = true;
|
|
}
|
|
assert(threw);
|
|
}
|
|
}
|
|
|
|
{
|
|
let target = {};
|
|
Object.preventExtensions(target);
|
|
let handler = {
|
|
isExtensible: function(theTarget) {
|
|
return true;
|
|
}
|
|
};
|
|
|
|
let proxy = new Proxy(target, handler);
|
|
for (let i = 0; i < 500; i++) {
|
|
let threw = false;
|
|
try {
|
|
Reflect.isExtensible(proxy);
|
|
} catch(e) {
|
|
assert(e.toString() === "TypeError: Proxy object's 'isExtensible' trap returned true when the target is non-extensible. It should have returned false");
|
|
threw = true;
|
|
}
|
|
assert(threw);
|
|
}
|
|
}
|
|
|
|
{
|
|
let target = {};
|
|
let called = false;
|
|
let handler = {
|
|
isExtensible: function(theTarget) {
|
|
called = true;
|
|
return true;
|
|
}
|
|
};
|
|
|
|
let proxy = new Proxy(target, handler);
|
|
for (let i = 0; i < 500; i++) {
|
|
let threw = false;
|
|
let result = Reflect.isExtensible(proxy);
|
|
assert(result);
|
|
assert(called);
|
|
called = false;
|
|
}
|
|
}
|
|
|
|
{
|
|
let target = {};
|
|
let called = false;
|
|
Reflect.preventExtensions(target);
|
|
let handler = {
|
|
isExtensible: function(theTarget) {
|
|
assert(theTarget === target);
|
|
called = true;
|
|
return Reflect.isExtensible(theTarget);
|
|
}
|
|
};
|
|
|
|
let proxy = new Proxy(target, handler);
|
|
for (let i = 0; i < 500; i++) {
|
|
let threw = false;
|
|
let result = Object.isExtensible(proxy);
|
|
assert(!result);
|
|
assert(called);
|
|
called = false;
|
|
|
|
result = Object.isFrozen(proxy);
|
|
assert(result);
|
|
assert(called);
|
|
called = false;
|
|
|
|
result = Object.isSealed(proxy);
|
|
assert(result);
|
|
assert(called);
|
|
called = false;
|
|
}
|
|
}
|
|
|
|
{
|
|
let target = {};
|
|
let called = false;
|
|
Object.freeze(target);
|
|
let handler = {
|
|
isExtensible: function(theTarget) {
|
|
assert(theTarget === target);
|
|
called = true;
|
|
return Reflect.isExtensible(theTarget);
|
|
}
|
|
};
|
|
|
|
let proxy = new Proxy(target, handler);
|
|
for (let i = 0; i < 500; i++) {
|
|
let threw = false;
|
|
let result = Object.isExtensible(proxy);
|
|
assert(!result);
|
|
assert(called);
|
|
called = false;
|
|
|
|
result = Object.isFrozen(proxy);
|
|
assert(result);
|
|
assert(called);
|
|
called = false;
|
|
|
|
result = Object.isSealed(proxy);
|
|
assert(result);
|
|
assert(called);
|
|
called = false;
|
|
}
|
|
}
|
|
|
|
{
|
|
let target = {};
|
|
let called = false;
|
|
Object.seal(target);
|
|
let handler = {
|
|
isExtensible: function(theTarget) {
|
|
assert(theTarget === target);
|
|
called = true;
|
|
return Reflect.isExtensible(theTarget);
|
|
}
|
|
};
|
|
|
|
let proxy = new Proxy(target, handler);
|
|
for (let i = 0; i < 500; i++) {
|
|
let threw = false;
|
|
let result = Object.isExtensible(proxy);
|
|
assert(!result);
|
|
assert(called);
|
|
called = false;
|
|
|
|
result = Object.isFrozen(proxy);
|
|
assert(result);
|
|
assert(called);
|
|
called = false;
|
|
|
|
result = Object.isSealed(proxy);
|
|
assert(result);
|
|
assert(called);
|
|
called = false;
|
|
}
|
|
}
|
|
|
|
{
|
|
let target = {};
|
|
Object.defineProperty(target, "x", {
|
|
writable: true,
|
|
configurable: true,
|
|
value: 45,
|
|
enumerable: true
|
|
});
|
|
let called = false;
|
|
Reflect.preventExtensions(target);
|
|
let handler = {
|
|
isExtensible: function(theTarget) {
|
|
assert(theTarget === target);
|
|
called = true;
|
|
return Reflect.isExtensible(theTarget);
|
|
}
|
|
};
|
|
|
|
let proxy = new Proxy(target, handler);
|
|
for (let i = 0; i < 500; i++) {
|
|
let threw = false;
|
|
let result = Object.isExtensible(proxy);
|
|
assert(!result);
|
|
assert(called);
|
|
called = false;
|
|
|
|
result = Object.isFrozen(proxy);
|
|
assert(!result);
|
|
assert(called);
|
|
called = false;
|
|
|
|
result = Object.isSealed(proxy);
|
|
assert(!result);
|
|
assert(called);
|
|
called = false;
|
|
}
|
|
}
|