checkModuleSyntax(String.raw` import "Cocoa"; `); // Examples in 15.2.1.16 // http://www.ecma-international.org/ecma-262/6.0/#sec-source-text-module-records checkModuleSyntax(String.raw` import v from "mod"; `); checkModuleSyntax(String.raw` import * as ns from "mod"; `); checkModuleSyntax(String.raw` import {x} from "mod"; `); checkModuleSyntax(String.raw` import {x,} from "mod"; `); checkModuleSyntax(String.raw` import {} from "mod"; `); checkModuleSyntax(String.raw` import {x as v} from "mod"; `); checkModuleSyntax(String.raw` import "mod"; `); checkModuleSyntax(String.raw` export var v; `); checkModuleSyntax(String.raw` export default function f(){}; `); checkModuleSyntax(String.raw` export default function(){}; `); checkModuleSyntax(String.raw` export default 42; `); checkModuleSyntax(String.raw` const x = 20; export {x}; `); checkModuleSyntax(String.raw` const v = 20; export {v as x}; `); checkModuleSyntax(String.raw` export {x} from "mod"; `); checkModuleSyntax(String.raw` export {v as x} from "mod"; `); checkModuleSyntax(String.raw` export * from "mod"; `); // semicolon is not needed. checkModuleSyntax(String.raw` export default function () { } 40; `); checkModuleSyntax(String.raw` export default class { } 40; `); checkModuleSyntax(String.raw` export default function Cappuccino() { } 40 `); checkModuleSyntax(String.raw` export default class Cappuccino { } 40 `); checkModuleSyntax(String.raw` import a, { b as c } from "Cocoa" import d, { e, f, g as h } from "Cappuccino" import { } from "Cappuccino" import i, * as j from "Cappuccino" `); checkModuleSyntax(String.raw` import a, { } from "Cappuccino" `); checkModuleSyntax(String.raw` import a, { b, } from "Cappuccino" `); checkModuleSyntax(String.raw` import * as from from "Matcha" import * as as from "Cocoa" `); checkModuleSyntax(String.raw` import { default as module } from "Cocoa" `); checkModuleSyntax(String.raw` export * from "Cocoa" `); checkModuleSyntax(String.raw` export { } from "Cocoa" `); checkModuleSyntax(String.raw` export { a } from "Cocoa" `); checkModuleSyntax(String.raw` export { a as b } from "Cocoa" `); checkModuleSyntax(String.raw` export { a, b } from "Cocoa" `); checkModuleSyntax(String.raw` export { a, c as d, b } let a, c, b; `); checkModuleSyntax(String.raw` export { } `); checkModuleSyntax(String.raw` export { a } let a; `); checkModuleSyntax(String.raw` export { a, } let a; `); checkModuleSyntax(String.raw` var a = 20; export { a as b } `); checkModuleSyntax(String.raw` export { a, b } var a, b = 40; `); checkModuleSyntax(String.raw` export { a, c as d, b } let a, c, b; `); checkModuleSyntax(String.raw` export var a; `); checkModuleSyntax(String.raw` export var a, b, c = 20; `); checkModuleSyntax(String.raw` export var a, { b, c } = obj, d = 20; `); checkModuleSyntax(String.raw` export const a = 20; `); checkModuleSyntax(String.raw` export const [b, ...a] = obj; `); checkModuleSyntax(String.raw` export const {b, c: d} = obj; `); checkModuleSyntax(String.raw` export let a; `); checkModuleSyntax(String.raw` export let a = 20; `); checkModuleSyntax(String.raw` export let a = 20, b = 30; `); checkModuleSyntax(String.raw` export let [b, ...a] = obj; `); checkModuleSyntax(String.raw` export let {b, c: d} = obj; `); checkModuleSyntax(String.raw` export function Cocoa() { } `); checkModuleSyntax(String.raw` export class Cocoa { } `); checkModuleSyntax(String.raw` export class Cocoa extends Drink { } `); checkModuleSyntax(String.raw` export default function Cocoa() { } `); checkModuleSyntax(String.raw` export default function () { } `); checkModuleSyntax(String.raw` export default class Cocoa { } `); checkModuleSyntax(String.raw` export default class { } `); checkModuleSyntax(String.raw` export default class Cocoa extends Drink { } `); checkModuleSyntax(String.raw` export default class extends Drink { } `); checkModuleSyntax(String.raw` export default 20; `); checkModuleSyntax(String.raw` export default "Cocoa"; `); checkModuleSyntax(String.raw` export default 20 + 30; `); checkModuleSyntax(String.raw` export default call(); `); checkModuleSyntax(String.raw` export { default } from "Cocoa" `); checkModuleSyntax(String.raw` export { enum } from "Cocoa" `); checkModuleSyntax(String.raw` export { default as default } from "Cocoa" `); checkModuleSyntax(String.raw` export { enum as enum } from "Cocoa" `); checkModuleSyntax(String.raw` export { binding as default } let binding = 20; `); checkModuleSyntax(String.raw` export { binding as enum } var binding = 40; `); checkModuleSyntax(String.raw` export { binding as for } const binding = 40; `); // --------------- other --------------------- checkModuleSyntax(String.raw` let i = 20; `); checkModuleSyntax(String.raw` const i = 20; `);