use std::{convert::Infallible, vec};
use hxd::{options::HexdOptionsBuilder, writer::WriteHexdump, AsHexd};
struct FlushTester(Vec<usize>, usize);
impl Default for FlushTester {
fn default() -> Self {
FlushTester(vec![], 0)
}
}
impl WriteHexdump for FlushTester {
type Error = Infallible;
type Output = Vec<usize>;
fn write_line(&mut self, _: &str) -> Result<(), Self::Error> {
self.1 += 1;
Ok(())
}
fn consume(r: Result<Self, Self::Error>) -> Self::Output {
r.unwrap().0
}
fn flush(&mut self) -> Result<(), Self::Error> {
self.0.push(self.1);
self.1 = 0;
Ok(())
}
}
#[test]
fn test_flush_after_n_lines() {
let v = vec![0u8; 87];
let flushes = v
.hexd()
.autoskip(false)
.ungrouped(8, hxd::options::Spacing::None)
.flush(hxd::options::FlushMode::AfterNLines(4))
.dump_to::<FlushTester>();
assert_eq!(vec![4usize, 4usize, 3usize], flushes);
}
#[test]
fn test_flush_at_eof() {
let v = vec![0u8; 71];
let flushes = v
.hexd()
.autoskip(false)
.ungrouped(8, hxd::options::Spacing::None)
.flush(hxd::options::FlushMode::End)
.dump_to::<FlushTester>();
assert_eq!(vec![9usize], flushes);
}