Skip to content

Commit 750998e

Browse files
jacobly0andrewrk
authored andcommitted
Build: fail tests that log errors, like zig test does
1 parent 4403008 commit 750998e

File tree

4 files changed

+25
-10
lines changed

4 files changed

+25
-10
lines changed

lib/std/Build/Step.zig

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,10 +45,11 @@ pub const TestResults = struct {
4545
fail_count: u32 = 0,
4646
skip_count: u32 = 0,
4747
leak_count: u32 = 0,
48+
log_err_count: u32 = 0,
4849
test_count: u32 = 0,
4950

5051
pub fn isSuccess(tr: TestResults) bool {
51-
return tr.fail_count == 0 and tr.leak_count == 0;
52+
return tr.fail_count == 0 and tr.leak_count == 0 and tr.log_err_count == 0;
5253
}
5354

5455
pub fn passCount(tr: TestResults) u32 {

lib/std/Build/Step/Run.zig

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1048,6 +1048,7 @@ fn evalZigTest(
10481048
var skip_count: u32 = 0;
10491049
var leak_count: u32 = 0;
10501050
var test_count: u32 = 0;
1051+
var log_err_count: u32 = 0;
10511052

10521053
var metadata: ?TestMetadata = null;
10531054

@@ -1112,14 +1113,22 @@ fn evalZigTest(
11121113

11131114
const TrHdr = std.zig.Server.Message.TestResults;
11141115
const tr_hdr = @as(*align(1) const TrHdr, @ptrCast(body));
1115-
fail_count += @intFromBool(tr_hdr.flags.fail);
1116-
skip_count += @intFromBool(tr_hdr.flags.skip);
1117-
leak_count += @intFromBool(tr_hdr.flags.leak);
1116+
fail_count +|= @intFromBool(tr_hdr.flags.fail);
1117+
skip_count +|= @intFromBool(tr_hdr.flags.skip);
1118+
leak_count +|= @intFromBool(tr_hdr.flags.leak);
1119+
log_err_count +|= tr_hdr.flags.log_err_count;
11181120

1119-
if (tr_hdr.flags.fail or tr_hdr.flags.leak) {
1121+
if (tr_hdr.flags.fail or tr_hdr.flags.leak or tr_hdr.flags.log_err_count > 0) {
11201122
const name = std.mem.sliceTo(md.string_bytes[md.names[tr_hdr.index]..], 0);
11211123
const msg = std.mem.trim(u8, stderr.readableSlice(0), "\n");
1122-
const label = if (tr_hdr.flags.fail) "failed" else "leaked";
1124+
const label = if (tr_hdr.flags.fail)
1125+
"failed"
1126+
else if (tr_hdr.flags.leak)
1127+
"leaked"
1128+
else if (tr_hdr.flags.log_err_count > 0)
1129+
"logged errors"
1130+
else
1131+
unreachable;
11231132
if (msg.len > 0) {
11241133
try self.step.addError("'{s}' {s}: {s}", .{ name, label, msg });
11251134
} else {
@@ -1153,6 +1162,7 @@ fn evalZigTest(
11531162
.fail_count = fail_count,
11541163
.skip_count = skip_count,
11551164
.leak_count = leak_count,
1165+
.log_err_count = log_err_count,
11561166
},
11571167
.test_metadata = metadata,
11581168
};

lib/std/zig/Server.zig

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -53,12 +53,11 @@ pub const Message = struct {
5353
index: u32,
5454
flags: Flags,
5555

56-
pub const Flags = packed struct(u8) {
56+
pub const Flags = packed struct(u32) {
5757
fail: bool,
5858
skip: bool,
5959
leak: bool,
60-
61-
reserved: u5 = 0,
60+
log_err_count: u29 = 0,
6261
};
6362
};
6463

lib/test_runner.zig

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,7 @@ fn mainServer() !void {
9090

9191
.run_test => {
9292
std.testing.allocator_instance = .{};
93+
log_err_count = 0;
9394
const index = try server.receiveBody_u32();
9495
const test_fn = builtin.test_functions[index];
9596
if (test_fn.async_frame_size != null)
@@ -113,6 +114,10 @@ fn mainServer() !void {
113114
.fail = fail,
114115
.skip = skip,
115116
.leak = leak,
117+
.log_err_count = std.math.lossyCast(std.meta.FieldType(
118+
std.zig.Server.Message.TestResults.Flags,
119+
.log_err_count,
120+
), log_err_count),
116121
},
117122
});
118123
},
@@ -218,7 +223,7 @@ pub fn log(
218223
args: anytype,
219224
) void {
220225
if (@intFromEnum(message_level) <= @intFromEnum(std.log.Level.err)) {
221-
log_err_count += 1;
226+
log_err_count +|= 1;
222227
}
223228
if (@intFromEnum(message_level) <= @intFromEnum(std.testing.log_level)) {
224229
std.debug.print(

0 commit comments

Comments
 (0)