[snap tester] Handle unexpected errors by failing fixture

This commit is contained in:
Mofei Zhang
2023-05-03 14:50:25 -04:00
parent 253b05f28d
commit 7e990419c1
2 changed files with 51 additions and 12 deletions
@@ -23,6 +23,7 @@ export type TestResult = {
outputPath: string;
actual: string | null; // null == input did not exist
expected: string | null; // null == output did not exist
unexpectedError: string | null;
};
export async function compile(
@@ -56,6 +57,7 @@ export async function compile(
outputPath,
actual: null,
expected,
unexpectedError: null,
};
}
@@ -127,10 +129,13 @@ export async function compile(
const expectError = fixture.startsWith("error.");
if (expectError) {
if (error === null) {
console.log(code);
throw new Error(
`Expected an error to be thrown for fixture: '${fixture}', remove the 'error.' prefix if an error is not expected.`
);
return {
inputPath,
outputPath,
actual: code,
expected,
unexpectedError: `Expected an error to be thrown for fixture: '${fixture}', remove the 'error.' prefix if an error is not expected.`,
};
} else if (code != null) {
output = `${formatOutput(code)}\n${formatErrorOutput(error)}`;
} else {
@@ -138,11 +143,22 @@ export async function compile(
}
} else {
if (error !== null) {
error.message = `Expected fixture '${fixture}' to succeed but it failed with error:\n\n${error.message}`;
throw error;
return {
inputPath,
outputPath,
actual: code,
expected,
unexpectedError: `Expected fixture '${fixture}' to succeed but it failed with error:\n\n${error.message}`,
};
}
if (code == null || code.length === 0) {
throw new Error(`Expected output for fixture '${fixture}'.`);
return {
inputPath,
outputPath,
actual: code,
expected,
unexpectedError: `Expected output for fixture '${fixture}'.`,
};
}
output = formatOutput(code);
}
@@ -158,7 +174,13 @@ ${output}
console.error = originalConsoleError;
return { inputPath, outputPath, actual, expected };
return {
inputPath,
outputPath,
actual,
expected,
unexpectedError: null,
};
}
function formatErrorOutput(error: Error): string {
+21 -4
View File
@@ -181,7 +181,7 @@ async function run(
function report(results: Results): void {
const failures: Array<[string, TestResult]> = [];
for (const [basename, result] of results) {
if (result.actual === result.expected) {
if (result.actual === result.expected && result.unexpectedError == null) {
console.log(
chalk.green.inverse.bold(" PASS ") + " " + chalk.dim(basename)
);
@@ -196,7 +196,13 @@ function report(results: Results): void {
for (const [basename, result] of failures) {
console.log(chalk.red.bold("FAIL:") + " " + basename);
console.log(diff(result.actual, result.expected) + "\n");
if (result.unexpectedError != null) {
console.log(
` >> Unexpected error during test: \n${result.unexpectedError}`
);
} else {
console.log(diff(result.actual, result.expected) + "\n");
}
}
}
@@ -214,8 +220,14 @@ async function update(results: Results): Promise<void> {
let deleted = 0;
let updated = 0;
let created = 0;
const failed = [];
for (const [basename, result] of results) {
if (result.actual == null) {
if (result.unexpectedError != null) {
console.log(
chalk.red.inverse.bold(" FAILED ") + " " + chalk.dim(basename)
);
failed.push([basename, result.unexpectedError]);
} else if (result.actual == null) {
// Input was deleted but the expect file still existed, remove it
console.log(
chalk.red.inverse.bold(" REMOVE ") + " " + chalk.dim(basename)
@@ -243,7 +255,12 @@ async function update(results: Results): Promise<void> {
);
}
}
console.log(`${deleted} Deleted, ${created} Created, ${updated} Updated`);
console.log(
`${deleted} Deleted, ${created} Created, ${updated} Updated, ${failed.length} Failed`
);
for (const [basename, errorMsg] of failed) {
console.log(`${chalk.red.bold("Fail:")} ${basename}\n${errorMsg}`);
}
}
function watchSrc(