blob: c0534e32ea6ec9a25f2c64a35b948f5c89579d87 [file]
// Copyright 2026 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import fs from 'node:fs';
import path from 'node:path';
import yargs from 'yargs';
import {hideBin} from 'yargs/helpers';
import {parseExpectations, serializeExpectations} from '../../test/conductor/test_expectations_parser.js';
import {devtoolsRootPath} from '../devtools_paths.js';
const yargsObject = yargs(hideBin(process.argv))
.option('fix', {
type: 'boolean',
desc: 'Set to true to fix formatting and sort results.',
default: false,
})
.option('expectations-file', {
type: 'string',
desc: 'Path to the expectations file to check.',
default: path.join(devtoolsRootPath(), 'test', 'TestExpectations'),
})
.parseSync();
const expectationsPath = path.resolve(yargsObject['expectations-file']);
const originalContent = fs.readFileSync(expectationsPath, 'utf-8');
try {
const parsed = parseExpectations(originalContent);
const serialized = serializeExpectations(parsed);
if (originalContent !== serialized) {
if (yargsObject.fix) {
fs.writeFileSync(expectationsPath, serialized, 'utf-8');
console.log(`Successfully updated ${expectationsPath}.`);
process.exit(0);
} else {
console.error(
`${expectationsPath} is not formatted or serialized correctly.\n` +
'Expectations (such as results [ Pass Failure ]) must be sorted alphabetically.\n' +
`Run "node scripts/test/check_test_expectations.js --fix --expectations-file ${
expectationsPath}" to fix automatically.\n`,
);
const origLines = originalContent.split('\n');
const serialLines = serialized.split('\n');
const diffs = [];
for (let i = 0; i < Math.max(origLines.length, serialLines.length); i++) {
if (origLines[i] !== serialLines[i]) {
const origLine = origLines[i] !== undefined ? origLines[i] : '<EOF>';
const serialLine = serialLines[i] !== undefined ? serialLines[i] : '<EOF>';
diffs.push(`Line ${i + 1}:\n- ${origLine}\n+ ${serialLine}`);
}
}
if (diffs.length > 0) {
console.error('Differences found:');
console.error(diffs.join('\n\n'));
}
process.exit(1);
}
}
} catch (err) {
console.error(`Failed to parse ${expectationsPath}: ${err.message}`);
process.exit(1);
}