Skip to content

Commit

Permalink
test: expand and optimize regression testing
Browse files Browse the repository at this point in the history
  • Loading branch information
SethFalco committed Jan 3, 2024
1 parent 2442f74 commit 9bc6d23
Showing 1 changed file with 23 additions and 35 deletions.
58 changes: 23 additions & 35 deletions test/regression-extract.js
Expand Up @@ -11,55 +11,44 @@ const __dirname = path.dirname(fileURLToPath(import.meta.url));

const pipeline = util.promisify(stream.pipeline);

/** Files to skip regression testing for due to parsing issues. */
const exclude = [
// animated
'svg/filters-light-04-f.svg',
'svg/filters-composite-05-f.svg',
'svgs/W3C_SVG_11_TestSuite/svg/filters-light-04-f.svg',
'svgs/W3C_SVG_11_TestSuite/svg/filters-composite-05-f.svg',
// messed gradients
'svg/pservers-grad-18-b.svg',
'svgs/W3C_SVG_11_TestSuite/svg/pservers-grad-18-b.svg',
// removing wrapping <g> breaks :first-child pseudo-class
'svg/styling-pres-04-f.svg',
'svgs/W3C_SVG_11_TestSuite/svg/styling-pres-04-f.svg',
// rect is converted to path which matches wrong styles
'svg/styling-css-08-f.svg',
'svgs/W3C_SVG_11_TestSuite/svg/styling-css-08-f.svg',
// complex selectors are messed because of converting shapes to paths
'svg/struct-use-10-f.svg',
'svg/struct-use-11-f.svg',
'svg/styling-css-01-b.svg',
'svg/styling-css-04-f.svg',
'svgs/W3C_SVG_11_TestSuite/svg/struct-use-10-f.svg',
'svgs/W3C_SVG_11_TestSuite/svg/struct-use-11-f.svg',
'svgs/W3C_SVG_11_TestSuite/svg/styling-css-01-b.svg',
'svgs/W3C_SVG_11_TestSuite/svg/styling-css-04-f.svg',
// strange artifact breaks inconsistently breaks regression tests
'svg/filters-conv-05-f.svg',
'svgs/W3C_SVG_11_TestSuite/svg/filters-conv-05-f.svg',
];

/**
* @param {string} url
* @param {string} baseDir
* @param {RegExp} include
*/
const extractTarGz = async (url, baseDir, include) => {
const extractTarGz = async (url, baseDir) => {
const extract = tarStream.extract();
extract.on('entry', async (header, stream, next) => {
const name = header.name;

try {
if (include == null || include.test(name)) {
if (
name.endsWith('.svg') &&
!exclude.includes(name) &&
!name.startsWith('svg/animate-')
) {
const file = path.join(baseDir, name);
await fs.promises.mkdir(path.dirname(file), { recursive: true });
await pipeline(stream, fs.createWriteStream(file));
} else if (name.endsWith('.svgz')) {
// .svgz -> .svg
const file = path.join(baseDir, name.slice(0, -1));
await fs.promises.mkdir(path.dirname(file), { recursive: true });
await pipeline(
stream,
zlib.createGunzip(),
fs.createWriteStream(file),
);
}
if (
name.endsWith('.svg') &&
!exclude.includes(name) &&
!name.startsWith('svgs/W3C_SVG_11_TestSuite/svg/animate-')
) {
const file = path.join(baseDir, header.name);
await fs.promises.mkdir(path.dirname(file), { recursive: true });
await pipeline(stream, fs.createWriteStream(file));
}
} catch (error) {
console.error(error);
Expand All @@ -74,11 +63,10 @@ const extractTarGz = async (url, baseDir, include) => {

(async () => {
try {
console.info('Downloading W3C SVG 1.1 Test Suite and extracting files');
console.info('Downloading SVGO Test Suite and extracting files');
await extractTarGz(
'https://www.w3.org/Graphics/SVG/Test/20110816/archives/W3C_SVG_11_TestSuite.tar.gz',
path.join(__dirname, 'regression-fixtures', 'w3c-svg-11-test-suite'),
/^svg\//,
'https://svg.github.io/svgo-test-suite/svgo-test-suite.tar.gz',
path.join(__dirname, 'regression-fixtures'),
);
} catch (error) {
console.error(error);
Expand Down

0 comments on commit 9bc6d23

Please sign in to comment.