import { svgToURL } from '../lib/svg/url'; import { getIconCSS, getIconContentCSS } from '../lib/css/icon'; import type { IconifyIcon } from '@iconify/types'; describe('Testing CSS for icon', () => { test('Background', () => { const icon: IconifyIcon = { body: '', width: 24, height: 16, }; const expectedURL = svgToURL( `${icon.body}` ); expect( getIconCSS(icon, { format: 'expanded', }) ).toBe(`.icon { display: inline-block; width: 1.5em; height: 1em; background-repeat: no-repeat; background-size: 100% 100%; background-image: ${expectedURL}; } `); }); test('Background with transformations', () => { const icon: IconifyIcon = { body: '', rotate: 1, width: 24, height: 16, }; const expectedURL = svgToURL( `${icon.body}` ); expect( getIconCSS(icon, { format: 'expanded', }) ).toBe(`.icon { display: inline-block; width: 0.67em; height: 1em; background-repeat: no-repeat; background-size: 100% 100%; background-image: ${expectedURL}; } `); }); test('Background with options', () => { const icon: IconifyIcon = { body: '', width: 24, height: 16, }; const expectedURL = svgToURL( `${icon.body.replace( 'f80', 'fff' )}` ); expect( getIconCSS(icon, { iconSelector: '.test-icon:after', pseudoSelector: true, varName: 'svg', forceSquare: true, format: 'expanded', rules: { visibility: 'visible', }, customise: (content) => content.replace('f80', 'fff'), }) ).toBe(`.test-icon:after { visibility: visible; display: inline-block; width: 1em; height: 1em; content: ''; background-repeat: no-repeat; background-size: 100% 100%; background-image: ${expectedURL}; } `); }); test('Mask', () => { const icon: IconifyIcon = { body: '', }; const expectedURL = svgToURL( `${icon.body.replace( /currentColor/g, 'black' )}` ); expect( getIconCSS(icon, { format: 'expanded', }) ).toBe(`.icon { display: inline-block; width: 1em; height: 1em; background-color: currentColor; -webkit-mask-image: var(--svg); mask-image: var(--svg); -webkit-mask-repeat: no-repeat; mask-repeat: no-repeat; -webkit-mask-size: 100% 100%; mask-size: 100% 100%; --svg: ${expectedURL}; } `); }); test('Change color', () => { const icon: IconifyIcon = { body: '', }; const expectedURL = svgToURL( `${icon.body.replace( /currentColor/g, 'purple' )}` ); // Use color option expect( getIconCSS(icon, { format: 'expanded', color: 'purple', }) ).toBe(`.icon { display: inline-block; width: 1em; height: 1em; background-repeat: no-repeat; background-size: 100% 100%; background-image: ${expectedURL}; } `); // Use customise option expect( getIconCSS(icon, { format: 'expanded', customise: (content) => content.replace(/currentColor/g, 'purple'), }) ).toBe(`.icon { display: inline-block; width: 1em; height: 1em; background-repeat: no-repeat; background-size: 100% 100%; background-image: ${expectedURL}; } `); }); test('Mask with options', () => { const icon: IconifyIcon = { body: '', }; const expectedURL = svgToURL( `${icon.body}` ); expect( getIconCSS(icon, { format: 'expanded', varName: null, mode: 'mask', }) ).toBe(`.icon { display: inline-block; width: 1em; height: 1em; background-color: currentColor; -webkit-mask-repeat: no-repeat; mask-repeat: no-repeat; -webkit-mask-size: 100% 100%; mask-size: 100% 100%; -webkit-mask-image: ${expectedURL}; mask-image: ${expectedURL}; } `); }); test('Content', () => { const icon: IconifyIcon = { body: '', width: 24, height: 16, }; const expectedURL = svgToURL( `${icon.body}` ); expect( getIconContentCSS(icon, { height: 32, format: 'expanded', }) ).toBe(`.icon::after { content: ${expectedURL}; } `); }); test('Content with options', () => { const icon: IconifyIcon = { body: '', }; const expectedURL = svgToURL( `${icon.body.replace( /currentColor/g, 'purple' )}` ); expect( getIconContentCSS(icon, { width: 32, height: 24, format: 'expanded', color: 'purple', iconSelector: '.test-icon::before', rules: { visibility: 'visible', }, }) ).toBe(`.test-icon::before { visibility: visible; content: ${expectedURL}; } `); }); test('Transformations with getIconContentCSS', () => { const icon: IconifyIcon = { body: '', hFlip: true, }; const expectedURL = svgToURL( `${icon.body.replace( /currentColor/g, 'black' )}` ); expect( getIconContentCSS(icon, { height: 24, format: 'expanded', iconSelector: '.test-icon::before', }) ).toBe(`.test-icon::before { content: ${expectedURL}; } `); }); });