From a2996ab34e02db409e91ac9e748e25a3673da02f Mon Sep 17 00:00:00 2001 From: "A. Molzer" <5550310+197g@users.noreply.github.com> Date: Tue, 31 Mar 2026 08:20:38 +0200 Subject: [PATCH] Basic test for EntryByteReader --- src/decoder/value.rs | 44 ++++++++++++++++++++++++++++++++++++++++++++ src/tags.rs | 7 +++++++ 2 files changed, 51 insertions(+) diff --git a/src/decoder/value.rs b/src/decoder/value.rs index 0673f2b..71a8895 100644 --- a/src/decoder/value.rs +++ b/src/decoder/value.rs @@ -194,3 +194,47 @@ impl Seek for EntryBytesReader<'_, R> { } } } + +#[cfg(test)] +mod tests { + use crate::{decoder::Decoder, tags::Tag}; + use std::io::{Read as _, Seek as _, SeekFrom}; + + #[test] + fn can_seek_tag_bytes() -> Result<(), crate::error::TiffError> { + let file = std::fs::File::open(concat!( + env!("CARGO_MANIFEST_DIR"), + "/tests/images/int8_rgb.tif" + )) + .unwrap(); + + let mut decoder = Decoder::open(file).unwrap(); + decoder.next_directory().unwrap(); + + let strips = decoder + .current_ifd() + .find_entry(Tag::StripByteCounts) + .expect("some strip byte count is present"); + + let mut buffer = crate::tags::ValueBuffer::default(); + + decoder + .current_ifd() + .find_tag_buf(Tag::StripByteCounts, &mut buffer) + .expect("some strip byte count is present"); + + let mut reader = decoder.read_entry(strips)?; + + let mut data = vec![]; + reader.read_to_end(&mut data)?; + assert_eq!(buffer.as_bytes(), data); + + reader.seek(SeekFrom::Start(0))?; + reader.read_to_end(&mut data)?; + + let (first, second) = data.split_at(data.len() / 2); + assert_eq!(first, second); + + Ok(()) + } +} diff --git a/src/tags.rs b/src/tags.rs index 85412f5..8a3f481 100644 --- a/src/tags.rs +++ b/src/tags.rs @@ -567,6 +567,13 @@ impl ValueBuffer { } } +/// Create an empty value buffer with `Byte` type. This type choice is arbitrary. +impl Default for ValueBuffer { + fn default() -> Self { + ValueBuffer::empty(Type::BYTE) + } +} + /// Byte order of the TIFF file. #[derive(Clone, Copy, Debug, PartialEq, Eq)] pub enum ByteOrder {