freya-node-state 0.2.1

Internal Node states for Dioxus RealDOM elements used in Freya.
Documentation
use freya_engine::prelude::*;
use freya_node_state::{GradientStop, LinearGradient, Parse};

#[test]
fn parse_basic_gradient() {
    assert_eq!(
        LinearGradient::parse("linear-gradient(red 0%, blue 100%)"),
        Ok(LinearGradient {
            angle: 0.0,
            stops: vec![
                GradientStop {
                    color: Color::RED,
                    offset: 0.0,
                },
                GradientStop {
                    color: Color::BLUE,
                    offset: 1.0,
                }
            ]
        })
    );
}

#[test]
fn parse_rgb_hsl_gradient() {
    assert_eq!(
        LinearGradient::parse("linear-gradient(0deg, rgb(255, 0, 0) 0%, blue 100%)"),
        Ok(LinearGradient {
            angle: 0.0,
            stops: vec![
                GradientStop {
                    color: Color::from_rgb(255, 0, 0),
                    offset: 0.0,
                },
                GradientStop {
                    color: Color::from_rgb(0, 0, 255),
                    offset: 1.0,
                }
            ]
        })
    );
}

#[test]
fn parse_gradient_angle() {
    assert_eq!(
        LinearGradient::parse("linear-gradient(45deg, red 0%, blue 100%)"),
        Ok(LinearGradient {
            angle: f32::to_radians(45.0),
            stops: vec![
                GradientStop {
                    color: Color::from_rgb(255, 0, 0),
                    offset: 0.0,
                },
                GradientStop {
                    color: Color::from_rgb(0, 0, 255),
                    offset: 1.0,
                }
            ]
        })
    );
}

#[test]
fn invalid_gradients() {
    let incorrect_name = LinearGradient::parse("lkdsjfalkasdasdjaslkfjsdklfs(red 0%, blue 100%)");
    let extra_lparen = LinearGradient::parse("linear-gradient((red 0%, blue 100%)");
    let extra_rparen = LinearGradient::parse("linear-gradient(red 0%, blue 100%))");
    let missing_rparen = LinearGradient::parse("linear-gradient(red 0%, blue 100%");
    let missing_commas = LinearGradient::parse("linear-gradient(red 0% blue 100%)");
    let extra_commas = LinearGradient::parse("linear-gradient(red 0%, blue 100%,)");
    let extra_stop_component =
        LinearGradient::parse("linear-gradient(red 0% something, blue 100%)");
    let bad_angle_unit = LinearGradient::parse("linear-gradient(45ft, red 0%, blue 100%,)");
    let bad_offset_unit = LinearGradient::parse("linear-gradient(45deg, red 0atm, blue 100kpa)");
    let missing_color = LinearGradient::parse("linear-gradient(45deg, 0%, blue 100%)");
    let missing_offset = LinearGradient::parse("linear-gradient(45deg, red, blue 100%)");

    assert_eq!(incorrect_name.is_err(), true);
    assert_eq!(extra_lparen.is_err(), true);
    assert_eq!(extra_rparen.is_err(), true);
    assert_eq!(missing_rparen.is_err(), true);
    assert_eq!(missing_commas.is_err(), true);
    assert_eq!(extra_commas.is_err(), true);
    assert_eq!(extra_stop_component.is_err(), true);
    assert_eq!(bad_angle_unit.is_err(), true);
    assert_eq!(bad_offset_unit.is_err(), true);
    assert_eq!(missing_color.is_err(), true);
    assert_eq!(missing_offset.is_err(), true);
}