Files
wordpress-theme-aksrt/tests/widget-system/circular-button-icon-margin-contract.test.cjs
T
2026-08-29 15:50:04 +08:00

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');
});