Add ImageLoader and file discovery modules
ImageLoader: load image info (dimensions, format, file size) and pixels. Discovery: find image files by extension, flat or recursive, single file or directory. All 9 tests passing.
This commit is contained in:
73
pixstrip-core/tests/loader_tests.rs
Normal file
73
pixstrip-core/tests/loader_tests.rs
Normal file
@@ -0,0 +1,73 @@
|
||||
use pixstrip_core::loader::ImageLoader;
|
||||
use pixstrip_core::types::Dimensions;
|
||||
use std::path::Path;
|
||||
|
||||
fn create_test_jpeg(path: &Path) {
|
||||
use image::{RgbImage, ImageFormat};
|
||||
let img = RgbImage::from_fn(100, 80, |x, y| {
|
||||
image::Rgb([(x % 256) as u8, (y % 256) as u8, 128])
|
||||
});
|
||||
img.save_with_format(path, ImageFormat::Jpeg).unwrap();
|
||||
}
|
||||
|
||||
fn create_test_png(path: &Path) {
|
||||
use image::{RgbaImage, ImageFormat};
|
||||
let img = RgbaImage::from_fn(200, 150, |x, y| {
|
||||
image::Rgba([(x % 256) as u8, (y % 256) as u8, 100, 255])
|
||||
});
|
||||
img.save_with_format(path, ImageFormat::Png).unwrap();
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn load_jpeg_dimensions() {
|
||||
let dir = tempfile::tempdir().unwrap();
|
||||
let path = dir.path().join("test.jpg");
|
||||
create_test_jpeg(&path);
|
||||
|
||||
let loader = ImageLoader::new();
|
||||
let info = loader.load_info(&path).unwrap();
|
||||
assert_eq!(info.dimensions, Dimensions { width: 100, height: 80 });
|
||||
assert_eq!(info.format, Some(pixstrip_core::types::ImageFormat::Jpeg));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn load_png_dimensions() {
|
||||
let dir = tempfile::tempdir().unwrap();
|
||||
let path = dir.path().join("test.png");
|
||||
create_test_png(&path);
|
||||
|
||||
let loader = ImageLoader::new();
|
||||
let info = loader.load_info(&path).unwrap();
|
||||
assert_eq!(info.dimensions, Dimensions { width: 200, height: 150 });
|
||||
assert_eq!(info.format, Some(pixstrip_core::types::ImageFormat::Png));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn load_pixels() {
|
||||
let dir = tempfile::tempdir().unwrap();
|
||||
let path = dir.path().join("test.jpg");
|
||||
create_test_jpeg(&path);
|
||||
|
||||
let loader = ImageLoader::new();
|
||||
let pixels = loader.load_pixels(&path).unwrap();
|
||||
assert_eq!(pixels.width(), 100);
|
||||
assert_eq!(pixels.height(), 80);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn load_nonexistent_file() {
|
||||
let loader = ImageLoader::new();
|
||||
let result = loader.load_info(Path::new("/tmp/does_not_exist_pixstrip.jpg"));
|
||||
assert!(result.is_err());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn file_size_bytes() {
|
||||
let dir = tempfile::tempdir().unwrap();
|
||||
let path = dir.path().join("test.jpg");
|
||||
create_test_jpeg(&path);
|
||||
|
||||
let loader = ImageLoader::new();
|
||||
let info = loader.load_info(&path).unwrap();
|
||||
assert!(info.file_size > 0);
|
||||
}
|
||||
Reference in New Issue
Block a user