mirror of
https://github.com/tc39/test262.git
synced 2025-05-03 14:30:27 +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)
119 lines
6.5 KiB
JavaScript
119 lines
6.5 KiB
JavaScript
var assert = function (result, expected, message = "") {
|
|
if (result !== expected) {
|
|
throw new Error('Error in assert. Expected "' + expected + '" but was "' + result + '":' + message );
|
|
}
|
|
};
|
|
|
|
function checkSyntax(src) {
|
|
try {
|
|
eval(src);
|
|
} catch (error) {
|
|
if (error instanceof SyntaxError)
|
|
throw new Error("Syntax Error: " + String(error) + "\n script: `" + src + "`");
|
|
}
|
|
}
|
|
|
|
function checkSyntaxError(src, message) {
|
|
var bError = false;
|
|
try {
|
|
eval(src);
|
|
} catch (error) {
|
|
bError = error instanceof SyntaxError && (String(error) === message || typeof message === 'undefined');
|
|
}
|
|
if (!bError) {
|
|
throw new Error("Expected syntax Error: " + message + "\n in script: `" + src + "`");
|
|
}
|
|
}
|
|
|
|
(function checkSimpleAsyncGeneratorSloppyMode() {
|
|
checkSyntax('var a1 = async function*asyncGenWithName1(){ for await(const value of foo()) {} }');
|
|
checkSyntax('var a1 = async function asyncWithName1(){ for await(const value of foo()) {} }');
|
|
checkSyntax('var a1 = async function*asyncGenWithName1(){ for await(let value of foo()) {} }');
|
|
checkSyntax('var a1 = async function asyncWithName1(){ for await(let value of foo()) {} }');
|
|
})();
|
|
|
|
(function checkSimpleAsyncGeneratorStrictMode() {
|
|
checkSyntax('"use strict"; var a1 = async function*asyncGenWithName1(){ for await(const value of foo()) {} }');
|
|
checkSyntax('"use strict"; var a1 = async function asyncWithName1(){ for await(const value of foo()) {} }');
|
|
checkSyntax('"use strict"; var a1 = async function*asyncGenWithName1(){ for await(let value of foo()) {} }');
|
|
checkSyntax('"use strict"; var a1 = async function asyncWithName1(){ for await(let value of foo()) {} }');
|
|
})();
|
|
|
|
|
|
(function checkNestedAsyncGenerators() {
|
|
var wrappers = [
|
|
{start: 'var a1 = async function*asyncGenWithName1(){', finish: '}'},
|
|
{start: 'async function*asyncGenWithName2(){ ', finish: '}'},
|
|
{start: 'async function asyncWithName2(){ ', finish: '}'},
|
|
{start: 'class A { async * method() { ', finish: ' } }'},
|
|
{start: 'var a1 = async () => {', finish: '}'},
|
|
{start: 'var a1 = async () => { try { ', finish: ' } catch (e) {} }'},
|
|
{start: 'var a1 = async () => { { ', finish: ' } }'},
|
|
{start: 'var a1 = async () => { if (true) { ', finish: ' } }'},
|
|
{start: 'var a1 = async () => { if (true) ', finish: ' }'},
|
|
{start: 'var a1 = async () => { if (true) foo(); else { ', finish: ' } }'},
|
|
{start: 'var a1 = async () => { while (true) { ', finish: ' } }'},
|
|
{start: 'var a1 = async () => { for(;;) { ', finish: ' } }'},
|
|
{start: 'var a1 = async () => { switch(e) { case \'1\' : ', finish: ' } }'},
|
|
];
|
|
|
|
expressions = [
|
|
'for await(const value of foo()) {}',
|
|
'for await(let value of foo()) {}',
|
|
'for await(var value of foo()) {}',
|
|
'for await(var [a, b] of foo()) {}',
|
|
'for await(let {a, b} of foo()) {}',
|
|
'for await(const [... b] of foo()) {}',
|
|
'for await(const [,,, b] of foo()) {}',
|
|
'for await(const value of boo) {}',
|
|
'for await(let value of boo) {}',
|
|
'for await(const value of foo().boo()) {}',
|
|
'for await(let value of foo.boo()) {}',
|
|
'for await(let value of foo.boo(value)) {}',
|
|
'for await(let value of [1,2,3]) {}',
|
|
'for await(value of [1,2,3]) {}',
|
|
'for await(value of x + x) {}',
|
|
'for await(value of f()) {}',
|
|
'for await(value of (x + x)) {}',
|
|
];
|
|
|
|
wrappers.forEach(wrapper => {
|
|
expressions.forEach(exp => {
|
|
checkSyntax(wrapper.start + exp + wrapper.finish);
|
|
});
|
|
})
|
|
})();
|
|
|
|
|
|
(function checkSimpleAsyncGeneratorSyntaxErrorInSloppyMode() {
|
|
checkSyntaxError("var asyncGenFn = function () { for await(const value of foo()) {} }");
|
|
checkSyntaxError("var asyncGenFn = async function () { var arr = () => { for await(const value of foo()) {} } }");
|
|
checkSyntaxError("var asyncGenFn = function* () { for await(const value of foo()) {} }");
|
|
checkSyntaxError("var asyncGenFn = async function* () { var arr = () => { for await(const value of foo()) {} } }");
|
|
checkSyntaxError('var a1 = async function*asyncGenWithName1(){ for await(const value in foo()) {} }');
|
|
checkSyntaxError('var a1 = async function asyncWithName1(){ for await(const value in foo()) {} }');
|
|
checkSyntaxError('var a1 = async function asyncWithName1(){ for await (;;) {} }');
|
|
checkSyntaxError("var a1 = async function asyncWithName1(){ for await (let v = 4;;) {} }");
|
|
checkSyntaxError("var a1 = async function asyncWithName1(){ for await (let v of f();;) {} }");
|
|
checkSyntaxError("var a1 = async function asyncWithName1(){ for await (let v of boo;;) {} }");
|
|
checkSyntaxError("var a1 = async function asyncWithName1(){ for await (let v of boo of) {} }");
|
|
checkSyntaxError("async function asyncWithName1(){ for await (let v of boo in) {} }");
|
|
checkSyntaxError("async function asyncWithName1(){ for await (v in x + x ) {} }");
|
|
})();
|
|
|
|
(function checkSimpleAsyncGeneratorSyntaxErrorInStrictMode() {
|
|
checkSyntaxError("'use strict'; var asyncGenFn = function () { for await(const value of foo()) {} }");
|
|
checkSyntaxError("'use strict'; var asyncGenFn = async function () { var arr = () => { for await(const value of foo()) {} } }");
|
|
checkSyntaxError("'use strict'; var asyncGenFn = function* () { for await(const value of foo()) {} }");
|
|
checkSyntaxError("'use strict'; var asyncGenFn = async function* () { var arr = () => { for await(const value of foo()) {} } }");
|
|
checkSyntaxError("'use strict'; var a1 = async function*asyncGenWithName1(){ for await(const value in foo()) {} }");
|
|
checkSyntaxError("'use strict'; var a1 = async function asyncWithName1(){ for await(const value in foo()) {} }");
|
|
checkSyntaxError("'use strict'; var a1 = async function asyncWithName1(){ for await (;;) {} }");
|
|
checkSyntaxError("'use strict'; var a1 = async function asyncWithName1(){ for await (let v = 4;;) {} }");
|
|
checkSyntaxError("'use strict'; var a1 = async function asyncWithName1(){ for await (let v of f();;) {} }");
|
|
checkSyntaxError("'use strict'; var a1 = async function asyncWithName1(){ for await (let v of boo;;) {} }");
|
|
checkSyntaxError("'use strict'; var a1 = async function asyncWithName1(){ for await (let v of boo of) {} }");
|
|
checkSyntaxError("'use strict'; async function asyncWithName1(){ for await (let v of boo in) {} }");
|
|
checkSyntaxError("'use strict'; async function asyncWithName1(){ for await (v in x + x ) {} }");
|
|
})();
|