blob: 01855f4e25f5426c487dd70472f8589108f397d8 [file] [log] [blame]
description("Tests for ES6 arrow function syntax errors");
shouldThrow('=>{}');
function checkStatement(statement) {
var unexpectedSymbols = [ "",
"*", "/", "%" , "+", "-" ,
"<<", ">>", ">>>" ,
"<", ">", "<=", ">=", "instanceof", "in" ,
"==", "!=", "===", "!==",
"&" , "^" , "|" ,
"&&" , "||", ";" , ","
];
for (var i = 0; i < unexpectedSymbols.length; i++) {
shouldThrow(statement + unexpectedSymbols[i]);
}
}
checkStatement('x=>');
checkStatement('x=>{');
shouldThrow('x=>}');
checkStatement('var y = x=>');
checkStatement('var y = x=>{');
shouldThrow('var y = x=>}');
shouldThrow('var t = x=>x+1; =>{}');
shouldThrow('[=>x+1]');
shouldThrow('[x=>x+1, =>x+1]');
shouldThrow('var f=>x+1;');
shouldThrow('var x, y=>y+1;');
shouldThrow('debug(=>x+1)');
shouldThrow('debug("xyz", =>x+1)');
shouldThrow("var af1=y\n=>y+1");
shouldThrow("var af2=(y)\n=>y+1");
shouldThrow("var af3=(x, y)\n=>y+1");
shouldThrow('([a, b] => a + b)(["a_", "b_"])' );
shouldThrow('({a, b} => a + b)({a:"a_", b:"b_"})');
shouldThrow('({c:a,d:b} => a + b)({c:"a_", d:"b_"})');
shouldThrow('({c:b,d:a} => a + b)({c:"a_", d:"b_"})');
shouldThrow('var arr1 = [a, b] => a + b;');
shouldThrow('var arr2 = {a, b} => a + b;');
shouldThrow('var arr3 = {c:a,d:b} => a + b;');
shouldThrow('var arr3 = {c:b,d:a} => a + b;');
shouldThrow('var arr4 = () => { super(); };', '"SyntaxError: super is not valid in this context."');
shouldThrow('var arr4 = () => { super; };', '"SyntaxError: super is not valid in this context."');
shouldThrow('var arr5 = () => { super.getValue(); };', '"SyntaxError: super is not valid in this context."');
shouldThrow('var arr6 = () => super();', '"SyntaxError: super is not valid in this context."');
shouldThrow('var arr7 = () => super;', '"SyntaxError: super is not valid in this context."');
shouldThrow('var arr8 = () => super.getValue();', '"SyntaxError: super is not valid in this context."');
shouldThrow('class A { constructor() { function a () { return () => { super(); };}}', '"SyntaxError: super is not valid in this context."');
shouldThrow('class B { constructor() { function b () { return () => { super; }; }; }}', '"SyntaxError: super is not valid in this context."');
shouldThrow('class C { constructor() { function c () { return () => { super.getValue(); };}}', '"SyntaxError: super is not valid in this context."');
shouldThrow('class D { constructor() { function a () { return () => super(); }}', '"SyntaxError: super is not valid in this context."');
shouldThrow('class E { constructor() { function b () { return () => super; }; }}', '"SyntaxError: super is not valid in this context."');
shouldThrow('class F { constructor() { function c () { return () => super.getValue(); }}', '"SyntaxError: super is not valid in this context."');
shouldThrow('class G {}; class G2 extends G { getValue() { function c () { return () => super.getValue(); }}', '"SyntaxError: super is not valid in this context."');
shouldThrow('class H {}; class H2 extends H { method() { function *gen() { let arr = () => super.getValue(); arr(); } } }', '"SyntaxError: super is not valid in this context."');
var successfullyParsed = true;