themer
Version:
Customizable theme creator for editors, terminals, wallpaper, and more.
54 lines • 2.84 kB
JavaScript
import test from 'ava';
import flattenDeep from 'lodash/flattenDeep.js';
import { spawn } from 'node:child_process';
import { rm, stat } from 'node:fs/promises';
import { join } from 'node:path';
import { randomBytes } from 'node:crypto';
async function run(colorSetParams, templateParams, sizeParams, outputDir) {
return new Promise((resolve, reject) => {
const cp = spawn('node', flattenDeep([
'./dist/bin.js',
colorSetParams.map((param) => ['--color-set', param]),
...templateParams.map((param) => ['--template', param]),
...sizeParams.map((param) => ['--size', param]),
['--output', outputDir],
]));
cp.on('error', reject);
cp.on('exit', (code) => {
if (code === 0)
resolve();
else
reject();
});
});
}
const macro = test.macro(async (t, colorSetParams, templateParams, sizeParams, expectedPaths) => {
const dir = join('bin-test', randomBytes(32).toString('hex'));
t.teardown(async () => {
await rm(dir, { force: true, recursive: true });
});
await t.notThrowsAsync(async () => {
await run(colorSetParams, templateParams, sizeParams, dir);
for (const path of expectedPaths) {
await stat(join(dir, path));
}
});
});
test('basic CLI', macro, ['default'], ['slack'], [], [
join('Default', 'Slack sidebar', 'themer-default-dark.txt'),
join('Default', 'README.md'),
]);
test('multiple color sets', macro, ['default', 'green-as-a-whistle'], ['slack'], [], [join('Default', 'README.md'), join('Green as a Whistle', 'README.md')]);
test('multiple templates', macro, ['default'], ['slack', 'alfred'], [], [
join('Default', 'Slack sidebar', 'themer-default-dark.txt'),
join('Default', 'Alfred', 'themer-default-dark.alfredappearance'),
]);
test('load color set from file', macro, [join('dist', 'fixture', 'color-set.js')], ['slack'], [], [join('Test', 'Slack sidebar', 'themer-test-dark.txt')]);
test('load template from file', macro, ['default'], [join('dist', 'fixture', 'template.js')], [], [join('Default', 'Test', 'themer-default-dark.txt')]);
test('load base16 file', macro, [join('src', 'fixture', 'base16.yaml')], ['slack'], [], [join('base16', 'Slack sidebar', 'themer-base-16-dark.txt')]);
test('renders wallpaper at the specified resolution', macro, ['default'], ['wallpaper-block-wave'], ['400x400'], [join('Default', 'Block Wave wallpaper', 'themer-default-dark-400x400.svg')]);
test('supports multiple wallpaper resolutions', macro, ['default'], ['wallpaper-circuits'], ['400x400', '450x450'], [
join('Default', 'Circuits wallpaper', 'themer-default-dark-400x400.svg'),
join('Default', 'Circuits wallpaper', 'themer-default-dark-450x450.svg'),
]);
//# sourceMappingURL=bin.spec.js.map