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::{
    Border, BorderAlignment, BorderStyle, Fill, GradientStop, LinearGradient, Parse,
};

#[test]
fn parse_basic_border() {
    let border = Border::parse("1 solid red");

    assert_eq!(
        border,
        Ok(Border {
            width: 1.0,
            fill: Fill::Color(Color::RED),
            style: BorderStyle::Solid,
            alignment: BorderAlignment::Inner
        })
    );
}

#[test]
fn parse_gradient_border() {
    let shadow = Border::parse("1 solid linear-gradient(red 0%, blue 100%)");
    assert_eq!(
        shadow,
        Ok(Border {
            width: 1.0,
            fill: Fill::LinearGradient(LinearGradient {
                angle: 0.0,
                stops: vec![
                    GradientStop {
                        color: Color::RED,
                        offset: 0.0,
                    },
                    GradientStop {
                        color: Color::BLUE,
                        offset: 1.0,
                    }
                ]
            }),
            style: BorderStyle::Solid,
            alignment: BorderAlignment::Inner
        })
    );
}

#[test]
fn parse_border_alignments() {
    let inner = BorderAlignment::parse("inner");
    let outer = BorderAlignment::parse("outer");
    let center = BorderAlignment::parse("center");
    let invalid = BorderAlignment::parse("invalid");

    assert_eq!(inner, Ok(BorderAlignment::Inner));
    assert_eq!(outer, Ok(BorderAlignment::Outer));
    assert_eq!(center, Ok(BorderAlignment::Center));
    assert_eq!(invalid, Ok(BorderAlignment::Inner));
}

#[test]
fn parse_border_style() {
    let solid = Border::parse("1 solid red");
    let none = Border::parse("1 rust red");
    let invalid = Border::parse("rust solid red");

    assert_eq!(
        solid,
        Ok(Border {
            width: 1.0,
            fill: Fill::Color(Color::RED),
            style: BorderStyle::Solid,
            alignment: BorderAlignment::default()
        })
    );
    assert_eq!(
        none,
        Ok(Border {
            width: 1.0,
            fill: Fill::Color(Color::RED),
            style: BorderStyle::None,
            alignment: BorderAlignment::default()
        })
    );
    assert!(invalid.is_err());
}