freya-core 0.3.4

Internal core funcionatilies for Freya.
Documentation
use freya_core::{
    parsing::Parse,
    values::{
        Fill,
        GradientStop,
        LinearGradient,
        Shadow,
        ShadowPosition,
    },
};
use freya_engine::prelude::*;

#[test]
fn parse_big_shadow() {
    let shadow = Shadow::parse("1 2 50 25.0 red");
    assert_eq!(
        shadow,
        Ok(Shadow {
            x: 1.0,
            y: 2.0,
            blur: 50.0,
            spread: 25.0,
            fill: Fill::Color(Color::RED),
            position: ShadowPosition::Normal
        })
    );
}

#[test]
fn parse_inset_shadow() {
    let shadow = Shadow::parse("inset 1 2 50 25.0 red");
    assert_eq!(
        shadow,
        Ok(Shadow {
            x: 1.0,
            y: 2.0,
            blur: 50.0,
            spread: 25.0,
            fill: Fill::Color(Color::RED),
            position: ShadowPosition::Inset
        })
    );
}

#[test]
fn parse_shadow_with_assumed_spread() {
    let shadow = Shadow::parse("inset 1 2 50 red");
    assert_eq!(
        shadow,
        Ok(Shadow {
            x: 1.0,
            y: 2.0,
            blur: 50.0,
            spread: 0.0,
            fill: Fill::Color(Color::RED),
            position: ShadowPosition::Inset
        })
    );
}

#[test]
fn parse_gradient_shadow() {
    let shadow = Shadow::parse("inset 1 2 50 linear-gradient(red 0%, blue 100%)");
    assert_eq!(
        shadow,
        Ok(Shadow {
            x: 1.0,
            y: 2.0,
            blur: 50.0,
            spread: 0.0,
            fill: Fill::LinearGradient(Box::new(LinearGradient {
                angle: 0.0,
                stops: vec![
                    GradientStop {
                        color: Color::RED,
                        offset: 0.0,
                    },
                    GradientStop {
                        color: Color::BLUE,
                        offset: 1.0,
                    }
                ]
            })),
            position: ShadowPosition::Inset
        })
    );
}