/* eslint-disable no-template-curly-in-string */ const { expect } = require('chai'); const { executeBabel, baseConfig } = require('./helpers.js'); const testConfig = { ...baseConfig, }; describe('babel-plugin-extend-docs', () => { it('replaces src class imports (1)', () => { const code = `import { LionInput } from '@lion/input';`; const output = `import { WolfInput } from "wolf-web/input";`; expect(executeBabel(code, testConfig)).to.equal(output); }); it('renames classes everywhere', () => { const code = [ `import { LionInput } from '@lion/input';`, `class Foo extends LionInput {}`, ].join('\n'); const output = [ `import { WolfInput } from "wolf-web/input";`, '', `class Foo extends WolfInput {}`, ].join('\n'); expect(executeBabel(code, testConfig)).to.equal(output); }); it('replaces src class imports (2)', () => { const code = [ `import someDefaultHelper, { LionInput, someHelper } from '@lion/input';`, `import { LionButton } from '@lion/button';`, ].join('\n'); const output = [ `import someDefaultHelper, { someHelper } from "@lion/input";`, `import { WolfInput } from "wolf-web/input";`, `import { WolfButton } from "wolf-web/button";`, ].join('\n'); expect(executeBabel(code, testConfig)).to.equal(output); }); it('replaces src class imports (3)', () => { const code = `import { LionInput, LionFoo, LionBar, someHelper } from '@lion/input';`; const output = [ `import { WolfInput } from "wolf-web/input";`, `import { WolfFoo } from "./index.js";`, `import { WolfBar } from "./somewhere-else.js";`, `import { someHelper } from "@lion/input";`, ].join('\n'); const config = { ...testConfig, changes: [ ...baseConfig.changes, { description: 'LionFoo', variable: { from: 'LionFoo', to: 'WolfFoo', paths: [ { from: '@lion/input', to: './index.js', }, ], }, }, { description: 'LionBar', variable: { from: 'LionBar', to: 'WolfBar', paths: [ { from: '@lion/input', to: './somewhere-else.js', }, ], }, }, ], }; expect(executeBabel(code, config)).to.equal(output); }); it('replaces local src class imports (6)', () => { const code = ` import { localize } from '@lion/localize'; import { LionInput } from '@lion/input'; `; const output = [ `import { localize } from "wolf-web/localize";`, `import { WolfInput } from "wolf-web/input";`, ].join('\n'); expect(executeBabel(code, testConfig)).to.equal(output); }); it('replaces `@lion` class imports', () => { const code = `import { LionInput } from '@lion/input';`; const output = `import { WolfInput } from "wolf-web/input";`; expect(executeBabel(code, testConfig)).to.equal(output); }); it('does NOT replace imports not in the config', () => { const code = `import { FooInput } from '@lion/calendar';`; const output = `import { FooInput } from "@lion/calendar";`; expect(executeBabel(code, testConfig)).to.equal(output); }); it('replaces `@lion` tag imports', () => { const code = `import '@lion/input/define';`; const output = `import "#input/define";`; expect(executeBabel(code, testConfig)).to.equal(output); }); it('replaces tags in function occurrences', () => { const code = [ 'export const main = () => html`', ` `, '`;', ].join('\n'); const output = [ 'export const main = () => html`', ` `, '`;', ].join('\n'); expect(executeBabel(code, testConfig)).to.equal(output); }); it("replaces tags also if using ${{key: 'value'}}", () => { const code = [ 'export const forceLocale = () => html`', ' ', '`;', ].join('\n'); const output = [ 'export const forceLocale = () => html`', ' ', '`;', ].join('\n'); expect(executeBabel(code, testConfig)).to.equal(output); }); it('will not touch content of tags', () => { const code = [ 'export const main = () => html`', ` `, ' ', '`;', ].join('\n'); const output = [ 'export const main = () => html`', ` `, ' ', '`;', ].join('\n'); expect(executeBabel(code, testConfig)).to.equal(output); }); it('will not replace opening tags that are not the exact same tag name', () => { const code = [ 'export const main = () => html`', ` `, ' ', ' ', '`;', ].join('\n'); const output = [ 'export const main = () => html`', ` `, ' ', ' ', '`;', ].join('\n'); expect(executeBabel(code, testConfig)).to.equal(output); }); it('will not replace closing tags that are not the exact same tag name', () => { const code = [ 'export const main = () => html`', ` `, ' ', '`;', ].join('\n'); const output = [ 'export const main = () => html`', ` `, ' ', '`;', ].join('\n'); expect(executeBabel(code, testConfig)).to.equal(output); }); it('replaces nested tags in function occurrences', () => { const code = [ 'export const main = () => html`', ' ', ' ${html`', ' ', ' `}', ' ', '`;', ].join('\n'); const output = [ 'export const main = () => html`', ' ', ' ${html`', ' ', ' `}', ' ', '`;', ].join('\n'); expect(executeBabel(code, testConfig)).to.equal(output); }); it('replaces tags in classes occurrences', () => { const code = [ 'class Foo extends LitElement {', ' render() {', ' return html`', ' ', '

light dom

', ' ', '
', ' `;', ' }', '}', ].join('\n'); const output = [ 'class Foo extends LitElement {', ' render() {', ' return html`', ' ', '

light dom

', ' ', '
', ' `;', ' }', '', // babel puts an empty line here? '}', ].join('\n'); expect(executeBabel(code, testConfig)).to.equal(output); }); // nice to have it.skip("doesn't care about namespace imports", () => { const code = `import * as all from '@lion/input';`; const output = ` import { notRenameHelper } from "@lion/input"; import { WolfInput } from "wolf-web/input"; const all = { LionInput: WolfInput, someHelper }; `; expect(executeBabel(code, testConfig)).to.equal(output); }); });