wasm-css 0.2.0

Ergonomic WASM CSS Framework
Documentation
// Authors: Robert Lopez

#![allow(dead_code)]

use crate::{named_style, style, Style};
use wasm_bindgen_test::*;
use web_sys::{window, Element};

wasm_bindgen_test_configure!(run_in_browser);

fn get_style_element(style: &Style) -> Element {
    let window = window().unwrap();
    let document = window.document().unwrap();

    document.get_element_by_id(&style.css_name).unwrap()
}

fn assert_style_doesnt_exists(id: &str) {
    let window = window().unwrap();
    let document = window.document().unwrap();

    assert!(document.get_element_by_id(id).is_none());
}

#[wasm_bindgen_test]
fn test_generate_css() {
    let style = style!(
        "
      font-size: {} rem;;

        &:hover    {{
            color :   blue;
            background-color: red;
        }}

        @media  (    max-width: 80 0  px ) {{
            max-width: 100rem;
            max-height: 20 0rem;
        }}

        background-color: rgba(13 7, 137, 137, 0.1);
        ",
        30
    )
    .unwrap();

    let id = style.css_name.clone();
    let style_element = get_style_element(&style);

    let mut expected_css = style.css_name.clone();
    expected_css += " {\n\tbackground-color: rgba(137, 137, 137, 0.1);\n\tfont-size: 30rem;\n\t&:hover {\n\t\tbackground-color: red;\n\t\tcolor: blue;\n\t}\n\t@media (max-width: 800px) {\n\t\tmax-height: 200rem;\n\t\tmax-width: 100rem;\n\t}\n}";

    assert_eq!(style.css, expected_css);
    assert_eq!(style.css, style.components.to_css(&style.css_name));
    assert_eq!(style.css, style_element.inner_html());

    style.delete().unwrap();

    assert_style_doesnt_exists(&id);
}

#[wasm_bindgen_test]
fn test_mutate_css_1() {
    let mut style = style!(
        "
      font-size: {} rem;;

        &:hover    {{
            color :   blue;
            background-color: red;
        }}

        @media  (    max-width: 80 0  px ) {{
            max-width: 100rem;
            max-height: 20 0rem;
        }}

        background-color: rgba(13 7, 137, 137, 0.1);
        ",
        30
    )
    .unwrap();

    style
        .remove_keys(vec!["&:hover", "@media (max-width: 800px)", "font-size"])
        .unwrap();

    let id = style.css_name.clone();
    let style_element = get_style_element(&style);

    let mut expected_css = style.css_name.clone();
    expected_css += " {\n\tbackground-color: rgba(137, 137, 137, 0.1);\n}";

    assert_eq!(style.css, expected_css);
    assert_eq!(style.css, style.components.to_css(&style.css_name));
    assert_eq!(style.css, style_element.inner_html());

    style.delete().unwrap();

    assert_style_doesnt_exists(&id);
}

#[wasm_bindgen_test]
fn test_mutate_css_2() {
    let mut style = named_style!(
        ".myClass",
        "
      font-size: {} rem;;

        &:hover    {{
            color :   blue;
            background-color: red;
        }}
        ",
        30
    )
    .unwrap();

    style.extend_from_css("&:hover { color: red; }").unwrap();
    style
        .extend_from_style(
            &style!("&:hover {{ color: green; }} @media (max-width: 800px) {{ color: blue; }}")
                .unwrap(),
        )
        .unwrap();

    let id = style.css_name.clone();
    let style_element = get_style_element(&style);

    let mut expected_css = style.css_name.clone();
    expected_css += " {\n\tfont-size: 30rem;\n\t&:hover {\n\t\tcolor: green;\n\t}\n\t@media (max-width: 800px) {\n\t\tcolor: blue;\n\t}\n}";

    assert_eq!(style.css, expected_css);
    assert_eq!(style.css, style.components.to_css(&style.css_name));
    assert_eq!(style.css, style_element.inner_html());

    style.delete().unwrap();

    assert_style_doesnt_exists(&id);
}