123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255 |
- import loadConfig from "../lib/config";
- import path from "path";
- describe("@babel/core config loading", () => {
- const FILEPATH = path.join(
- __dirname,
- "fixtures",
- "config-loading",
- "folder",
- "example.js",
- );
- afterEach(() => {
- delete process.env.INVALIDATE_BABELRC;
- delete process.env.INVALIDATE_PRESET1;
- delete process.env.INVALIDATE_PRESET2;
- delete process.env.INVALIDATE_PRESET3;
- delete process.env.INVALIDATE_PLUGIN1;
- delete process.env.INVALIDATE_PLUGIN2;
- delete process.env.INVALIDATE_PLUGIN3;
- delete process.env.INVALIDATE_PLUGIN4;
- delete process.env.INVALIDATE_PLUGIN5;
- delete process.env.INVALIDATE_PLUGIN6;
- });
- function makeOpts(skipProgrammatic = false) {
- return {
- cwd: path.dirname(FILEPATH),
- filename: FILEPATH,
- presets: skipProgrammatic
- ? null
- : [require("./fixtures/config-loading/preset3")],
- plugins: skipProgrammatic
- ? null
- : [require("./fixtures/config-loading/plugin6")],
- };
- }
- describe("config file", () => {
- it("should load and cache the config with plugins and presets", () => {
- const opts = makeOpts();
- const options1 = loadConfig(opts).options;
- expect(options1.plugins.map(p => p.key)).toEqual([
- "plugin1",
- "plugin2",
- "plugin6",
- "plugin5",
- "plugin4",
- "plugin3",
- ]);
- const options2 = loadConfig(opts).options;
- expect(options2.plugins.length).toBe(options1.plugins.length);
- for (let i = 0; i < options2.plugins.length; i++) {
- expect(options2.plugins[i]).toBe(options1.plugins[i]);
- }
- });
- it("should load and cache the config for unique opts objects", () => {
- const options1 = loadConfig(makeOpts(true)).options;
- expect(options1.plugins.map(p => p.key)).toEqual([
- "plugin1",
- "plugin2",
- "plugin4",
- "plugin3",
- ]);
- const options2 = loadConfig(makeOpts(true)).options;
- expect(options2.plugins.length).toBe(options1.plugins.length);
- for (let i = 0; i < options2.plugins.length; i++) {
- expect(options2.plugins[i]).toBe(options1.plugins[i]);
- }
- });
- it("should invalidate config file plugins", () => {
- const opts = makeOpts();
- const options1 = loadConfig(opts).options;
- process.env.INVALIDATE_PLUGIN1 = true;
- const options2 = loadConfig(opts).options;
- expect(options2.plugins.length).toBe(options1.plugins.length);
- for (let i = 0; i < options1.plugins.length; i++) {
- if (i === 0) {
- expect(options2.plugins[i]).not.toBe(options1.plugins[i]);
- } else {
- expect(options2.plugins[i]).toBe(options1.plugins[i]);
- }
- }
- process.env.INVALIDATE_PLUGIN3 = true;
- const options3 = loadConfig(opts).options;
- expect(options3.plugins.length).toBe(options1.plugins.length);
- for (let i = 0; i < options1.plugins.length; i++) {
- if (i === 0 || i === 5) {
- expect(options3.plugins[i]).not.toBe(options1.plugins[i]);
- } else {
- expect(options3.plugins[i]).toBe(options1.plugins[i]);
- }
- }
- });
- it("should invalidate config file presets and their children", () => {
- const opts = makeOpts();
- const options1 = loadConfig(opts).options;
- process.env.INVALIDATE_PRESET1 = true;
- const options2 = loadConfig(opts).options;
- expect(options2.plugins.length).toBe(options1.plugins.length);
- for (let i = 0; i < options1.plugins.length; i++) {
- if (i === 5) {
- expect(options2.plugins[i]).not.toBe(options1.plugins[i]);
- } else {
- expect(options2.plugins[i]).toBe(options1.plugins[i]);
- }
- }
- process.env.INVALIDATE_PRESET2 = true;
- const options3 = loadConfig(opts).options;
- expect(options3.plugins.length).toBe(options1.plugins.length);
- for (let i = 0; i < options1.plugins.length; i++) {
- if (i === 4 || i === 5) {
- expect(options3.plugins[i]).not.toBe(options1.plugins[i]);
- } else {
- expect(options3.plugins[i]).toBe(options1.plugins[i]);
- }
- }
- });
- it("should invalidate the config file and its plugins/presets", () => {
- const opts = makeOpts();
- const options1 = loadConfig(opts).options;
- process.env.INVALIDATE_BABELRC = true;
- const options2 = loadConfig(opts).options;
- expect(options2.plugins.length).toBe(options1.plugins.length);
- for (let i = 0; i < options1.plugins.length; i++) {
- if (i === 0 || i === 1 || i === 4 || i === 5 || i === 6) {
- expect(options2.plugins[i]).not.toBe(options1.plugins[i]);
- } else {
- expect(options2.plugins[i]).toBe(options1.plugins[i]);
- }
- }
- });
- });
- describe("programmatic plugins/presets", () => {
- it("should not invalidate the plugins when given a fresh object", () => {
- const opts = makeOpts();
- const options1 = loadConfig(opts).options;
- const options2 = loadConfig(Object.assign({}, opts)).options;
- expect(options2.plugins.length).toBe(options1.plugins.length);
- for (let i = 0; i < options2.plugins.length; i++) {
- expect(options2.plugins[i]).toBe(options1.plugins[i]);
- }
- });
- it("should invalidate the plugins when given a fresh arrays", () => {
- const opts = makeOpts();
- const options1 = loadConfig(opts).options;
- const options2 = loadConfig({
- ...opts,
- plugins: opts.plugins.slice(),
- }).options;
- expect(options2.plugins.length).toBe(options1.plugins.length);
- for (let i = 0; i < options2.plugins.length; i++) {
- if (i === 2) {
- expect(options2.plugins[i]).not.toBe(options1.plugins[i]);
- } else {
- expect(options2.plugins[i]).toBe(options1.plugins[i]);
- }
- }
- });
- it("should invalidate the presets when given a fresh arrays", () => {
- const opts = makeOpts();
- const options1 = loadConfig(opts).options;
- const options2 = loadConfig({
- ...opts,
- presets: opts.presets.slice(),
- }).options;
- expect(options2.plugins.length).toBe(options1.plugins.length);
- for (let i = 0; i < options2.plugins.length; i++) {
- if (i === 3) {
- expect(options2.plugins[i]).not.toBe(options1.plugins[i]);
- } else {
- expect(options2.plugins[i]).toBe(options1.plugins[i]);
- }
- }
- });
- it("should invalidate the programmatic plugins", () => {
- const opts = makeOpts();
- const options1 = loadConfig(opts).options;
- process.env.INVALIDATE_PLUGIN6 = true;
- const options2 = loadConfig(opts).options;
- expect(options2.plugins.length).toBe(options1.plugins.length);
- for (let i = 0; i < options1.plugins.length; i++) {
- if (i === 2) {
- expect(options2.plugins[i]).not.toBe(options1.plugins[i]);
- } else {
- expect(options2.plugins[i]).toBe(options1.plugins[i]);
- }
- }
- });
- it("should invalidate the programmatic presets and their children", () => {
- const opts = makeOpts();
- const options1 = loadConfig(opts).options;
- process.env.INVALIDATE_PRESET3 = true;
- const options2 = loadConfig(opts).options;
- expect(options2.plugins.length).toBe(options1.plugins.length);
- for (let i = 0; i < options1.plugins.length; i++) {
- if (i === 3) {
- expect(options2.plugins[i]).not.toBe(options1.plugins[i]);
- } else {
- expect(options2.plugins[i]).toBe(options1.plugins[i]);
- }
- }
- });
- });
- });
|