All checks were successful
Checking Renovate configuration / validate (pull_request) Successful in 1m5s
Build and test / Clippy (pull_request) Successful in 3m25s
Checking yaml / Run yamllint (pull_request) Successful in 11s
Build and test / Tests (pull_request) Successful in 4m12s
Build and test / Build AMD64 (pull_request) Successful in 4m12s
Build and test / Generate Documentation (pull_request) Successful in 3m52s
57 lines
1.9 KiB
Rust
57 lines
1.9 KiB
Rust
use std::fs::File;
|
|
use std::io::Write;
|
|
|
|
use cbz2pdf::formats::cbz::CbzReader;
|
|
use cbz2pdf::formats::FormatReader;
|
|
|
|
#[test]
|
|
fn cbz_reader_reads_jpgs_and_sorts_by_name() {
|
|
// Build a temporary CBZ with 3 jpgs (including in a subdir) and one non-jpg
|
|
let temp_dir = tempfile::tempdir().expect("create temp dir");
|
|
let cbz_path = temp_dir.path().join("book.cbz");
|
|
|
|
{
|
|
let file = File::create(&cbz_path).expect("create cbz");
|
|
let mut zip = zip::ZipWriter::new(file);
|
|
let options = zip::write::SimpleFileOptions::default();
|
|
|
|
// out of order names
|
|
zip.start_file("002.jpg", options).unwrap();
|
|
// Create a tiny JPEG using the JPEG encoder
|
|
let img = image::DynamicImage::new_rgb8(1, 1).to_rgb8();
|
|
let mut buf = Vec::new();
|
|
{
|
|
let mut cursor = std::io::Cursor::new(&mut buf);
|
|
let mut enc = image::codecs::jpeg::JpegEncoder::new_with_quality(&mut cursor, 80);
|
|
enc.encode(&img, 1, 1, image::ColorType::Rgb8.into())
|
|
.unwrap();
|
|
}
|
|
zip.write_all(&buf).unwrap();
|
|
|
|
zip.start_file("001.jpg", options).unwrap();
|
|
zip.write_all(&buf).unwrap();
|
|
|
|
// nested path should be accepted
|
|
zip.start_file("subdir/003.jpg", options).unwrap();
|
|
zip.write_all(&buf).unwrap();
|
|
|
|
// non-jpg should be ignored
|
|
zip.start_file("notes.txt", options).unwrap();
|
|
zip.write_all(b"hello").unwrap();
|
|
|
|
zip.finish().unwrap();
|
|
}
|
|
|
|
let reader = CbzReader;
|
|
let doc = reader.read(&cbz_path).expect("read cbz");
|
|
|
|
assert_eq!(doc.pages.len(), 3, "should include only jpg files");
|
|
let names: Vec<String> = doc.pages.iter().map(|p| p.name.clone()).collect();
|
|
assert_eq!(
|
|
names,
|
|
vec!["001.jpg", "002.jpg", "003.jpg"],
|
|
"pages sorted by name"
|
|
);
|
|
|
|
// temp_dir goes out of scope and cleans up automatically
|
|
}
|