Source code

Revision control

Copy as Markdown

Other Tools

// |jit-test| --enable-import-attributes
load(libdir + "match.js");
load(libdir + "asserts.js");
var { Pattern, MatchError } = Match;
program = (elts) => Pattern({
type: "Program",
body: elts
});
expressionStatement = (expression) => Pattern({
type: "ExpressionStatement",
expression: expression
});
assignmentExpression = (left, operator, right) => Pattern({
type: "AssignmentExpression",
operator: operator,
left: left,
right: right
});
ident = (name) => Pattern({
type: "Identifier",
name: name
});
importCall = (ident, args) => Pattern({
type: "CallImport",
ident: ident,
arguments: args
});
objExpr = (elts) => Pattern({
type: "ObjectExpression",
properties: elts
});
property = (key, value) => Pattern({
type: "Property",
kind: "init",
key: key,
value: value,
});
lit = (val) => Pattern({
type: "Literal",
value: val
});
callExpression = (callee, args) => Pattern({
type: "CallExpression",
callee: callee,
arguments: args
});
function parseAsClassicScript(source)
{
return Reflect.parse(source);
}
function parseAsModuleScript(source)
{
return Reflect.parse(source, {target: "module"});
}
for (let parse of [parseAsModuleScript, parseAsClassicScript]) {
program([
expressionStatement(
importCall(
ident("import"),
[
ident("foo")
]
)
)
]).assert(parse("import(foo);"));
program([
expressionStatement(
assignmentExpression(
ident("x"),
"=",
importCall(
ident("import"),
[
ident("foo")
]
)
)
)
]).assert(parse("x = import(foo);"));
if (getRealmConfiguration("importAttributes")) {
program([
expressionStatement(
importCall(
ident("import"),
[
ident("foo"),
objExpr([])
]
)
)
]).assert(parse("import(foo, {});"));
program([
expressionStatement(
importCall(
ident("import"),
[
ident("foo"),
objExpr([
property(
ident("assert"),
objExpr([]
))
])
]
)
)
]).assert(parse("import(foo, { assert: {} });"));
program([
expressionStatement(
importCall(
ident("import"),
[
ident("foo"),
objExpr([
property(
ident("assert"),
objExpr([
property(
ident("type"),
lit('json')
)
]
))
])
]
)
)
]).assert(parse("import(foo, { assert: { type: 'json' } });"));
program([
expressionStatement(
importCall(
ident("import"),
[
ident("foo"),
objExpr([
property(
ident("assert"),
objExpr([
property(
ident("type"),
lit('json')
),
property(
ident("foo"),
lit('bar')
)
]
))
])
]
)
)
]).assert(parse("import(foo, { assert: { type: 'json', foo: 'bar' } });"));
program([
expressionStatement(
importCall(
ident("import"),
[
ident("foo"),
objExpr([
property(
ident("assert"),
objExpr([
property(
ident("type"),
callExpression(ident('getType'), [])
)
]
))
])
]
)
)
]).assert(parse("import(foo, { assert: { type: getType() } });"));
}
}
function assertParseThrowsSyntaxError(source)
{
assertThrowsInstanceOf(() => parseAsClassicScript(source), SyntaxError);
assertThrowsInstanceOf(() => parseAsModuleScript(source), SyntaxError);
}
assertParseThrowsSyntaxError("import");
assertParseThrowsSyntaxError("import(");
assertParseThrowsSyntaxError("import(1,");
assertParseThrowsSyntaxError("x = import");
assertParseThrowsSyntaxError("x = import(");
assertParseThrowsSyntaxError("x = import(1,");
assertParseThrowsSyntaxError("x = import(1, 2");
if (!getRealmConfiguration("importAttributes")) {
assertParseThrowsSyntaxError("import(1, 2");
assertParseThrowsSyntaxError("import(1, 2)");
assertParseThrowsSyntaxError("x = import(1, 2)");
}
else {
assertParseThrowsSyntaxError("import(1, 2, 3)");
}