Add metadata stripping, watermark positioning, and rename template modules
Metadata: JPEG EXIF stripping (APP1 segment removal).
Watermark: 9-position grid calculation with margin support.
Rename: template parser with {name}, {ext}, {counter:N}, {width}, {height}
and collision resolution with auto-suffix.
Phase 4 complete - 79 tests passing, zero clippy warnings.
This commit is contained in:
111
pixstrip-core/tests/watermark_tests.rs
Normal file
111
pixstrip-core/tests/watermark_tests.rs
Normal file
@@ -0,0 +1,111 @@
|
||||
use pixstrip_core::operations::watermark::calculate_position;
|
||||
use pixstrip_core::operations::WatermarkPosition;
|
||||
use pixstrip_core::types::Dimensions;
|
||||
|
||||
#[test]
|
||||
fn position_top_left() {
|
||||
let (x, y) = calculate_position(
|
||||
WatermarkPosition::TopLeft,
|
||||
Dimensions { width: 1920, height: 1080 },
|
||||
Dimensions { width: 200, height: 50 },
|
||||
10,
|
||||
);
|
||||
assert_eq!(x, 10);
|
||||
assert_eq!(y, 10);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn position_center() {
|
||||
let (x, y) = calculate_position(
|
||||
WatermarkPosition::Center,
|
||||
Dimensions { width: 1920, height: 1080 },
|
||||
Dimensions { width: 200, height: 50 },
|
||||
10,
|
||||
);
|
||||
assert_eq!(x, 860); // (1920 - 200) / 2
|
||||
assert_eq!(y, 515); // (1080 - 50) / 2
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn position_bottom_right() {
|
||||
let (x, y) = calculate_position(
|
||||
WatermarkPosition::BottomRight,
|
||||
Dimensions { width: 1920, height: 1080 },
|
||||
Dimensions { width: 200, height: 50 },
|
||||
10,
|
||||
);
|
||||
assert_eq!(x, 1710); // 1920 - 200 - 10
|
||||
assert_eq!(y, 1020); // 1080 - 50 - 10
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn position_top_center() {
|
||||
let (x, y) = calculate_position(
|
||||
WatermarkPosition::TopCenter,
|
||||
Dimensions { width: 1920, height: 1080 },
|
||||
Dimensions { width: 200, height: 50 },
|
||||
10,
|
||||
);
|
||||
assert_eq!(x, 860); // (1920 - 200) / 2
|
||||
assert_eq!(y, 10);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn position_bottom_center() {
|
||||
let (x, y) = calculate_position(
|
||||
WatermarkPosition::BottomCenter,
|
||||
Dimensions { width: 1920, height: 1080 },
|
||||
Dimensions { width: 200, height: 50 },
|
||||
10,
|
||||
);
|
||||
assert_eq!(x, 860);
|
||||
assert_eq!(y, 1020);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn position_middle_left() {
|
||||
let (x, y) = calculate_position(
|
||||
WatermarkPosition::MiddleLeft,
|
||||
Dimensions { width: 1920, height: 1080 },
|
||||
Dimensions { width: 200, height: 50 },
|
||||
10,
|
||||
);
|
||||
assert_eq!(x, 10);
|
||||
assert_eq!(y, 515);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn position_middle_right() {
|
||||
let (x, y) = calculate_position(
|
||||
WatermarkPosition::MiddleRight,
|
||||
Dimensions { width: 1920, height: 1080 },
|
||||
Dimensions { width: 200, height: 50 },
|
||||
10,
|
||||
);
|
||||
assert_eq!(x, 1710);
|
||||
assert_eq!(y, 515);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn position_top_right() {
|
||||
let (x, y) = calculate_position(
|
||||
WatermarkPosition::TopRight,
|
||||
Dimensions { width: 1920, height: 1080 },
|
||||
Dimensions { width: 200, height: 50 },
|
||||
10,
|
||||
);
|
||||
assert_eq!(x, 1710);
|
||||
assert_eq!(y, 10);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn position_bottom_left() {
|
||||
let (x, y) = calculate_position(
|
||||
WatermarkPosition::BottomLeft,
|
||||
Dimensions { width: 1920, height: 1080 },
|
||||
Dimensions { width: 200, height: 50 },
|
||||
10,
|
||||
);
|
||||
assert_eq!(x, 10);
|
||||
assert_eq!(y, 1020);
|
||||
}
|
||||
Reference in New Issue
Block a user