49 lines
2.0 KiB
JavaScript
49 lines
2.0 KiB
JavaScript
'use strict';
|
|
|
|
const assert = require('node:assert/strict');
|
|
const fs = require('node:fs');
|
|
const path = require('node:path');
|
|
const test = require('node:test');
|
|
|
|
const root = path.resolve(__dirname, '..', '..');
|
|
const read = (file) => fs.readFileSync(path.join(root, file), 'utf8');
|
|
|
|
// .but.cir icon buttons center via inline-flex; the 0.25em icon margin rule
|
|
// (.but > i[class*="fa-"]:not(.fa-angle-right), specificity 0,3,1) must be
|
|
// outranked by the reset, or glyphs like fa-ellipsis-h sit left of center.
|
|
const resetSelectors = [
|
|
'.but.cir svg.icon',
|
|
'.but.cir > .fa,',
|
|
'.but.cir > .fa:not(.fa-angle-right),',
|
|
'.but.cir > i[class*="fa-"]:not(.fa-angle-right)',
|
|
];
|
|
|
|
test('buttons.css resets direct-child icon margins on circular buttons', () => {
|
|
const buttons = read('assets/css/core/buttons.css');
|
|
const resetStart = buttons.indexOf('.but.cir svg.icon,');
|
|
assert.notEqual(resetStart, -1, 'missing .but.cir icon margin reset');
|
|
const resetBlock = buttons.slice(resetStart, buttons.indexOf('}', resetStart));
|
|
for (const selector of resetSelectors) {
|
|
assert.ok(resetBlock.includes(selector), `reset is missing selector: ${selector}`);
|
|
}
|
|
assert.match(resetBlock, /margin:\s*0\s*;/);
|
|
|
|
const marginStart = buttons.indexOf('.but .icon,');
|
|
assert.notEqual(marginStart, -1);
|
|
assert.ok(marginStart < resetStart, 'margin rule must precede the reset');
|
|
});
|
|
|
|
test('the built public bundle carries the reset after the margin rule', () => {
|
|
const bundle = read('assets/css/build/public.min.css');
|
|
const minifiedReset = bundle.indexOf('.but.cir>i[class*=fa-]:not(.fa-angle-right){margin:0}');
|
|
assert.notEqual(minifiedReset, -1, 'missing minified .but.cir icon margin reset');
|
|
|
|
const marginRule = /\.but>i\[class\*=fa-\]:not\(\.fa-angle-right\)\{margin-right:\.25em\}/g;
|
|
let lastMargin = -1;
|
|
for (const match of bundle.matchAll(marginRule)) {
|
|
lastMargin = match.index;
|
|
}
|
|
assert.notEqual(lastMargin, -1, 'expected the icon margin rule to still exist');
|
|
assert.ok(minifiedReset > lastMargin, 'reset must appear after the last margin rule copy');
|
|
});
|