use oxidize_pdf::operations::{
merge_pdf_files, rotate_all_pages, split_into_pages, PageRange, RotationAngle,
};
use oxidize_pdf::{Document, Page};
use std::path::Path;
use tempfile::TempDir;
#[test]
fn test_split_merge_rotate_workflow() {
let temp_dir = TempDir::new().unwrap();
let test_dir = temp_dir.path();
let test_pdf = test_dir.join("test_multi.pdf");
create_test_pdf(&test_pdf, 3).unwrap();
let split_pattern = test_dir.join("split_page_{}.pdf");
let split_pattern_str = split_pattern.to_string_lossy();
let split_files = split_into_pages(&test_pdf, &split_pattern_str).unwrap();
assert_eq!(split_files.len(), 3);
for file in &split_files {
assert!(file.exists(), "Split file {file:?} should exist");
}
let merged_pdf = test_dir.join("merged.pdf");
merge_pdf_files(&split_files, &merged_pdf).unwrap();
assert!(merged_pdf.exists());
let rotated_pdf = test_dir.join("rotated.pdf");
rotate_all_pages(&merged_pdf, &rotated_pdf, RotationAngle::Clockwise90).unwrap();
assert!(rotated_pdf.exists());
}
#[test]
fn test_page_range_parsing() {
let range = PageRange::parse("1").unwrap();
assert_eq!(range.get_indices(10).unwrap(), vec![0]);
let range = PageRange::parse("2-5").unwrap();
assert_eq!(range.get_indices(10).unwrap(), vec![1, 2, 3, 4]);
let range = PageRange::parse("1,3,5").unwrap();
assert_eq!(range.get_indices(10).unwrap(), vec![0, 2, 4]);
let range = PageRange::parse("all").unwrap();
assert_eq!(range.get_indices(3).unwrap(), vec![0, 1, 2]);
let result = PageRange::parse("5-2");
assert!(result.is_err());
}
#[test]
fn test_rotation_angles() {
assert_eq!(RotationAngle::from_degrees(0).unwrap(), RotationAngle::None);
assert_eq!(
RotationAngle::from_degrees(90).unwrap(),
RotationAngle::Clockwise90
);
assert_eq!(
RotationAngle::from_degrees(180).unwrap(),
RotationAngle::Rotate180
);
assert_eq!(
RotationAngle::from_degrees(270).unwrap(),
RotationAngle::Clockwise270
);
assert_eq!(
RotationAngle::from_degrees(360).unwrap(),
RotationAngle::None
);
assert_eq!(
RotationAngle::from_degrees(-90).unwrap(),
RotationAngle::Clockwise270
);
assert!(RotationAngle::from_degrees(45).is_err());
}
fn create_test_pdf<P: AsRef<Path>>(path: P, page_count: usize) -> oxidize_pdf::Result<()> {
let mut doc = Document::new();
for i in 1..=page_count {
let mut page = Page::a4();
page.text()
.set_font(oxidize_pdf::text::Font::Helvetica, 24.0)
.at(100.0, 700.0)
.write(&format!("Test Page {i}"))?;
doc.add_page(page);
}
doc.save(path.as_ref())?;
Ok(())
}