From a8eac0cf0738dc086cfc7688d2395e6805257d82 Mon Sep 17 00:00:00 2001 From: Andrew Kelley Date: Wed, 19 May 2021 20:59:06 -0700 Subject: [PATCH] stage2 test harness: show source file name Also support specifying source file name in compile error test cases. closes #8829 --- src/test.zig | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/src/test.zig b/src/test.zig index a5f5b8c2b0..a7f11d93df 100644 --- a/src/test.zig +++ b/src/test.zig @@ -28,6 +28,7 @@ test "self-hosted" { const ErrorMsg = union(enum) { src: struct { + src_path: []const u8, msg: []const u8, line: u32, column: u32, @@ -47,6 +48,7 @@ const ErrorMsg = union(enum) { switch (other) { .src => |src| return .{ .src = .{ + .src_path = src.src_path, .msg = src.msg, .line = @intCast(u32, src.line), .column = @intCast(u32, src.column), @@ -70,7 +72,8 @@ const ErrorMsg = union(enum) { ) !void { switch (self) { .src => |src| { - return writer.print(":{d}:{d}: {s}: {s}", .{ + return writer.print("{s}:{d}:{d}: {s}: {s}", .{ + src.src_path, src.line + 1, src.column + 1, @tagName(src.kind), @@ -188,9 +191,9 @@ pub const TestContext = struct { }; continue; } - // example: ":1:2: error: bad thing happened" + // example: "file.zig:1:2: error: bad thing happened" var it = std.mem.split(err_msg_line, ":"); - _ = it.next() orelse @panic("missing colon"); + const src_path = it.next() orelse @panic("missing colon"); const line_text = it.next() orelse @panic("missing line"); const col_text = it.next() orelse @panic("missing column"); const kind_text = it.next() orelse @panic("missing 'error'/'note'"); @@ -211,6 +214,7 @@ pub const TestContext = struct { array[i] = .{ .src = .{ + .src_path = src_path, .msg = msg, .line = line - 1, .column = column - 1, @@ -692,8 +696,8 @@ pub const TestContext = struct { for (all_errors.list) |err_msg| { switch (err_msg) { .src => |src| { - std.debug.print(":{d}:{d}: error: {s}\n{s}\n", .{ - src.line + 1, src.column + 1, src.msg, hr, + std.debug.print("{s}:{d}:{d}: error: {s}\n{s}\n", .{ + src.src_path, src.line + 1, src.column + 1, src.msg, hr, }); }, .plain => |plain| { @@ -747,7 +751,11 @@ pub const TestContext = struct { if (ex_tag != .src) continue; - if (actual_msg.line == case_msg.src.line and + const src_path_ok = case_msg.src.src_path.len == 0 or + std.mem.eql(u8, case_msg.src.src_path, actual_msg.src_path); + + if (src_path_ok and + actual_msg.line == case_msg.src.line and actual_msg.column == case_msg.src.column and std.mem.eql(u8, case_msg.src.msg, actual_msg.msg) and case_msg.src.kind == .@"error") @@ -959,7 +967,6 @@ pub const TestContext = struct { } } } - }; fn dumpArgs(argv: []const []const u8) void {