mirror of
https://github.com/tc39/test262.git
synced 2025-05-03 22:40:28 +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)
395 lines
8.5 KiB
JavaScript
395 lines
8.5 KiB
JavaScript
function assert(b) {
|
|
if (!b)
|
|
throw new Error("Bad assertion");
|
|
}
|
|
|
|
{
|
|
let target = function foo(...args) {
|
|
assert(args[0] === 10);
|
|
assert(args[1] === 20);
|
|
return "foo";
|
|
}
|
|
let handler = {
|
|
apply: function(theTarget, thisArg, argArray) {
|
|
assert(theTarget === target);
|
|
assert(argArray[0] === 10);
|
|
assert(argArray[1] === 20);
|
|
return theTarget.apply(thisArg, argArray);
|
|
}
|
|
};
|
|
let proxy = new Proxy(target, handler);
|
|
for (let i = 0; i < 500; i++) {
|
|
assert(proxy(10, 20) === "foo");
|
|
}
|
|
}
|
|
|
|
{
|
|
let target = function foo() { }
|
|
let error = null;
|
|
let handler = {
|
|
get apply() {
|
|
error = new Error();
|
|
throw error;
|
|
}
|
|
};
|
|
let proxy = new Proxy(target, handler);
|
|
for (let i = 0; i < 500; i++) {
|
|
let threw = false;
|
|
try {
|
|
proxy(10, 20);
|
|
} catch(e) {
|
|
assert(e === error);
|
|
threw = true;
|
|
}
|
|
assert(threw);
|
|
}
|
|
}
|
|
|
|
{
|
|
let called = false;
|
|
let globalThis = this;
|
|
let target = function foo() {
|
|
assert(this === globalThis);
|
|
called = true;
|
|
}
|
|
let handler = {
|
|
apply: null
|
|
};
|
|
|
|
let proxy = new Proxy(target, handler);
|
|
for (let i = 0; i < 500; i++) {
|
|
proxy();
|
|
assert(called);
|
|
called = false;
|
|
}
|
|
}
|
|
|
|
{
|
|
let called = false;
|
|
let globalThis = this;
|
|
let target = function foo() {
|
|
assert(this === globalThis);
|
|
called = true;
|
|
}
|
|
let handler = {
|
|
apply: undefined
|
|
};
|
|
|
|
let proxy = new Proxy(target, handler);
|
|
for (let i = 0; i < 500; i++) {
|
|
proxy();
|
|
assert(called);
|
|
called = false;
|
|
}
|
|
}
|
|
|
|
{
|
|
let called = false;
|
|
let thisValue = {};
|
|
let target = function foo(x, y, z) {
|
|
assert(this === thisValue);
|
|
assert(x === 20);
|
|
assert(y === 45);
|
|
assert(z === "foo");
|
|
called = true;
|
|
}
|
|
|
|
let handler = {
|
|
apply: undefined
|
|
};
|
|
|
|
let proxy = new Proxy(target, handler);
|
|
for (let i = 0; i < 500; i++) {
|
|
proxy.call(thisValue, 20, 45, "foo");
|
|
assert(called);
|
|
called = false;
|
|
proxy.apply(thisValue, [20, 45, "foo"]);
|
|
assert(called);
|
|
called = false;
|
|
}
|
|
}
|
|
|
|
{
|
|
let called = false;
|
|
let thisValue = {};
|
|
let target = function foo(x, y, z) {
|
|
assert(this === thisValue);
|
|
assert(x === 20);
|
|
assert(y === 45);
|
|
assert(z === "foo");
|
|
called = true;
|
|
return this;
|
|
}
|
|
|
|
let handler = {
|
|
apply: function(theTarget, thisArg, argArray) {
|
|
assert(theTarget === target);
|
|
assert(argArray[0] === 20);
|
|
assert(argArray[1] === 45);
|
|
assert(argArray[2] === "foo");
|
|
assert(thisArg === thisValue);
|
|
return theTarget.apply(thisArg, argArray);
|
|
}
|
|
};
|
|
|
|
let proxy = new Proxy(target, handler);
|
|
for (let i = 0; i < 500; i++) {
|
|
assert(proxy.call(thisValue, 20, 45, "foo") === thisValue);
|
|
assert(called);
|
|
called = false;
|
|
assert(proxy.apply(thisValue, [20, 45, "foo"]) === thisValue);
|
|
assert(called);
|
|
called = false;
|
|
}
|
|
}
|
|
|
|
{
|
|
let called = false;
|
|
let target = Error;
|
|
|
|
let handler = {
|
|
apply: function(theTarget, thisArg, argArray) {
|
|
called = true;
|
|
assert(theTarget === Error);
|
|
return theTarget.apply(thisArg, argArray);
|
|
}
|
|
};
|
|
|
|
let proxy = new Proxy(target, handler);
|
|
for (let i = 0; i < 500; i++) {
|
|
let error = proxy();
|
|
assert(!!error.stack);
|
|
called = false;
|
|
}
|
|
}
|
|
|
|
{
|
|
let called = false;
|
|
let self = this;
|
|
let target = (x) => {
|
|
called = true;
|
|
assert(this === self);
|
|
return x;
|
|
};
|
|
|
|
let handler = { };
|
|
|
|
let proxy = new Proxy(target, handler);
|
|
for (let i = 0; i < 500; i++) {
|
|
let result = proxy(i);
|
|
assert(result === i);
|
|
called = false;
|
|
}
|
|
}
|
|
|
|
{
|
|
let called = false;
|
|
let self = this;
|
|
let target = (x) => {
|
|
assert(this === self);
|
|
return x;
|
|
};
|
|
|
|
let handler = {
|
|
apply: function(theTarget, thisArg, argArray) {
|
|
called = true;
|
|
assert(theTarget === target);
|
|
return theTarget.apply(thisArg, argArray);
|
|
}
|
|
};
|
|
|
|
let proxy = new Proxy(target, handler);
|
|
for (let i = 0; i < 500; i++) {
|
|
let result = proxy(i);
|
|
assert(result === i);
|
|
called = false;
|
|
}
|
|
}
|
|
|
|
{
|
|
let called = false;
|
|
let self = this;
|
|
let target = (x) => {
|
|
assert(this === self);
|
|
return x;
|
|
};
|
|
|
|
let handler = {
|
|
apply: function(theTarget, thisArg, argArray) {
|
|
called = true;
|
|
assert(theTarget === target);
|
|
return theTarget.apply(null, argArray);
|
|
}
|
|
};
|
|
|
|
let proxy = new Proxy(target, handler);
|
|
for (let i = 0; i < 500; i++) {
|
|
let result = proxy(i);
|
|
assert(called);
|
|
assert(result === i);
|
|
called = false;
|
|
}
|
|
}
|
|
|
|
{
|
|
let called = false;
|
|
let target = (x) => { };
|
|
let error = null;
|
|
|
|
let handler = {
|
|
apply: function(theTarget, thisArg, argArray) {
|
|
error = new Error();
|
|
throw error;
|
|
}
|
|
};
|
|
|
|
let proxy = new Proxy(target, handler);
|
|
for (let i = 0; i < 500; i++) {
|
|
let threw = false;
|
|
try {
|
|
proxy();
|
|
} catch(e) {
|
|
assert(e === error);
|
|
threw = true;
|
|
}
|
|
assert(threw);
|
|
}
|
|
}
|
|
|
|
{
|
|
let called = false;
|
|
let error = null;
|
|
let target = (x) => {
|
|
error = new Error();
|
|
throw error;
|
|
};
|
|
|
|
let handler = {
|
|
apply: function(theTarget, thisArg, argArray) {
|
|
assert(theTarget === target);
|
|
return theTarget.apply(null, argArray);
|
|
}
|
|
};
|
|
|
|
let proxy = new Proxy(target, handler);
|
|
for (let i = 0; i < 500; i++) {
|
|
let threw = false;
|
|
try {
|
|
proxy();
|
|
} catch(e) {
|
|
assert(e === error);
|
|
threw = true;
|
|
}
|
|
assert(threw);
|
|
}
|
|
}
|
|
|
|
{
|
|
let called = false;
|
|
let error = null;
|
|
let target = new Proxy((x) => x, {});
|
|
|
|
let handler = {
|
|
apply: function(theTarget, thisArg, argArray) {
|
|
assert(theTarget === target);
|
|
called = true;
|
|
return theTarget.apply(null, argArray);
|
|
}
|
|
};
|
|
|
|
let proxy = new Proxy(target, handler);
|
|
for (let i = 0; i < 500; i++) {
|
|
assert(proxy(i) === i);
|
|
assert(called);
|
|
called = false;
|
|
}
|
|
}
|
|
|
|
{
|
|
let target = (x) => x;
|
|
let handler = {
|
|
apply: function(theTarget, thisArg, argArray) {
|
|
return theTarget.apply(thisArg, argArray);
|
|
}
|
|
};
|
|
let proxy = new Proxy(target, handler);
|
|
for (let i = 0; i < 500; i++) {
|
|
assert(typeof proxy === "function");
|
|
}
|
|
}
|
|
|
|
{
|
|
let target = function() { }
|
|
let handler = {
|
|
apply: function(theTarget, thisArg, argArray) {
|
|
return theTarget.apply(thisArg, argArray);
|
|
}
|
|
};
|
|
let proxy = new Proxy(target, handler);
|
|
for (let i = 0; i < 500; i++) {
|
|
assert(typeof proxy === "function");
|
|
}
|
|
}
|
|
|
|
{
|
|
let target = Error;
|
|
let handler = {
|
|
apply: function(theTarget, thisArg, argArray) {
|
|
return theTarget.apply(thisArg, argArray);
|
|
}
|
|
};
|
|
let proxy = new Proxy(target, handler);
|
|
for (let i = 0; i < 500; i++) {
|
|
assert(typeof proxy === "function");
|
|
}
|
|
}
|
|
|
|
{
|
|
let target = (function foo() { }).bind({});
|
|
let handler = {
|
|
apply: function(theTarget, thisArg, argArray) {
|
|
return theTarget.apply(thisArg, argArray);
|
|
}
|
|
};
|
|
let proxy = new Proxy(target, handler);
|
|
for (let i = 0; i < 500; i++) {
|
|
assert(typeof proxy === "function");
|
|
}
|
|
}
|
|
|
|
{
|
|
let target = function() { };
|
|
let handler = {};
|
|
let proxy = new Proxy(target, handler);
|
|
for (let i = 0; i < 500; i++) {
|
|
assert(typeof proxy === "function");
|
|
}
|
|
}
|
|
|
|
{
|
|
let target = {};
|
|
let handler = {};
|
|
let proxy = new Proxy(target, handler);
|
|
for (let i = 0; i < 500; i++) {
|
|
assert(typeof proxy === "object");
|
|
}
|
|
}
|
|
|
|
{
|
|
let target = [];
|
|
let handler = {};
|
|
let proxy = new Proxy(target, handler);
|
|
for (let i = 0; i < 500; i++) {
|
|
assert(typeof proxy === "object");
|
|
}
|
|
}
|
|
|
|
{
|
|
let target = new String("foo");
|
|
let handler = {};
|
|
let proxy = new Proxy(target, handler);
|
|
for (let i = 0; i < 500; i++) {
|
|
assert(typeof proxy === "object");
|
|
}
|
|
}
|