From 77bcb54b5eefa2e345f0e81d1ccb8b608a2c3b9c Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Sun, 17 Mar 2024 00:50:16 +0100 Subject: [PATCH] svg-filters(tests): start --- crates/svg-filters/src/lib.rs | 2 +- crates/svg-filters/src/tests.rs | 19 +++++++++ crates/svg-filters/src/tests/color_matrix.rs | 25 +++++++++++ crates/svg-filters/src/tests/complex.rs | 42 +++++++++++++++++++ crates/svg-filters/src/tests/gaussian_blur.rs | 13 ++++++ crates/svg-filters/src/tests/offset.rs | 14 +++++++ 6 files changed, 114 insertions(+), 1 deletion(-) create mode 100644 crates/svg-filters/src/tests.rs create mode 100644 crates/svg-filters/src/tests/color_matrix.rs create mode 100644 crates/svg-filters/src/tests/complex.rs create mode 100644 crates/svg-filters/src/tests/gaussian_blur.rs create mode 100644 crates/svg-filters/src/tests/offset.rs diff --git a/crates/svg-filters/src/lib.rs b/crates/svg-filters/src/lib.rs index cc443d8..c3ddedc 100644 --- a/crates/svg-filters/src/lib.rs +++ b/crates/svg-filters/src/lib.rs @@ -5,4 +5,4 @@ pub mod types; pub use types::nodes::Node; #[cfg(test)] -mod tests {} +mod tests; diff --git a/crates/svg-filters/src/tests.rs b/crates/svg-filters/src/tests.rs new file mode 100644 index 0000000..c09a957 --- /dev/null +++ b/crates/svg-filters/src/tests.rs @@ -0,0 +1,19 @@ +mod color_matrix; + +mod complex; +mod gaussian_blur; +mod offset; + +mod blend {} +mod component_transfer {} +mod composite {} +mod convolve_matrix {} +mod diffuse_lighting {} +mod displacement_map {} +mod flood {} +mod image {} +mod merge {} +mod morphology {} +mod specular_lighting {} +mod tile {} +mod turbulence {} diff --git a/crates/svg-filters/src/tests/color_matrix.rs b/crates/svg-filters/src/tests/color_matrix.rs new file mode 100644 index 0000000..e32d507 --- /dev/null +++ b/crates/svg-filters/src/tests/color_matrix.rs @@ -0,0 +1,25 @@ +use crate::{ + codegen::SvgDocument, + types::nodes::{primitives::color_matrix::ColorMatrixType, standard_input::StandardInput}, +}; + +#[test] +fn test_greyscale_channel_extraction() { + let mut doc = SvgDocument::new(); + let greyscale = doc.create_filter("greyscale"); + + greyscale.color_matrix( + StandardInput::SourceGraphic, + ColorMatrixType::Matrix(Box::new([ + 1., 0., 0., 0., 0., // + 1., 0., 0., 0., 0., // + 1., 0., 0., 0., 0., // + 0., 0., 0., 1., 0., + ])), + ); + + assert_eq!( + doc.generate_svg(), + r#""# + ); +} diff --git a/crates/svg-filters/src/tests/complex.rs b/crates/svg-filters/src/tests/complex.rs new file mode 100644 index 0000000..9b28304 --- /dev/null +++ b/crates/svg-filters/src/tests/complex.rs @@ -0,0 +1,42 @@ +use crate::{ + codegen::SvgDocument, + types::nodes::{primitives::color_matrix::ColorMatrixType, standard_input::StandardInput}, +}; + +#[test] +fn test_chrom_abb() { + let mut doc = SvgDocument::new(); + let chromabb = doc.create_filter("chromabb_gen"); + + let chan_r = chromabb.color_matrix( + StandardInput::SourceGraphic, + ColorMatrixType::Matrix(Box::new([ + 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., + ])), + ); + let offset_r = chromabb.offset(chan_r, 25., 0.); + let blur_r = chromabb.gaussian_blur_xy(offset_r, 5, 0); + + let chan_b = chromabb.color_matrix( + StandardInput::SourceGraphic, + ColorMatrixType::Matrix(Box::new([ + 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 1., 0., + ])), + ); + let offset_b = chromabb.offset(chan_b, -25., 0.); + let blur_b = chromabb.gaussian_blur_xy(offset_b, 5, 0); + + let composite_rb = chromabb.composite_arithmetic(blur_r, blur_b, 0., 1., 1., 0.); + + let chan_g = chromabb.color_matrix( + StandardInput::SourceGraphic, + ColorMatrixType::Matrix(Box::new([ + 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., + ])), + ); + chromabb.composite_arithmetic(composite_rb, chan_g, 0., 1., 1., 0.); + assert_eq!( + doc.generate_svg(), + r#""# + ); +} diff --git a/crates/svg-filters/src/tests/gaussian_blur.rs b/crates/svg-filters/src/tests/gaussian_blur.rs new file mode 100644 index 0000000..5739794 --- /dev/null +++ b/crates/svg-filters/src/tests/gaussian_blur.rs @@ -0,0 +1,13 @@ +use crate::{codegen::SvgDocument, types::nodes::standard_input::StandardInput}; + +#[test] +fn test_simple_blur() { + let mut doc = SvgDocument::new(); + let blur = doc.create_filter("blur"); + + blur.gaussian_blur_xy(StandardInput::SourceGraphic, 30, 30); + assert_eq!( + doc.generate_svg(), + r#""# + ) +} diff --git a/crates/svg-filters/src/tests/offset.rs b/crates/svg-filters/src/tests/offset.rs new file mode 100644 index 0000000..4d7319e --- /dev/null +++ b/crates/svg-filters/src/tests/offset.rs @@ -0,0 +1,14 @@ +use crate::{codegen::SvgDocument, types::nodes::standard_input::StandardInput}; + +#[test] +fn test_offset_simple() { + let mut doc = SvgDocument::new(); + let mut offset = doc.create_filter("offset"); + + offset.offset(StandardInput::SourceGraphic, 25., -25.); + + assert_eq!( + doc.generate_svg(), + r#""# + ) +}