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)
123 lines
5.9 KiB
JavaScript
123 lines
5.9 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(){}');
|
|
checkSyntax('var a2 = async function *asyncGenWithName2(){ yield 11; }');
|
|
checkSyntax('var a3 = async function * asyncGenWithName2(){ await p; yield 11; }');
|
|
checkSyntax('var d1 = async function*(){}');
|
|
checkSyntax('var d2 = async function* (){ yield 11; }');
|
|
checkSyntax('var d3 = async function * (){ await p; yield 11; }');
|
|
checkSyntax('async function* withName1(){ }');
|
|
checkSyntax('async function *withName2(){ yield 11; }');
|
|
checkSyntax('async function * withName3(){ await p; yield 11; }');
|
|
checkSyntax('class A { async * method() { } }');
|
|
checkSyntax('class B { async * method() {yield 11;} }');
|
|
checkSyntax('class C { async * method() {yield 11; await p;} }');
|
|
checkSyntax('class D { async * "method"() {yield 11; await p;} }');
|
|
checkSyntax('class F { async * 0() {yield 11; await p;} }');
|
|
checkSyntax('var obj = { async * method() {yield 11; await p;} }');
|
|
checkSyntax('({ async foo() {} })');
|
|
checkSyntax('({ async : 1 })');
|
|
})();
|
|
|
|
(function checkSimpleAsyncGeneratorStrictMode() {
|
|
checkSyntax('"use strict"; var a1 = async function*asyncGenWithName1(){}');
|
|
checkSyntax('"use strict"; var a2 = async function *asyncGenWithName2(){ yield 11; }');
|
|
checkSyntax('"use strict"; var a3 = async function * asyncGenWithName2(){ await p; yield 11; }');
|
|
checkSyntax('"use strict"; var d1 = async function*(){}');
|
|
checkSyntax('"use strict"; var d2 = async function* (){ yield 11; }');
|
|
checkSyntax('"use strict"; var d3 = async function * (){ await p; yield 11; }');
|
|
checkSyntax('"use strict"; async function* withName1(){ }');
|
|
checkSyntax('"use strict"; async function *withName2(){ yield 11; }');
|
|
checkSyntax('"use strict"; async function * withName3(){ await p; yield 11; }');
|
|
checkSyntax('"use strict"; class A { async * method() { } }');
|
|
checkSyntax('"use strict"; class B { async * method() {yield 11;} }');
|
|
checkSyntax('"use strict"; class C { async * method() {yield 11; await p;} }');
|
|
checkSyntax('"use strict"; class D { async * "method"() {yield 11; await p;} }');
|
|
checkSyntax('"use strict"; class E { async * ["calc" + "ulate"]() {yield 11; await p;} }');
|
|
checkSyntax('"use strict"; class F { async * 0() {yield 11; await p;} }');
|
|
checkSyntax('"use strict"; var obj = { async * method() {yield 11; await p;} }');
|
|
checkSyntax('"use strict"; ({ async foo() {} })');
|
|
checkSyntax('"use strict"; ({ async : 1 })');
|
|
})();
|
|
|
|
|
|
(function checkNestedAsyncGenerators() {
|
|
var wrappers = [
|
|
{start: 'var a1 = async function*asyncGenWithName1(){', finish: '}'},
|
|
{start: 'async function*asyncGenWithName2(){ ', finish: '}'},
|
|
{start: 'class A { async * method() { ', finish: ' } }'}
|
|
];
|
|
|
|
expressions = [
|
|
'await 10; yield 11; return 12;',
|
|
'var async = 10; yield async;',
|
|
'var async = 10; await async;',
|
|
'var async = 10; return async;',
|
|
'var async = function() {}; return async;',
|
|
'var async = function() {}; return async();',
|
|
];
|
|
|
|
wrappers.forEach(wrapper => {
|
|
expressions.forEach(exp => {
|
|
checkSyntax(wrapper.start + exp + wrapper.finish);
|
|
});
|
|
})
|
|
})();
|
|
|
|
|
|
(function checkSimpleAsyncGeneratorSyntaxErrorInSloppyMode() {
|
|
checkSyntaxError("var asyncGenFn = async function *await() {}");
|
|
checkSyntaxError("var asyncGenFn = async function*(await) {}");
|
|
checkSyntaxError("var asyncGenFn = async function *withName(await) {}");
|
|
checkSyntaxError("async function *asyncGeneratorFunctionDeclaration(await) {}");
|
|
checkSyntaxError("var asyncGenFn = *async function () {}");
|
|
checkSyntaxError("var asyncGenFn = *async function withName() {}");
|
|
checkSyntaxError("*async function asyncGeneratorFunctionDeclaration(await) {}");
|
|
checkSyntaxError("var obj = { *async asyncGeneratorMethod() {} };");
|
|
checkSyntaxError("var obj = { async asyncGeneratorMethod*() {} };");
|
|
checkSyntaxError("class A { get async* ttt() {} }");
|
|
checkSyntaxError("class B { get *async ttt() {} }");
|
|
checkSyntaxError('({ async = 1 })');
|
|
})();
|
|
|
|
(function checkSimpleAsyncGeneratorSyntaxErrorInStrictMode() {
|
|
checkSyntaxError("'use strict'; var asyncGenFn = async function *await() {}");
|
|
checkSyntaxError("'use strict'; var asyncGenFn = async function*(await) {}");
|
|
checkSyntaxError("'use strict'; var asyncGenFn = async function *withName(await) {}");
|
|
checkSyntaxError("'use strict'; async function *asyncGeneratorFunctionDeclaration(await) {}");
|
|
checkSyntaxError("'use strict'; var asyncGenFn = *async function () {}");
|
|
checkSyntaxError("'use strict'; var asyncGenFn = *async function withName() {}");
|
|
checkSyntaxError("'use strict'; *async function asyncGeneratorFunctionDeclaration(await) {}");
|
|
checkSyntaxError("'use strict'; var obj = { *async asyncGeneratorMethod() {} };");
|
|
checkSyntaxError("'use strict'; var obj = { async asyncGeneratorMethod*() {} };");
|
|
checkSyntaxError("'use strict'; class A { get async* ttt() {} }");
|
|
checkSyntaxError("'use strict'; class B { get *async ttt() {} }");
|
|
checkSyntaxError("'use strict'; ({ async = 1 })");
|
|
})();
|