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/deflate.zip | Bin 0 -> 449 bytes src/foo.txt | 2 +- src/main.zig | 20 ++++++++++++++++++-- 3 files changed, 19 insertions(+), 3 deletions(-) create mode 100644 src/deflate.zip diff --git a/src/deflate.zip b/src/deflate.zip new file mode 100644 index 0000000..1a6826e Binary files /dev/null and b/src/deflate.zip differ diff --git a/src/foo.txt b/src/foo.txt index 458d9cb..decec2d 100644 --- a/src/foo.txt +++ b/src/foo.txt @@ -1 +1 @@ -The quick brown fox jumped over the lazy dog + Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. \ No newline at end of file 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