use crate::page::{Page, PageState};
fn make_page_info(width: u32, height: u32, striped: bool, stripe_size: u16) -> Vec<u8> {
let mut data = vec![0u8; 19];
data[0..4].copy_from_slice(&width.to_be_bytes());
data[4..8].copy_from_slice(&height.to_be_bytes());
data[16] = 0;
let striping: i16 = if striped {
(stripe_size as i16) | -0x8000i16 } else {
0
};
data[17..19].copy_from_slice(&striping.to_be_bytes());
data
}
#[test]
fn create_page() {
let mut page = Page::new();
assert_eq!(page.state, PageState::Free);
let data = make_page_info(100, 50, false, 0);
page.parse_info(1, &data).unwrap();
assert_eq!(page.state, PageState::New);
assert_eq!(page.number, 1);
assert_eq!(page.width, 100);
assert_eq!(page.height, 50);
assert!(!page.striped);
assert!(page.image.is_some());
let img = page.image.as_ref().unwrap();
assert_eq!(img.width, 100);
assert_eq!(img.height, 50);
}
#[test]
fn page_default_pixel() {
let mut page = Page::new();
let data = make_page_info(8, 1, false, 0);
page.parse_info(1, &data).unwrap();
let img = page.image.as_ref().unwrap();
assert_eq!(img.get_pixel(0, 0), 0);
let mut page2 = Page::new();
let mut data2 = make_page_info(8, 1, false, 0);
data2[16] = 0x04; page2.parse_info(1, &data2).unwrap();
let img2 = page2.image.as_ref().unwrap();
assert_eq!(img2.get_pixel(0, 0), 1); }
#[test]
fn stripe_extend() {
use crate::image::{ComposeOp, Jbig2Image};
let mut page = Page::new();
let data = make_page_info(8, 0xFFFFFFFF, true, 10);
page.parse_info(1, &data).unwrap();
assert!(page.striped);
assert_eq!(page.height, 0xFFFFFFFF);
let img = page.image.as_ref().unwrap();
assert_eq!(img.height, 10);
let mut src = Jbig2Image::new(8, 5);
src.set_pixel(0, 0, 1);
page.add_result(&src, 0, 12, ComposeOp::Or).unwrap();
let img = page.image.as_ref().unwrap();
assert!(img.height >= 17); assert_eq!(img.get_pixel(0, 12), 1);
}
#[test]
fn page_complete_state() {
let mut page = Page::new();
let data = make_page_info(8, 8, false, 0);
page.parse_info(1, &data).unwrap();
assert_eq!(page.state, PageState::New);
page.complete();
assert_eq!(page.state, PageState::Complete);
}
#[test]
fn page_end_row() {
let mut page = Page::new();
let data = make_page_info(8, 8, true, 8);
page.parse_info(1, &data).unwrap();
page.set_end_row(4);
assert_eq!(page.end_row, 4);
page.set_end_row(8);
assert_eq!(page.end_row, 8);
}