From ddd65517af83dae651d7df90d5bd6b685a77feae Mon Sep 17 00:00:00 2001 From: Alexander Medvednikov Date: Thu, 26 Feb 2026 19:40:03 +0300 Subject: [PATCH] archive: add tar library (fixes #1180) --- vlib/archive/tar/reader_test.v | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/vlib/archive/tar/reader_test.v b/vlib/archive/tar/reader_test.v index 3aa66f108..f0c094514 100644 --- a/vlib/archive/tar/reader_test.v +++ b/vlib/archive/tar/reader_test.v @@ -1,3 +1,4 @@ +@[has_globals] module tar import os @@ -8,6 +9,15 @@ fn testsuite_begin() { const testdata = 'vlib/archive/tar/testdata' +__global ( + test_chunk_blocks [][]u8 +) + +fn collect_test_block(block []u8) !ReadResult { + test_chunk_blocks << block.clone() + return .continue +} + // files copied from golang: https://github.com/golang/go/blob/master/src/archive/tar/testdata/file-and-dir.tar fn test_golang_testdata() { // [ ] dir | 0 bytes | folder @@ -188,3 +198,22 @@ fn (mut t TestReader) other_block(mut read Read, details string) { println('OTHER #${read.get_block_number()} special:${read.special} ${details}') } } + +fn test_chunks_reader_moves_pending_bytes_in_order() { + mut all := []u8{len: 1024} + for i := 0; i < all.len; i++ { + all[i] = u8(i % 251) + } + + test_chunk_blocks = [][]u8{} + mut chunk_reader := ChunksReader{ + read_block_fn: collect_test_block + } + assert chunk_reader.read_blocks(all[0..700]) == .continue + assert chunk_reader.pending == 188 + assert chunk_reader.read_blocks(all[700..]) == .continue + assert chunk_reader.pending == 0 + assert test_chunk_blocks.len == 2 + assert test_chunk_blocks[0] == all[0..512] + assert test_chunk_blocks[1] == all[512..] +} -- 2.39.5