Some checks failed
No response / noResponse (push) Has been cancelled
CI / Continuous releases (push) Has been cancelled
CI / test-dev (macos-latest) (push) Has been cancelled
CI / test-dev (ubuntu-latest) (push) Has been cancelled
CI / test-dev (windows-latest) (push) Has been cancelled
Maintenance / main (push) Has been cancelled
Scorecards supply-chain security / Scorecards analysis (push) Has been cancelled
CodeQL / Analyze (push) Has been cancelled
197 lines
6.2 KiB
JavaScript
197 lines
6.2 KiB
JavaScript
import { expect } from 'chai';
|
|
import fs from 'fs';
|
|
import os from 'os';
|
|
import path from 'path';
|
|
import { fileURLToPath } from 'url';
|
|
import { RENAME_FILTER_MUI, RENAME_FILTER_DEFAULT, getComponentName, handler } from './builder.mjs';
|
|
|
|
const currentDirectory = path.dirname(fileURLToPath(new URL(import.meta.url)));
|
|
|
|
const DISABLE_LOG = true;
|
|
|
|
// To cut down on test time, use fixtures instead of node_modules
|
|
// const MUI_ICONS_ROOT = path.join(currentDirectory, '../node_modules/material-design-icons/');
|
|
const MUI_ICONS_ROOT = path.join(currentDirectory, './fixtures/material-design-icons/');
|
|
const MUI_ICONS_SVG_DIR = path.join(MUI_ICONS_ROOT, 'svg');
|
|
|
|
const GAME_ICONS_ROOT = path.join(currentDirectory, './fixtures/game-icons/');
|
|
const GAME_ICONS_SVG_DIR = path.join(GAME_ICONS_ROOT, 'svg/icons/');
|
|
|
|
describe('builder', () => {
|
|
describe('#getComponentName', () => {
|
|
it('should change capitalize dashes', () => {
|
|
expect(getComponentName('hi-world')).to.equal('HiWorld');
|
|
});
|
|
|
|
it('should capitalize based on environment path.sep', () => {
|
|
expect(getComponentName(`this${path.sep}dir`)).to.equal('ThisDir');
|
|
});
|
|
});
|
|
|
|
it('should have icons to test with', () => {
|
|
expect(fs.lstatSync(MUI_ICONS_SVG_DIR).isDirectory()).to.equal(true);
|
|
});
|
|
|
|
describe('--output-dir', () => {
|
|
const options = {
|
|
svgDir: MUI_ICONS_SVG_DIR,
|
|
innerPath: '/svg/production/',
|
|
glob: '/**/production/*_24px.svg',
|
|
renameFilter: RENAME_FILTER_MUI,
|
|
disableLog: DISABLE_LOG,
|
|
outputDir: null,
|
|
};
|
|
|
|
beforeEach(
|
|
process.env.VITEST
|
|
? async function beforeEachHook(ctx) {
|
|
// DON'T CLEAN UP TO MAKE TEST INSPECTABLE
|
|
options.outputDir = path.join(
|
|
os.tmpdir(),
|
|
'material-ui-icons-builder-test',
|
|
ctx.task.name,
|
|
);
|
|
await emptyDir(options.outputDir);
|
|
}
|
|
: async function beforeEachHook() {
|
|
// DON'T CLEAN UP TO MAKE TEST INSPECTABLE
|
|
options.outputDir = path.join(
|
|
os.tmpdir(),
|
|
'material-ui-icons-builder-test',
|
|
this.currentTest.fullTitle(),
|
|
);
|
|
await emptyDir(options.outputDir);
|
|
},
|
|
);
|
|
|
|
it('script outputs to directory', async () => {
|
|
await handler(options);
|
|
expect(fs.lstatSync(options.outputDir).isDirectory()).to.equal(true);
|
|
expect(fs.lstatSync(path.join(options.outputDir, 'index.js')).isFile()).to.equal(true);
|
|
});
|
|
});
|
|
|
|
describe('--svg-dir, --innerPath, --fileSuffix', () => {
|
|
const options = {
|
|
svgDir: GAME_ICONS_SVG_DIR,
|
|
glob: '**/*.svg',
|
|
innerPath: '/dice/svg/000000/transparent/',
|
|
renameFilter: RENAME_FILTER_DEFAULT,
|
|
disableLog: false,
|
|
outputDir: null,
|
|
};
|
|
|
|
beforeEach(
|
|
process.env.VITEST
|
|
? async function beforeEachHook(ctx) {
|
|
// DON'T CLEAN UP TO MAKE TEST INSPECTABLE
|
|
options.outputDir = path.join(
|
|
os.tmpdir(),
|
|
'material-ui-icons-builder-test',
|
|
ctx.task.name,
|
|
);
|
|
await emptyDir(options.outputDir);
|
|
}
|
|
: async function beforeEachHook() {
|
|
// DON'T CLEAN UP TO MAKE TEST INSPECTABLE
|
|
options.outputDir = path.join(
|
|
os.tmpdir(),
|
|
'material-ui-icons-builder-test',
|
|
this.currentTest.fullTitle(),
|
|
);
|
|
await emptyDir(options.outputDir);
|
|
},
|
|
);
|
|
|
|
it('script outputs to directory', async () => {
|
|
await handler(options);
|
|
expect(fs.lstatSync(options.outputDir).isDirectory()).to.equal(true);
|
|
expect(fs.lstatSync(path.join(options.outputDir, 'delapouite')).isDirectory()).to.equal(true);
|
|
|
|
const actualFilePath = path.join(
|
|
options.outputDir,
|
|
'delapouite',
|
|
'dice',
|
|
'svg',
|
|
'000000',
|
|
'transparent',
|
|
'Dice-six-faces-four.js',
|
|
);
|
|
expect(fs.existsSync(actualFilePath)).to.equal(true);
|
|
|
|
const actualFileData = fs.readFileSync(actualFilePath, { encoding: 'utf8' });
|
|
expect(actualFileData).to.include("import createSvgIcon from './utils/createSvgIcon'");
|
|
});
|
|
});
|
|
|
|
describe('Template rendering', () => {
|
|
const options = {
|
|
svgDir: MUI_ICONS_SVG_DIR,
|
|
innerPath: '/svg/',
|
|
glob: '/*_24px.svg',
|
|
renameFilter: RENAME_FILTER_MUI,
|
|
disableLog: DISABLE_LOG,
|
|
outputDir: null,
|
|
};
|
|
|
|
beforeEach(
|
|
process.env.VITEST
|
|
? async function beforeEachHook(ctx) {
|
|
// DON'T CLEAN UP TO MAKE TEST INSPECTABLE
|
|
options.outputDir = path.join(
|
|
os.tmpdir(),
|
|
'material-ui-icons-builder-test',
|
|
ctx.task.name,
|
|
);
|
|
await emptyDir(options.outputDir);
|
|
}
|
|
: async function beforeEachHook() {
|
|
// DON'T CLEAN UP TO MAKE TEST INSPECTABLE
|
|
options.outputDir = path.join(
|
|
os.tmpdir(),
|
|
'material-ui-icons-builder-test',
|
|
this.currentTest.fullTitle(),
|
|
);
|
|
await emptyDir(options.outputDir);
|
|
},
|
|
);
|
|
|
|
it('should produce the expected output', async () => {
|
|
await handler(options);
|
|
expect(fs.lstatSync(options.outputDir).isDirectory()).to.equal(true);
|
|
|
|
const cases = [
|
|
'Accessibility.js',
|
|
'StarRounded.js',
|
|
'QueueMusicOutlined.js',
|
|
'AccessAlarms.js',
|
|
'TimesOneMobiledata.js',
|
|
'ThirtyFps.js',
|
|
'SixtyFps.js',
|
|
'FiveMp.js',
|
|
'ElevenMp.js',
|
|
'TwentyFourMp.js',
|
|
'AccessAlarmsTwoTone.js',
|
|
'RecordVoiceOverTwoTone.js',
|
|
];
|
|
|
|
cases.forEach((name) => {
|
|
const actual = fs.readFileSync(path.join(options.outputDir, name), { encoding: 'utf8' });
|
|
// Update the snapshots
|
|
// fs.writeFileSync(path.join(MUI_ICONS_ROOT, 'expected', name), actual, { encoding: 'utf8' });
|
|
|
|
const expected = fs.readFileSync(path.join(MUI_ICONS_ROOT, 'expected', name), {
|
|
encoding: 'utf8',
|
|
});
|
|
|
|
expect(actual).to.equal(expected);
|
|
});
|
|
});
|
|
});
|
|
});
|
|
|
|
async function emptyDir(dir) {
|
|
await fs.promises.rm(dir, { recursive: true, force: true });
|
|
await fs.promises.mkdir(dir, { recursive: true });
|
|
}
|