Add error types and core image types: ImageFormat, ImageSource, Dimensions, QualityPreset
This commit is contained in:
46
pixstrip-core/tests/error_tests.rs
Normal file
46
pixstrip-core/tests/error_tests.rs
Normal file
@@ -0,0 +1,46 @@
|
||||
use pixstrip_core::error::PixstripError;
|
||||
|
||||
#[test]
|
||||
fn error_display_image_load() {
|
||||
let err = PixstripError::ImageLoad {
|
||||
path: "/tmp/bad.jpg".into(),
|
||||
reason: "corrupt header".into(),
|
||||
};
|
||||
let msg = err.to_string();
|
||||
assert!(msg.contains("/tmp/bad.jpg"));
|
||||
assert!(msg.contains("corrupt header"));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn error_display_unsupported_format() {
|
||||
let err = PixstripError::UnsupportedFormat {
|
||||
format: "bmp".into(),
|
||||
};
|
||||
assert!(err.to_string().contains("bmp"));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn error_display_io() {
|
||||
let io_err = std::io::Error::new(std::io::ErrorKind::NotFound, "file missing");
|
||||
let err = PixstripError::Io(io_err);
|
||||
assert!(err.to_string().contains("file missing"));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn error_display_output_exists() {
|
||||
let err = PixstripError::OutputExists {
|
||||
path: "/tmp/out.jpg".into(),
|
||||
};
|
||||
assert!(err.to_string().contains("/tmp/out.jpg"));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn error_display_processing() {
|
||||
let err = PixstripError::Processing {
|
||||
operation: "resize".into(),
|
||||
reason: "invalid dimensions".into(),
|
||||
};
|
||||
let msg = err.to_string();
|
||||
assert!(msg.contains("resize"));
|
||||
assert!(msg.contains("invalid dimensions"));
|
||||
}
|
||||
83
pixstrip-core/tests/types_tests.rs
Normal file
83
pixstrip-core/tests/types_tests.rs
Normal file
@@ -0,0 +1,83 @@
|
||||
use pixstrip_core::types::*;
|
||||
use std::path::PathBuf;
|
||||
|
||||
#[test]
|
||||
fn image_format_from_extension() {
|
||||
assert_eq!(ImageFormat::from_extension("jpg"), Some(ImageFormat::Jpeg));
|
||||
assert_eq!(ImageFormat::from_extension("JPEG"), Some(ImageFormat::Jpeg));
|
||||
assert_eq!(ImageFormat::from_extension("png"), Some(ImageFormat::Png));
|
||||
assert_eq!(ImageFormat::from_extension("webp"), Some(ImageFormat::WebP));
|
||||
assert_eq!(ImageFormat::from_extension("avif"), Some(ImageFormat::Avif));
|
||||
assert_eq!(ImageFormat::from_extension("gif"), Some(ImageFormat::Gif));
|
||||
assert_eq!(ImageFormat::from_extension("tiff"), Some(ImageFormat::Tiff));
|
||||
assert_eq!(ImageFormat::from_extension("tif"), Some(ImageFormat::Tiff));
|
||||
assert_eq!(ImageFormat::from_extension("xyz"), None);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn image_format_extension_string() {
|
||||
assert_eq!(ImageFormat::Jpeg.extension(), "jpg");
|
||||
assert_eq!(ImageFormat::Png.extension(), "png");
|
||||
assert_eq!(ImageFormat::WebP.extension(), "webp");
|
||||
assert_eq!(ImageFormat::Avif.extension(), "avif");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn image_source_from_path() {
|
||||
let source = ImageSource::from_path("/tmp/photo.jpg");
|
||||
assert_eq!(source.path, PathBuf::from("/tmp/photo.jpg"));
|
||||
assert_eq!(source.original_format, Some(ImageFormat::Jpeg));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn image_source_unknown_format() {
|
||||
let source = ImageSource::from_path("/tmp/file.xyz");
|
||||
assert_eq!(source.original_format, None);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn dimensions_display() {
|
||||
let dims = Dimensions { width: 1920, height: 1080 };
|
||||
assert_eq!(dims.to_string(), "1920x1080");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn dimensions_aspect_ratio() {
|
||||
let dims = Dimensions { width: 1920, height: 1080 };
|
||||
let ratio = dims.aspect_ratio();
|
||||
assert!((ratio - 16.0 / 9.0).abs() < 0.01);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn dimensions_fit_within() {
|
||||
let original = Dimensions { width: 4000, height: 3000 };
|
||||
let max_box = Dimensions { width: 1200, height: 1200 };
|
||||
let fitted = original.fit_within(max_box, false);
|
||||
assert_eq!(fitted.width, 1200);
|
||||
assert_eq!(fitted.height, 900);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn dimensions_fit_within_no_upscale() {
|
||||
let original = Dimensions { width: 800, height: 600 };
|
||||
let max_box = Dimensions { width: 1200, height: 1200 };
|
||||
let fitted = original.fit_within(max_box, false);
|
||||
assert_eq!(fitted.width, 800);
|
||||
assert_eq!(fitted.height, 600);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn dimensions_fit_within_allow_upscale() {
|
||||
let original = Dimensions { width: 800, height: 600 };
|
||||
let max_box = Dimensions { width: 1200, height: 1200 };
|
||||
let fitted = original.fit_within(max_box, true);
|
||||
assert_eq!(fitted.width, 1200);
|
||||
assert_eq!(fitted.height, 900);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn quality_preset_values() {
|
||||
assert!(QualityPreset::Maximum.jpeg_quality() > QualityPreset::High.jpeg_quality());
|
||||
assert!(QualityPreset::High.jpeg_quality() > QualityPreset::Medium.jpeg_quality());
|
||||
assert!(QualityPreset::Medium.jpeg_quality() > QualityPreset::Low.jpeg_quality());
|
||||
}
|
||||
Reference in New Issue
Block a user