* New setup for new NPM package * Add build scripts for dist * Add introduction readme * Refactor names * update package.json * remove log * rename variable * Factoring * Improve optimize script * Add eslint config * Eslint fixes * rename import * Move packeges * Setup rollup and build progress * Refactor scripts * fix lint error * remove lint disabler * Bring back old libraries * add indentation * reset packages directory * remove vscode setting files * 0.1.0-alpha.0 * new version * 0.1.0-alpha.1 * Fix build process * Add create element to the entry file * update version number * publish new alhpa version * fixing bugs * Add jest and tests * replace with XML createElement * set new version * Fix svg generation * Add tests for main library * Update docs * Adjust tests and selectors * update the spec * Update README.md * Update README.md * Update README.md * update version * Update README.md * Move function to helpers file * rename license, package and readme * Fix build files * rename packages Co-authored-by: Eric Fennis <eric.fennis@endurance.com>
60 lines
1.5 KiB
JavaScript
60 lines
1.5 KiB
JavaScript
import * as icons from './icons';
|
|
import { createIcons } from '../src/lucide';
|
|
import fs from 'fs';
|
|
import path from 'path';
|
|
import { minify } from 'html-minifier';
|
|
|
|
const ICONS_DIR = path.resolve(__dirname, '../icons');
|
|
|
|
const getOriginalSvg = (iconName) => {
|
|
const svgContent = fs.readFileSync(path.join(ICONS_DIR, `${iconName}.svg`), 'utf8');
|
|
|
|
return minify(svgContent, { collapseWhitespace: true, keepClosingSlash: true, });
|
|
};
|
|
|
|
describe('createIcons', () => {
|
|
it('should read elements from DOM and replace it with icons', () => {
|
|
document.body.innerHTML = `<i icon-name="volume-2"></i>`;
|
|
|
|
createIcons({icons});
|
|
|
|
const svg = getOriginalSvg('volume-2');
|
|
expect(document.body.innerHTML).toMatchSnapshot()
|
|
});
|
|
|
|
it('should customize the name attribute', () => {
|
|
document.body.innerHTML = `<i custom-name="volume-2"></i>`;
|
|
|
|
createIcons({
|
|
icons,
|
|
nameAttr: 'custom-name'
|
|
});
|
|
|
|
const hasSvg = !!document.querySelector('svg');
|
|
|
|
expect(hasSvg).toBeTruthy()
|
|
});
|
|
|
|
it('should add custom attributes', () => {
|
|
document.body.innerHTML = `<i icon-name="volume-2"></i>`;
|
|
|
|
const attrs = {
|
|
class: 'icon custom-class',
|
|
fill: 'black',
|
|
};
|
|
|
|
createIcons({ icons, attrs });
|
|
|
|
const element = document.querySelector('svg');
|
|
const attributes = element.getAttributeNames();
|
|
|
|
const attributesAndValues = attributes.reduce((acc, item) => {
|
|
acc[item] = element.getAttribute(item);
|
|
|
|
return acc;
|
|
},{})
|
|
|
|
expect(attributesAndValues).toEqual(expect.objectContaining(attrs));
|
|
});
|
|
});
|