123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201 |
- import { loadOptions as loadOptionsOrig } from "../lib";
- import path from "path";
- function loadOptions(opts) {
- return loadOptionsOrig({
- cwd: __dirname,
- ...opts,
- });
- }
- describe("option-manager", () => {
- it("throws for babel 5 plugin", () => {
- return expect(() => {
- loadOptions({
- plugins: [({ Plugin }) => new Plugin("object-assign", {})],
- });
- }).toThrow(/Babel 5 plugin is being run with an unsupported Babel/);
- });
- describe("config plugin/preset flattening and overriding", () => {
- function makePlugin() {
- const calls = [];
- const plugin = (api, opts) => {
- calls.push(opts);
- return {};
- };
- return { plugin, calls };
- }
- it("should throw if a plugin is repeated", () => {
- const { calls, plugin } = makePlugin();
- expect(() => {
- loadOptions({
- plugins: [plugin, plugin],
- });
- }).toThrow(/Duplicate plugin\/preset detected/);
- expect(calls).toEqual([]);
- });
- it("should not throw if a repeated plugin has a different name", () => {
- const { calls: calls1, plugin: plugin1 } = makePlugin();
- const { calls: calls2, plugin: plugin2 } = makePlugin();
- loadOptions({
- plugins: [[plugin1, { arg: 1 }], [plugin2, { arg: 2 }, "some-name"]],
- });
- expect(calls1).toEqual([{ arg: 1 }]);
- expect(calls2).toEqual([{ arg: 2 }]);
- });
- it("should merge .env[] plugins with parent presets", () => {
- const { calls: calls1, plugin: plugin1 } = makePlugin();
- const { calls: calls2, plugin: plugin2 } = makePlugin();
- loadOptions({
- envName: "test",
- plugins: [[plugin1, { arg: 1 }]],
- env: {
- test: {
- plugins: [[plugin1, { arg: 3 }], [plugin2, { arg: 2 }]],
- },
- },
- });
- expect(calls1).toEqual([{ arg: 3 }]);
- expect(calls2).toEqual([{ arg: 2 }]);
- });
- it("should throw if a preset is repeated", () => {
- const { calls, plugin: preset } = makePlugin();
- expect(() => {
- loadOptions({
- presets: [preset, preset],
- }).toThrow(/Duplicate plugin\/preset detected/);
- });
- expect(calls).toEqual([]);
- });
- it("should not throw if a repeated preset has a different name", () => {
- const { calls: calls1, plugin: preset1 } = makePlugin();
- const { calls: calls2, plugin: preset2 } = makePlugin();
- loadOptions({
- presets: [[preset1, { arg: 1 }], [preset2, { arg: 2 }, "some-name"]],
- });
- expect(calls1).toEqual([{ arg: 1 }]);
- expect(calls2).toEqual([{ arg: 2 }]);
- });
- it("should merge .env[] presets with parent presets", () => {
- const { calls: calls1, plugin: preset1 } = makePlugin();
- const { calls: calls2, plugin: preset2 } = makePlugin();
- loadOptions({
- envName: "test",
- presets: [[preset1, { arg: 1 }]],
- env: {
- test: {
- presets: [[preset1, { arg: 3 }], [preset2, { arg: 2 }]],
- },
- },
- });
- expect(calls1).toEqual([{ arg: 3 }]);
- expect(calls2).toEqual([{ arg: 2 }]);
- });
- it("should not merge .env[] presets with parent presets when passPerPreset", () => {
- const { calls: calls1, plugin: preset1 } = makePlugin();
- const { calls: calls2, plugin: preset2 } = makePlugin();
- loadOptions({
- envName: "test",
- passPerPreset: true,
- presets: [[preset1, { arg: 1 }]],
- env: {
- test: {
- presets: [[preset1, { arg: 3 }], [preset2, { arg: 2 }]],
- },
- },
- });
- expect(calls1).toEqual([{ arg: 1 }, { arg: 3 }]);
- expect(calls2).toEqual([{ arg: 2 }]);
- });
- });
- describe("mergeOptions", () => {
- it("throws for removed babel 5 options", () => {
- return expect(() => {
- loadOptions({
- randomOption: true,
- });
- }).toThrow(/Unknown option: .randomOption/);
- });
- it("throws for removed babel 5 options", () => {
- return expect(() => {
- loadOptions({
- auxiliaryComment: true,
- blacklist: true,
- });
- }).toThrow(
- // eslint-disable-next-line max-len
- /Using removed Babel 5 option: .auxiliaryComment - Use `auxiliaryCommentBefore` or `auxiliaryCommentAfter`/,
- );
- });
- it("throws for resolved but erroring preset", () => {
- return expect(() => {
- loadOptions({
- presets: [
- path.join(__dirname, "fixtures/option-manager/not-a-preset"),
- ],
- });
- }).toThrow(
- /While processing: .*option-manager(?:\/|\\\\)not-a-preset\.js/,
- );
- });
- });
- describe("presets", function() {
- function presetTest(name) {
- it(name, function() {
- const options = loadOptions({
- presets: [
- path.join(__dirname, "fixtures/option-manager/presets", name),
- ],
- });
- expect(Array.isArray(options.plugins)).toBe(true);
- expect(options.plugins).toHaveLength(1);
- expect(options.presets).toHaveLength(0);
- });
- }
- function presetThrowsTest(name, msg) {
- it(name, function() {
- expect(() =>
- loadOptions({
- presets: [
- path.join(__dirname, "fixtures/option-manager/presets", name),
- ],
- }),
- ).toThrow(msg);
- });
- }
- presetTest("es5_function");
- presetTest("es5_object");
- presetTest("es2015_default_function");
- presetTest("es2015_default_object");
- presetThrowsTest(
- "es2015_named",
- /Must export a default export when using ES6 modules/,
- );
- presetThrowsTest("es2015_invalid", /Unsupported format: string/);
- presetThrowsTest("es5_invalid", /Unsupported format: string/);
- });
- });
|