Nicolò Ribaudo d79b5eeeff
Require decoratorsBeforeExport option for decorators (#8465)
* Require decoratorsBeforeExport option for syntax-decorators

* Also babylon

* Enable test
2018-08-15 09:04:52 +02:00

74 lines
1.9 KiB
JavaScript

import { parse } from "@babel/core";
import syntaxDecorators from "../lib";
function makeParser(code, options) {
return () =>
parse(code, {
babelrc: false,
configFile: false,
plugins: [[syntaxDecorators, options]],
});
}
describe("'legacy' option", function() {
test("must be boolean", function() {
expect(makeParser("", { legacy: "legacy" })).toThrow();
});
test.skip("'legacy': false", function() {
expect(makeParser("({ @dec fn() {} })", { legacy: false })).toThrow();
});
test("'legacy': true", function() {
expect(makeParser("({ @dec fn() {} })", { legacy: true })).not.toThrow();
});
test.skip("defaults to 'false'", function() {
expect(makeParser("({ @dec fn() {} })", {})).toThrow();
});
test("it must be true", function() {
expect(makeParser("", { legacy: false })).toThrow();
});
});
describe("'decoratorsBeforeExport' option", function() {
test.skip("must be boolean", function() {
expect(makeParser("", { decoratorsBeforeExport: "before" })).toThrow();
});
test.skip("is required", function() {
expect(makeParser("", { legacy: false })).toThrow(/decoratorsBeforeExport/);
});
test("is incompatible with legacy", function() {
expect(
makeParser("", { decoratorsBeforeExport: false, legacy: true }),
).toThrow();
});
const BEFORE = "@dec export class Foo {}";
const AFTER = "export @dec class Foo {}";
// These are skipped
run(BEFORE, true, false);
run(AFTER, true, true);
run(BEFORE, false, true);
run(AFTER, false, false);
function run(code, before, throws) {
const name =
(before === undefined ? "default" : before) +
" - decorators " +
(code === BEFORE ? "before" : "after") +
"export";
test.skip(name, function() {
const expectTheParser = expect(
makeParser(code, { decoratorsBeforeExport: before }),
);
throws ? expectTheParser.toThrow() : expectTheParser.not.toThrow();
});
}
});