From 40847ee327129a7466792b7606449bd91968c42f Mon Sep 17 00:00:00 2001 From: Martin Ashby Date: Fri, 15 Sep 2023 22:07:26 +0100 Subject: Add a test for deflate and comment Add a method for getting a comment --- src/main.zig | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) (limited to 'src/main.zig') diff --git a/src/main.zig b/src/main.zig index 20c939a..417f10b 100644 --- a/src/main.zig +++ b/src/main.zig @@ -111,6 +111,9 @@ const ZipFile = struct { fn file_name(self: ZipFile, index: u16) []const u8 { return self.central_directory_headers[index].file_name; } + fn file_comment(self: ZipFile, index: u16) []const u8 { + return self.central_directory_headers[index].file_comment; + } fn extract(self: ZipFile, index: u16, stream_or_file_in: anytype, stream_or_file_out: anytype) !void { const cdh = self.central_directory_headers[index]; try stream_or_file_in.seekTo(cdh.relative_offset_of_local_header); @@ -170,7 +173,7 @@ const CentralDirectoryHeader = struct { version_made_by: u16, version_needed_to_extract: u16, general_purpose_bit_flag: u16, - compression_method: u16, + compression_method: ZipFile.CompressionMethod, last_mod_file_time: u16, last_mod_file_date: u16, crc32: u32, @@ -330,7 +333,7 @@ test "foo2" { try std.testing.expectEqualStrings(zf.file_name(1), "foo.txt"); } -test "extract" { +test "extract stored" { const test_zip = @embedFile("hello.zip"); var fbs = std.io.fixedBufferStream(test_zip); var zf = try ZipFile.from(std.testing.allocator, &fbs); @@ -343,3 +346,16 @@ test "extract" { try zf.extract(1, &fbs, &fbs_out); try std.testing.expectEqualStrings("hi there\n", fbs_out.getWritten()); } + +test "extract deflate" { + const test_zip = @embedFile("deflate.zip"); + var fbs = std.io.fixedBufferStream(test_zip); + var zf = try ZipFile.from(std.testing.allocator, &fbs); + defer zf.deinit(); + var out = [_]u8{0} ** 1024; + var fbs_out = std.io.fixedBufferStream(&out); + try std.testing.expectEqualStrings("Here is a comment :)", zf.file_comment(0)); + try std.testing.expectEqual(ZipFile.CompressionMethod.deflate, zf.central_directory_headers[0].compression_method); + try zf.extract(0, &fbs, &fbs_out); + try std.testing.expectEqualStrings(@embedFile("foo.txt"), fbs_out.getWritten()); +} -- cgit v1.2.3-ZIG