vertigo 0.11.2

Reactive Real-DOM library with SSR for Rust
Documentation
use crate::css::next_id::NextId;

use super::super::transform_css;

#[test]
fn test_media() {
    let css = "
    color: red;
    @media screen and (min-width: 400px) {
        color: green;
    };
    ";

    let next_id = NextId::new();

    let (id, selectors) = transform_css(css, &next_id);

    assert_eq!(id, 1);
    assert_eq!(next_id.current(), 1);

    assert_eq!(
        selectors,
        vec!(
            (".autocss_1".into(), "color: red".into()),
            (
                "@media screen and (min-width: 400px)".into(),
                ".autocss_1 { color: green }".into()
            ),
        )
    );
}

#[test]
fn test_doubled() {
    let css = "
    width: 40px;

    @media screen and (min-width: 400px) {
        width: 60px;
    };

    @media screen and (min-width: 800px) {
        width: 80px;
    };
    ";

    let next_id = NextId::new();

    let (id, selectors) = transform_css(css, &next_id);

    assert_eq!(id, 1);
    assert_eq!(next_id.current(), 1);

    assert_eq!(
        selectors,
        vec!(
            (".autocss_1".into(), "width: 40px".into()),
            (
                "@media screen and (min-width: 400px)".into(),
                ".autocss_1 { width: 60px }".into()
            ),
            (
                "@media screen and (min-width: 800px)".into(),
                ".autocss_1 { width: 80px }".into()
            ),
        )
    );
}

#[test]
fn test_media_and_pseudo_1() {
    let css = "
        @media screen and (min-width: 600px) {
            :hover {
                transform: scale(1.5);
            };
        };
        @media screen and (min-width: 1000px) {
            :hover {
                transform: scale(2);
            };
        };
    ";

    let next_id = NextId::new();

    let (id, selectors) = transform_css(css, &next_id);

    assert_eq!(id, 1);
    assert_eq!(next_id.current(), 1);

    assert_eq!(
        selectors[0],
        (
            "@media screen and (min-width: 600px)".into(),
            ".autocss_1:hover { transform: scale(1.5); }".into()
        )
    );
    assert_eq!(
        selectors[1],
        (
            "@media screen and (min-width: 1000px)".into(),
            ".autocss_1:hover { transform: scale(2); }".into()
        ),
    );
}

#[test]
fn test_media_and_pseudo_2() {
    let css = "
    width: 40px;

    @media screen and (min-width: 400px) {
        width: 60px;

        :hover {
            color: red;
        };

        :focus::first-letter {
            color: crimson;
        };
    };

    @media screen and (min-width: 800px) {
        width: 80px;
    };

    @media screen and (max-width: 900px) {
        :focus {
            color: magenta;
        }
    };
    ";

    let next_id = NextId::new();

    let (id, selectors) = transform_css(css, &next_id);

    assert_eq!(id, 1);
    assert_eq!(next_id.current(), 1);

    assert_eq!(selectors[0], (".autocss_1".into(), "width: 40px".into()));
    assert_eq!(
        selectors[1],
        ("@media screen and (min-width: 400px)".into(), ".autocss_1 { width: 60px }\n.autocss_1:hover { color: red; }\n.autocss_1:focus::first-letter { color: crimson; }".into())
    );
    assert_eq!(
        selectors[2],
        (
            "@media screen and (min-width: 800px)".into(),
            ".autocss_1 { width: 80px }".into()
        ),
    );
    assert_eq!(
        selectors[3],
        (
            "@media screen and (max-width: 900px)".into(),
            ".autocss_1:focus { color: magenta; }".into()
        ),
    );
}