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 17, 2024
1 parent d7a851f commit 78097d9
Show file tree
Hide file tree
Showing 2 changed files with 43 additions and 47 deletions.
32 changes: 20 additions & 12 deletions .github/workflows/main.yml
@@ -1,7 +1,9 @@
name: CI

env:
FORCE_COLOR: 2
NODE: 20

on:
push:
branches:
Expand All @@ -26,18 +28,6 @@ jobs:
- run: yarn install
- run: yarn lint
- run: yarn typecheck
regression:
name: Test regressions
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: ${{ env.NODE }}
cache: yarn
- run: yarn install
- run: yarn playwright install --with-deps chromium
- run: yarn test-regression
test:
name: ${{ matrix.os }} Node.js ${{ matrix.node-version }}
strategy:
Expand All @@ -61,3 +51,21 @@ jobs:
- run: yarn playwright install --with-deps chromium
- run: yarn test
- run: yarn test-bundles
regression:
name: Test regressions
runs-on: ubuntu-latest
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
needs:
- lint
- test
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: ${{ env.NODE }}
cache: yarn
- run: yarn install
- run: yarn playwright install --with-deps chromium
- run: yarn test-regression
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 78097d9

Please sign in to comment.