import { promises as fs } from 'fs'; import { getCustomIcon } from '../lib'; import type { IconifyLoaderOptions } from '../lib'; const fixturesDir = './tests/fixtures'; describe('Testing getCustomIcon', () => { test('CustomIconLoader', async () => { const svg = await fs.readFile(fixturesDir + '/circle.svg', 'utf8'); const result = await getCustomIcon(() => svg, 'a', 'b'); expect(svg).toEqual(result); }); test('CustomIconLoader without xmlns', async () => { const svg = ''; const result = await getCustomIcon(() => svg, 'a', 'b', { addXmlNs: true, }); expect(result).toEqual( '' ); }); test('CustomIconLoader should apply trim', async () => { const svg = ` `; const result = await getCustomIcon(() => svg, 'a', 'b', { customizations: { trimCustomSvg: true }, }); expect(result).toEqual( '' ); }); test("CustomIconLoader with transform: scale/width/height shouldn't take effect", async () => { const svg = await fs.readFile(fixturesDir + '/circle.svg', 'utf8'); const options: IconifyLoaderOptions = { scale: 2, customizations: { additionalProps: { width: '4em', height: '4em', }, transform(icon) { return icon.replace( ' svg, 'a', 'b', options); expect(result && result.indexOf('width="1em"') > -1).toBeTruthy(); expect(result && result.indexOf('height="1em"') > -1).toBeTruthy(); expect(options.usedProps).toBeTruthy(); const usedProps = options.usedProps as Record; expect(usedProps).toHaveProperty('width'); expect(usedProps).toHaveProperty('height'); expect(usedProps.width).toEqual('4em'); expect(usedProps.height).toEqual('4em'); }); test('Icon with XML heading', async () => { // Intercept console.warn let warned = false; const warn = console.warn; console.warn = (/*...args*/) => { // warn.apply(this, args); warned = true; }; const svg = await fs.readFile(fixturesDir + '/1f3eb.svg', 'utf8'); const result = await getCustomIcon(() => svg, 'a', 'b'); // Restore console.warn console.warn = warn; expect(svg).toEqual(result); expect(warned).toEqual(true); }); });