mirror of https://github.com/tc39/test262.git
[javascriptcore-test262-automation] Changes from https://github.com/webkit/webkit.git at sha 51c20fe3ea on Thu Dec 20 2018 19:17:41 GMT+0000 (Coordinated Universal Time)
This commit is contained in:
parent
258da539bc
commit
8f629cd87f
|
@ -0,0 +1,39 @@
|
|||
function shouldNotThrow(script) {
|
||||
eval(script);
|
||||
}
|
||||
|
||||
function shouldThrowSyntaxError(script) {
|
||||
let error;
|
||||
try {
|
||||
eval(script);
|
||||
} catch (e) {
|
||||
error = e;
|
||||
}
|
||||
|
||||
if (!(error instanceof SyntaxError))
|
||||
throw new Error('Expected SyntaxError!');
|
||||
}
|
||||
|
||||
shouldThrowSyntaxError('{ var x; let x; }');
|
||||
shouldThrowSyntaxError('{ { var x; } let x; }');
|
||||
shouldThrowSyntaxError('{ { { var x; } } let x; }');
|
||||
shouldThrowSyntaxError('{ let x; var x; }');
|
||||
shouldThrowSyntaxError('{ let x; { var x; } }');
|
||||
shouldThrowSyntaxError('{ let x; { { var x; } } }');
|
||||
|
||||
shouldNotThrow('{ var x; { let x; } }');
|
||||
shouldNotThrow('{ var x; { { let x; } } }');
|
||||
shouldNotThrow('{ { let x; } var x; }');
|
||||
shouldNotThrow('{ { { let x; } } var x; }');
|
||||
|
||||
shouldThrowSyntaxError('{ var x; const x = 0; }');
|
||||
shouldThrowSyntaxError('{ { var x; } const x = 0; }');
|
||||
shouldThrowSyntaxError('{ { { var x; } } const x = 0; }');
|
||||
shouldThrowSyntaxError('{ const x = 0; var x; }');
|
||||
shouldThrowSyntaxError('{ const x = 0; { var x; } }');
|
||||
shouldThrowSyntaxError('{ const x = 0; { { var x; } } }');
|
||||
|
||||
shouldNotThrow('{ var x; { const x = 0; } }');
|
||||
shouldNotThrow('{ var x; { { const x = 0; } } }');
|
||||
shouldNotThrow('{ { const x = 0; } var x; }');
|
||||
shouldNotThrow('{ { { const x = 0; } } var x; }');
|
|
@ -0,0 +1,94 @@
|
|||
function assert(b) {
|
||||
if (!b)
|
||||
throw new Error("Bad");
|
||||
}
|
||||
|
||||
function test(f) {
|
||||
noInline(f);
|
||||
for (let i = 0; i < 1000; ++i)
|
||||
f();
|
||||
}
|
||||
|
||||
function shouldThrowSyntaxError(script) {
|
||||
let error;
|
||||
try {
|
||||
eval(script);
|
||||
} catch (e) {
|
||||
error = e;
|
||||
}
|
||||
|
||||
if (!(error instanceof SyntaxError))
|
||||
throw new Error('Expected SyntaxError!');
|
||||
}
|
||||
|
||||
test(function() {
|
||||
let o = {xx: 0};
|
||||
for (let i in o) {
|
||||
for (i in [0, 1, 2]) { }
|
||||
assert(typeof i === "string");
|
||||
assert(o[i] === undefined);
|
||||
}
|
||||
});
|
||||
|
||||
test(function() {
|
||||
let o = {xx: 0};
|
||||
for (let i in o) {
|
||||
for ({i} of [{i: 0}]) { }
|
||||
assert(typeof i === "number");
|
||||
assert(o[i] === undefined);
|
||||
}
|
||||
});
|
||||
|
||||
test(function() {
|
||||
let o = {xx: 0};
|
||||
for (let i in o) {
|
||||
;({i} = {i: 0});
|
||||
assert(typeof i === "number");
|
||||
assert(o[i] === undefined);
|
||||
}
|
||||
});
|
||||
|
||||
test(function() {
|
||||
let o = {xx: 0};
|
||||
for (let i in o) {
|
||||
;([i] = [0]);
|
||||
assert(typeof i === "number");
|
||||
assert(o[i] === undefined);
|
||||
}
|
||||
});
|
||||
|
||||
test(function() {
|
||||
let o = {xx: 0};
|
||||
for (let i in o) {
|
||||
;({...i} = {a:20, b:30});
|
||||
assert(typeof i === "object");
|
||||
assert(o[i] === undefined);
|
||||
}
|
||||
});
|
||||
|
||||
test(function() {
|
||||
let o = {xx: 0};
|
||||
for (let i in o) {
|
||||
eval("i = 0;");
|
||||
assert(typeof i === "number");
|
||||
assert(o[i] === undefined);
|
||||
}
|
||||
});
|
||||
|
||||
shouldThrowSyntaxError(
|
||||
`function f() {
|
||||
let o = {xx: 0};
|
||||
for (let i in o) {
|
||||
for (var i of [0]) { }
|
||||
}
|
||||
}`
|
||||
);
|
||||
|
||||
shouldThrowSyntaxError(
|
||||
`function f() {
|
||||
let o = {xx: 0};
|
||||
for (let i in o) {
|
||||
var i = 0;
|
||||
}
|
||||
}`
|
||||
);
|
|
@ -0,0 +1,199 @@
|
|||
function shouldThrowSyntaxError(script) {
|
||||
let error;
|
||||
try {
|
||||
eval(script);
|
||||
} catch (e) {
|
||||
error = e;
|
||||
}
|
||||
|
||||
if (!(error instanceof SyntaxError))
|
||||
throw new Error('Expected SyntaxError!');
|
||||
}
|
||||
|
||||
(function() {
|
||||
// Iterate over an array with normal indexed properties.
|
||||
var foo = function() {
|
||||
var a = [1, 2, 3, 4, 5];
|
||||
var sum = 0;
|
||||
var result = "";
|
||||
for (var p in a)
|
||||
result += a[p];
|
||||
return result;
|
||||
};
|
||||
noInline(foo);
|
||||
for (var i = 0; i < 10000; ++i) {
|
||||
if (foo() !== "12345")
|
||||
throw new Error("bad result");
|
||||
}
|
||||
foo(null);
|
||||
})();
|
||||
(function() {
|
||||
// Iterate over an object with normal non-indexed properties.
|
||||
var foo = function() {
|
||||
var o = {};
|
||||
o.x = 1;
|
||||
o.y = 2;
|
||||
o.z = 3;
|
||||
var result = "";
|
||||
for (var p in o)
|
||||
result += o[p];
|
||||
return result;
|
||||
};
|
||||
noInline(foo);
|
||||
for (var i = 0; i < 10000; ++i) {
|
||||
if (foo() !== "123")
|
||||
throw new Error("bad result");
|
||||
}
|
||||
foo(null);
|
||||
})();
|
||||
(function() {
|
||||
// Iterate over an object with both indexed and non-indexed properties.
|
||||
var foo = function() {
|
||||
var o = {};
|
||||
o.x = 1;
|
||||
o.y = 2;
|
||||
o.z = 3;
|
||||
o[0] = 4;
|
||||
o[1] = 5;
|
||||
o[2] = 6;
|
||||
var result = "";
|
||||
for (var p in o)
|
||||
result += o[p];
|
||||
return result;
|
||||
};
|
||||
noInline(foo);
|
||||
for (var i = 0; i < 10000; ++i) {
|
||||
if (foo() != "456123")
|
||||
throw new Error("bad result");
|
||||
}
|
||||
foo(null);
|
||||
})();
|
||||
(function() {
|
||||
// Iterate over an array with both indexed and non-indexed properties.
|
||||
var foo = function() {
|
||||
var a = [4, 5, 6];
|
||||
a.x = 1;
|
||||
a.y = 2;
|
||||
a.z = 3;
|
||||
var result = "";
|
||||
for (var p in a)
|
||||
result += a[p];
|
||||
return result;
|
||||
};
|
||||
noInline(foo);
|
||||
for (var i = 0; i < 10000; ++i) {
|
||||
if (foo() !== "456123")
|
||||
throw new Error("bad result");
|
||||
}
|
||||
foo(null);
|
||||
})();
|
||||
(function() {
|
||||
var foo = function(a, b) {
|
||||
for (var p in b) {
|
||||
var f1 = a[p];
|
||||
var f2 = b[p];
|
||||
if (f1 === f2)
|
||||
continue;
|
||||
a[p] = b[p];
|
||||
}
|
||||
};
|
||||
noInline(foo);
|
||||
for (var i = 0; i < 10000; ++i) {
|
||||
var o1 = {};
|
||||
var o2 = {};
|
||||
o2.x = 42;
|
||||
o2.y = 53;
|
||||
foo(o1, o2);
|
||||
if (o1.x !== o2.x)
|
||||
throw new Error("bad result: " + o1.x + "!==" + o2.x);
|
||||
if (o1.y !== o2.y)
|
||||
throw new Error("bad result: " + o1.y + "!==" + o2.y);
|
||||
}
|
||||
})();
|
||||
|
||||
(function() {
|
||||
var foo = function(a, b) {
|
||||
for (var p = b in a) {}
|
||||
return p;
|
||||
};
|
||||
noInline(foo);
|
||||
for (var i = 0; i < 10000; ++i) {
|
||||
var expected = 'expected-result';
|
||||
var result = foo({}, expected);
|
||||
if (expected !== result)
|
||||
throw new Error("bad result: " + result + "!==" + expected);
|
||||
}
|
||||
for (var i = 0; i < 10000; ++i) {
|
||||
var expected = 'a';
|
||||
var result = foo({a:'abcd'}, expected);
|
||||
if (expected !== result)
|
||||
throw new Error("bad result: " + result + "!==" + expected);
|
||||
}
|
||||
for (var i = 0; i < 10000; ++i) {
|
||||
var expected = 'b';
|
||||
var result = foo({a:'abcd', b: 'bcde'}, expected);
|
||||
if (expected !== result)
|
||||
throw new Error("bad result: " + result + "!==" + expected);
|
||||
}
|
||||
|
||||
for (var i = 0; i < 10000; ++i) {
|
||||
var expected = 'c';
|
||||
var o = {a:'abcd', b: 'bcde'};
|
||||
o.c = 'cdef';
|
||||
var result = foo(o, expected);
|
||||
if (expected !== result)
|
||||
throw new Error("bad result: " + result + "!==" + expected);
|
||||
}
|
||||
})();
|
||||
|
||||
(function() {
|
||||
var boo = function () { return 'expected-result'; };
|
||||
var foo = function(a) {
|
||||
for (var p = boo() in a) {}
|
||||
return p;
|
||||
};
|
||||
noInline(foo);
|
||||
for (var i = 0; i < 10000; ++i) {
|
||||
var expected = 'expected-result';
|
||||
var result = foo({});
|
||||
if (expected !== result)
|
||||
throw new Error("bad result: " + result + "!==" + expected);
|
||||
}
|
||||
})();
|
||||
|
||||
shouldThrowSyntaxError(
|
||||
`function foo(a, b) {
|
||||
{
|
||||
let p = 'some-value';
|
||||
for (var p = b in a) {}
|
||||
}
|
||||
}`
|
||||
);
|
||||
|
||||
(function() {
|
||||
var foo = function(a, b, c) {
|
||||
for (var p = b + c in a) {}
|
||||
return p;
|
||||
};
|
||||
noInline(foo);
|
||||
for (var i = 0; i < 10000; ++i) {
|
||||
var expected = 'expected-result';
|
||||
var result = foo({}, 'expected', '-result');
|
||||
if (expected !== result)
|
||||
throw new Error("bad result: " + result + "!==" + expected);
|
||||
}
|
||||
})();
|
||||
|
||||
shouldThrowSyntaxError(
|
||||
`function foo() {
|
||||
'use strict';
|
||||
for (var i = 0 in {}) {}
|
||||
}`
|
||||
);
|
||||
|
||||
shouldThrowSyntaxError(
|
||||
`function foo() {
|
||||
const i = 10;
|
||||
for (var i = 0 in {}) {}
|
||||
}`
|
||||
);
|
|
@ -0,0 +1,29 @@
|
|||
//@ slow!
|
||||
//@ skip if $architecture != "arm64" and $architecture != "x86-64"
|
||||
|
||||
var exception;
|
||||
try {
|
||||
var str = JSON.stringify({
|
||||
'a1': {
|
||||
'a2': {
|
||||
'a3': {
|
||||
'a4': {
|
||||
'a5': {
|
||||
'a6': 'AAAAAAAAAA'
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}, function (key, value) {
|
||||
var val = {
|
||||
'A': true,
|
||||
};
|
||||
return val;
|
||||
}, 1);
|
||||
} catch (e) {
|
||||
exception = e;
|
||||
}
|
||||
|
||||
if (exception != "Error: Out of memory")
|
||||
throw "FAILED";
|
|
@ -0,0 +1,96 @@
|
|||
function testSyntax(script) {
|
||||
try {
|
||||
eval(script);
|
||||
} catch (error) {
|
||||
if (error instanceof SyntaxError)
|
||||
throw new Error("Bad error: " + String(error));
|
||||
}
|
||||
}
|
||||
|
||||
function testSyntaxError(script, message) {
|
||||
var error = null;
|
||||
try {
|
||||
eval(script);
|
||||
} catch (e) {
|
||||
error = e;
|
||||
}
|
||||
if (!error)
|
||||
throw new Error("Expected syntax error not thrown");
|
||||
|
||||
if (String(error) !== message)
|
||||
throw new Error("Bad error: " + String(error));
|
||||
}
|
||||
|
||||
{
|
||||
let tokens = [
|
||||
'-',
|
||||
'+',
|
||||
'~',
|
||||
'!',
|
||||
'typeof',
|
||||
'void',
|
||||
'delete',
|
||||
];
|
||||
|
||||
for (let token of tokens) {
|
||||
testSyntaxError(`
|
||||
function pow(a, b)
|
||||
{
|
||||
return ${token} a ** b;
|
||||
}
|
||||
`, `SyntaxError: Unexpected token '**'. Ambiguous unary expression in the left hand side of the exponentiation expression; parentheses must be used to disambiguate the expression.`);
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
let tokens = [
|
||||
'-',
|
||||
'+',
|
||||
'~',
|
||||
'!',
|
||||
'typeof',
|
||||
'void',
|
||||
'delete',
|
||||
];
|
||||
|
||||
for (let token of tokens) {
|
||||
testSyntax(`
|
||||
function pow(a, b)
|
||||
{
|
||||
return (${token} a) ** b;
|
||||
}
|
||||
`);
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
let tokens = [
|
||||
'++',
|
||||
'--',
|
||||
];
|
||||
|
||||
for (let token of tokens) {
|
||||
testSyntax(`
|
||||
function pow(a, b)
|
||||
{
|
||||
return ${token} a ** b;
|
||||
}
|
||||
`);
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
let tokens = [
|
||||
'++',
|
||||
'--',
|
||||
];
|
||||
|
||||
for (let token of tokens) {
|
||||
testSyntax(`
|
||||
function pow(a, b)
|
||||
{
|
||||
return a ${token} ** b;
|
||||
}
|
||||
`);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,11 @@
|
|||
function foo(){
|
||||
o = Error();
|
||||
for (var s in o) {
|
||||
o[s];
|
||||
o = Error();
|
||||
}
|
||||
}
|
||||
noInline(foo);
|
||||
|
||||
for(var i = 0; i < 100; i++)
|
||||
foo();
|
|
@ -0,0 +1,9 @@
|
|||
var exception;
|
||||
try {
|
||||
print('\ud000'.repeat(2**30));
|
||||
} catch (e) {
|
||||
exception = e;
|
||||
}
|
||||
|
||||
if (exception != "Error: Out of memory")
|
||||
throw "FAILED";
|
|
@ -0,0 +1,11 @@
|
|||
var exception;
|
||||
try {
|
||||
bar = '2.3023e-320'
|
||||
foo = bar.padEnd(2147483644, 1);
|
||||
foo(true, 1).value;
|
||||
} catch (e) {
|
||||
exception = e;
|
||||
}
|
||||
|
||||
if (exception != "Error: Out of memory")
|
||||
throw "FAILED";
|
Loading…
Reference in New Issue