Source code

Revision control

Copy as Markdown

Other Tools

/*
* Any copyright is dedicated to the Public Domain.
*/
//-----------------------------------------------------------------------------
var BUGNUMBER = 1204027;
var summary =
"Escape sequences aren't allowed in bolded grammar tokens (that is, in " +
"keywords, possibly contextual keywords)";
print(BUGNUMBER + ": " + summary);
/**************
* BEGIN TEST *
**************/
var badModules =
[
"\\u0069mport f from 'g'",
"i\\u006dport g from 'h'",
"import * \\u0061s foo",
"import {} fro\\u006d 'bar'",
"import { x \\u0061s y } from 'baz'",
"\\u0065xport function f() {}",
"e\\u0078port function g() {}",
"export * fro\\u006d 'fnord'",
"export d\\u0065fault var x = 3;",
"export { q } fro\\u006d 'qSupplier';",
];
if (typeof parseModule === "function")
{
for (var module of badModules)
{
assertThrowsInstanceOf(() => parseModule(module), SyntaxError,
"bad behavior for: " + module);
}
}
if (typeof Reflect.parse === "function")
{
var twoStatementAST =
Reflect.parse(`let x = 0;
export { x } /* ASI should trigger here */
fro\\u006D`,
{ target: "module" });
var statements = twoStatementAST.body;
assertEq(statements.length, 3,
"should have two items in the module, not one ExportDeclaration");
assertEq(statements[0].type, "VariableDeclaration");
assertEq(statements[1].type, "ExportDeclaration");
assertEq(statements[2].type, "ExpressionStatement");
assertEq(statements[2].expression.name, "from");
var oneStatementAST =
Reflect.parse(`export { x } /* no ASI here */
from 'foo'`,
{ target: "module" });
assertEq(oneStatementAST.body.length, 1);
assertEq(oneStatementAST.body[0].type, "ExportDeclaration");
twoStatementAST =
Reflect.parse(`export { x } from "bar"
/bar/g`,
{ target: "module" });
statements = twoStatementAST.body;
assertEq(statements.length, 2,
"should have two items in the module, not one ExportDeclaration");
assertEq(statements[0].type, "ExportDeclaration");
assertEq(statements[1].type, "ExpressionStatement");
assertEq(statements[1].expression.type, "Literal");
assertEq(statements[1].expression.value.toString(), "/bar/g");
twoStatementAST =
Reflect.parse(`export * from "bar"
/bar/g`,
{ target: "module" });
statements = twoStatementAST.body;
assertEq(statements.length, 2,
"should have two items in the module, not one ExportDeclaration");
assertEq(statements[0].type, "ExportDeclaration");
assertEq(statements[1].type, "ExpressionStatement");
assertEq(statements[1].expression.type, "Literal");
assertEq(statements[1].expression.value.toString(), "/bar/g");
}
/******************************************************************************/
if (typeof reportCompare === "function")
reportCompare(true, true);
print("Tests complete");