diff options
Diffstat (limited to 'remote/test/puppeteer/tools/sort-test-expectations.mjs')
-rw-r--r-- | remote/test/puppeteer/tools/sort-test-expectations.mjs | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/remote/test/puppeteer/tools/sort-test-expectations.mjs b/remote/test/puppeteer/tools/sort-test-expectations.mjs new file mode 100644 index 0000000000..d1c8588d8a --- /dev/null +++ b/remote/test/puppeteer/tools/sort-test-expectations.mjs @@ -0,0 +1,65 @@ +/** + * @license + * Copyright 2023 Google Inc. + * SPDX-License-Identifier: Apache-2.0 + */ + +// TODO: this could be an eslint rule probably. +import fs from 'fs'; +import path from 'path'; +import url from 'url'; + +import prettier from 'prettier'; + +const __dirname = url.fileURLToPath(new URL('.', import.meta.url)); +const source = 'test/TestExpectations.json'; +const testExpectations = JSON.parse(fs.readFileSync(source, 'utf-8')); +const committedExpectations = structuredClone(testExpectations); + +const prettierConfig = await import( + path.join(__dirname, '..', '.prettierrc.cjs') +); + +function getSpecificity(item) { + return ( + item.parameters.length + + (item.testIdPattern.includes('*') + ? item.testIdPattern === '*' + ? 0 + : 1 + : 2) + ); +} + +testExpectations.sort((a, b) => { + const result = getSpecificity(a) - getSpecificity(b); + if (result === 0) { + return a.testIdPattern.localeCompare(b.testIdPattern); + } + return result; +}); + +testExpectations.forEach(item => { + item.parameters.sort(); + item.expectations.sort(); + item.platforms.sort(); +}); + +if (process.argv.includes('--lint')) { + if ( + JSON.stringify(committedExpectations) !== JSON.stringify(testExpectations) + ) { + console.error( + `${source} is not formatted properly. Run 'npm run format:expectations'.` + ); + process.exit(1); + } +} else { + fs.writeFileSync( + source, + await prettier.format(JSON.stringify(testExpectations), { + ...prettierConfig, + parser: 'json', + }) + ); +} |