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#"<svg><filter id="chromabb_gen"><feColorMatrix values="0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0" in="SourceGraphic" result="r13"/><feColorMatrix values="0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0" in="SourceGraphic" result="r9"/><feOffset dx="-25" dy="0" in="r9" result="r10"/><feGaussianBlur stdDeviation="5 0" in="r10" result="r11"/><feColorMatrix values="1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0" in="SourceGraphic" result="r6"/><feOffset dx="25" dy="0" in="r6" result="r7"/><feGaussianBlur stdDeviation="5 0" in="r7" result="r8"/><feComposite operator="arithmetic" k1="0" k2="1" k3="1" k4="0" in="r8" in2="r11" result="r12"/><feComposite operator="arithmetic" k1="0" k2="1" k3="1" k4="0" in="r12" in2="r13"/></filter></svg>"#
    );
}
