From e030414c163c6f9a3c2fc8291b2d5917e78688de Mon Sep 17 00:00:00 2001 From: Noam Preil Date: Mon, 25 May 2020 16:15:39 -0400 Subject: [PATCH] [Stage2/Testing] Always finish case, note all errs --- src-self-hosted/test.zig | 34 +++++++++++++++++++++++++--------- 1 file changed, 25 insertions(+), 9 deletions(-) diff --git a/src-self-hosted/test.zig b/src-self-hosted/test.zig index 102e6caef..b787d371e 100644 --- a/src-self-hosted/test.zig +++ b/src-self-hosted/test.zig @@ -363,25 +363,30 @@ pub const TestContext = struct { break :f false; }; module_node.end(); + var err: ?anyerror = null; { var i = module.failed_files.iterator(); var index: usize = 0; while (i.next()) |pair| : (index += 1) { if (index == case.expected_file_errors.len) { std.debug.warn("Unexpected file error: {}\n", .{pair.value}); - return error.UnexpectedError; + err = error.UnexpectedError; } const v1 = pair.value.*; const v2 = case.expected_file_errors[index]; if (v1.byte_offset != v2.byte_offset) { std.debug.warn("Expected error at {}, found it at {}\n", .{ v2.byte_offset, v1.byte_offset }); - return error.ExpectedErrorElsewhere; + err = error.ExpectedErrorElsewhere; } if (!std.mem.eql(u8, v1.msg, v2.msg)) { std.debug.warn("Expected '{}', found '{}'\n", .{ v2.msg, v1.msg }); - return error.ExpectedOtherError; + err = error.ExpectedOtherError; } } + if (index != case.expected_file_errors.len) { + std.debug.warn("Expected an error ('{}'), but did not receive it\n", .{case.expected_file_errors[index]}); + err = error.MissingError; + } } { var i = module.failed_decls.iterator(); @@ -389,19 +394,23 @@ pub const TestContext = struct { while (i.next()) |pair| : (index += 1) { if (index == case.expected_decl_errors.len) { std.debug.warn("Unexpected decl error: {}\n", .{pair.value}); - return error.UnexpectedError; + err = error.UnexpectedError; } const v1 = pair.value.*; const v2 = case.expected_decl_errors[index]; if (v1.byte_offset != v2.byte_offset) { std.debug.warn("Expected error at {}, found it at {}\n", .{ v2.byte_offset, v1.byte_offset }); - return error.ExpectedErrorElsewhere; + err = error.ExpectedErrorElsewhere; } if (!std.mem.eql(u8, v1.msg, v2.msg)) { std.debug.warn("Expected '{}', found '{}'\n", .{ v2.msg, v1.msg }); - return error.ExpectedOtherError; + err = error.ExpectedOtherError; } } + if (index != case.expected_decl_errors.len) { + std.debug.warn("Expected an error ('{}'), but did not receive it\n", .{case.expected_decl_errors[index]}); + err = error.MissingError; + } } { var i = module.failed_exports.iterator(); @@ -409,19 +418,26 @@ pub const TestContext = struct { while (i.next()) |pair| : (index += 1) { if (index == case.expected_export_errors.len) { std.debug.warn("Unexpected export error: {}\n", .{pair.value}); - return error.UnexpectedError; + err = error.UnexpectedError; } const v1 = pair.value.*; const v2 = case.expected_export_errors[index]; if (v1.byte_offset != v2.byte_offset) { std.debug.warn("Expected error at {}, found it at {}\n", .{ v2.byte_offset, v1.byte_offset }); - return error.ExpectedErrorElsewhere; + err = error.ExpectedErrorElsewhere; } if (!std.mem.eql(u8, v1.msg, v2.msg)) { std.debug.warn("Expected '{}', found '{}'\n", .{ v2.msg, v1.msg }); - return error.ExpectedOtherError; + err = error.ExpectedOtherError; } } + if (index != case.expected_export_errors.len) { + std.debug.warn("Expected an error ('{}'), but did not receive it\n", .{case.expected_export_errors[index]}); + err = error.MissingError; + } + } + if (err) |e| { + return e; } } };