From 71f94d060019abafb887f9d6183f0433fb67dd82 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Motiejus=20Jak=C5=A1tys?= Date: Tue, 28 Jun 2022 16:41:10 +0300 Subject: [PATCH] fix error wrapping --- src/ErrCtx.zig | 14 ++++++++++---- src/unix2db/main.zig | 26 ++++++++++---------------- 2 files changed, 20 insertions(+), 20 deletions(-) diff --git a/src/ErrCtx.zig b/src/ErrCtx.zig index e0cbc2d..3325e5a 100644 --- a/src/ErrCtx.zig +++ b/src/ErrCtx.zig @@ -31,12 +31,18 @@ pub fn write(self: *ErrCtx, bytes: []const u8) error{}!usize { const Writer = std.io.Writer(*ErrCtx, error{}, write); -pub fn writer(self: *ErrCtx) Writer { +fn writer(self: *ErrCtx) Writer { return Writer{ .context = self }; } pub fn print(self: *ErrCtx, comptime format: []const u8, args: anytype) void { - self.writer().print(format, args) catch unreachable; + var buf: [capacity]u8 = undefined; + var buf_stream = std.io.fixedBufferStream(&buf); + buf_stream.writer().print(format, args) catch |err| switch (err) { + error.NoSpaceLeft => {}, + }; + + _ = self.write(buf[0..buf_stream.pos]) catch unreachable; } pub fn returnf( @@ -117,10 +123,10 @@ test "almost overflow" { test "rev" { var ctx = ErrCtx{}; - ctx.print("yadda", .{}); + ctx.print("yadda {s}", .{"xx"}); var it = ctx.rev(); - try testing.expectEqualSlices(u8, "yadda", it.next().?); + try testing.expectEqualStrings("yadda xx", it.next().?); try testing.expectEqual(it.next(), null); } diff --git a/src/unix2db/main.zig b/src/unix2db/main.zig index ddf3f6c..72c6622 100644 --- a/src/unix2db/main.zig +++ b/src/unix2db/main.zig @@ -151,31 +151,25 @@ test "trivial error: missing passwd file" { const exit_code = execute(allocator, stdout.writer(), stderr.writer(), args[0..]); try testing.expectEqual(@as(u8, 1), exit_code); - try testing.expectEqualSlices( - u8, - stderr.items, - "ERROR FileNotFound: ./passwd: open \n", - ); + try testing.expectEqualStrings(stderr.items, "ERROR FileNotFound: ./passwd: open \n"); } test "fail" { var errc = ErrCtx{}; - var stderr = ArrayList(u8).init(testing.allocator); - defer stderr.deinit(); - var stderrw = stderr.writer(); - const exit_code = fail(errc.wrapf("got 1", .{}), stderrw, error.NotSure); + var buf = ArrayList(u8).init(testing.allocator); + defer buf.deinit(); + var wr = buf.writer(); + const exit_code = fail(errc.wrapf("invalid user 'foo'", .{}), wr, error.NotSure); try testing.expectEqual(exit_code, 1); - try testing.expectEqualSlices( - u8, - stderr.items, - "ERROR NotSure: got 1\n", - ); + try testing.expectEqualStrings(buf.items, "ERROR NotSure: invalid user 'foo'\n"); } test "smoke test" { const allocator = testing.allocator; var stderr = ArrayList(u8).init(allocator); defer stderr.deinit(); + var stdout = ArrayList(u8).init(allocator); + defer stdout.deinit(); var corpus = try Corpus.testCorpus(allocator); defer corpus.deinit(); @@ -225,8 +219,8 @@ test "smoke test" { "--output", outPath, }; + const exit_code = execute(allocator, stdout.writer(), stderr.writer(), args); if (true) return error.SkipZigTest; - const exit_code = try execute(allocator, stderr.writer(), args); - + try testing.expectEqualStrings("", stderr.items); try testing.expectEqual(@as(u8, 0), exit_code); }