feature. See also
. The project being documented here (as the example) is the Zig library itself.
Maker.printStepFailure
fn printStepFailure(
maker: *Maker,
step_index: Configuration.Step.Index,
stderr: Io.Terminal,
dim: bool,
) !void
File
Code
fn printStepFailure(
maker: *Maker,
step_index: Configuration.Step.Index,
stderr: Io.Terminal,
dim: bool,
) !void {
const w = stderr.writer;
const s = maker.stepByIndex(step_index);
if (s.result_error_bundle.errorMessageCount() > 0) {
try stderr.setColor(.red);
try w.print(" {d} errors\n", .{
s.result_error_bundle.errorMessageCount(),
});
} else if (!s.test_results.isSuccess()) {
// skipped, failed, crashed, or timed out.
try stderr.setColor(.green);
try w.print(" {d} pass", .{s.test_results.passCount()});
try stderr.setColor(.reset);
if (dim) try stderr.setColor(.dim);
if (s.test_results.skip_count > 0) {
try w.writeAll(", ");
try stderr.setColor(.yellow);
try w.print("{d} skip", .{s.test_results.skip_count});
try stderr.setColor(.reset);
if (dim) try stderr.setColor(.dim);
}
if (s.test_results.fail_count > 0) {
try w.writeAll(", ");
try stderr.setColor(.red);
try w.print("{d} fail", .{s.test_results.fail_count});
try stderr.setColor(.reset);
if (dim) try stderr.setColor(.dim);
}
if (s.test_results.crash_count > 0) {
try w.writeAll(", ");
try stderr.setColor(.red);
try w.print("{d} crash", .{s.test_results.crash_count});
try stderr.setColor(.reset);
if (dim) try stderr.setColor(.dim);
}
if (s.test_results.timeout_count > 0) {
try w.writeAll(", ");
try stderr.setColor(.red);
try w.print("{d} timeout", .{s.test_results.timeout_count});
try stderr.setColor(.reset);
if (dim) try stderr.setColor(.dim);
}
try w.print(" ({d} total)", .{s.test_results.test_count});
// but just a flag that any tests -- even passed ones -- can have. We also use a different
// separator, so it looks like:
// 2 pass, 1 skip, 2 fail (5 total); 2 leaks
if (s.test_results.leak_count > 0) {
try w.writeAll("; ");
try stderr.setColor(.red);
try w.print("{d} leaks", .{s.test_results.leak_count});
try stderr.setColor(.reset);
if (dim) try stderr.setColor(.dim);
}
// just come with other errors (e.g. crashes and leaks print stack traces, and clean
// failures print error traces). So only mention them if they're the only thing causing
// the failure.
const show_err_logs: bool = show: {
var alt_results = s.test_results;
alt_results.log_err_count = 0;
break :show alt_results.isSuccess();
};
if (show_err_logs) {
try w.writeAll("; ");
try stderr.setColor(.red);
try w.print("{d} error logs", .{s.test_results.log_err_count});
try stderr.setColor(.reset);
if (dim) try stderr.setColor(.dim);
}
try w.writeAll("\n");
} else if (s.result_error_msgs.items.len > 0) {
try stderr.setColor(.red);
try w.writeAll(" failure\n");
} else {
assert(s.result_stderr.len > 0);
try stderr.setColor(.red);
try w.writeAll(" w\n");
}
}