hirola 0.4.0

Hirola is an un-opinionated web framework that is focused on simplicity and predictability
Documentation
#![allow(unused_variables)]
use hirola::dom::app::App;
use hirola::dom::dom_test_utils::next_tick;
use hirola::dom::Dom;
use hirola::prelude::*;
use wasm_bindgen::JsCast;
use wasm_bindgen_test::*;
use web_sys::{Element, Node};

wasm_bindgen_test_configure!(run_in_browser);

fn body() -> Node {
    let doc = web_sys::window().unwrap().document().unwrap();

    doc.create_element("div").unwrap().into()
}

fn inner_html(element: &Node) -> String {
    let element = element.dyn_ref::<Element>().unwrap();
    element.inner_html()
}

#[wasm_bindgen_test]
fn router_pushes() {
    let mut app: App<()> = App::new(());
    app.route("/", |_| {
        html! { <main>"Main"</main> }
    });
    app.route("/page", |_| {
        html! { <main>"Page"</main> }
    });
    let router = app.router().clone();
    let node = body();
    app.mount_to(&node);

    next_tick(move || {
        assert_eq!("<main>Main</main>", inner_html(&node));
        router.push("/page");
        assert_eq!("<main>Page</main>", inner_html(&node));
    });
}

#[wasm_bindgen_test]
fn app_renders() {
    let mut app: App<()> = App::new(());
    fn test_app(app: &App<()>) -> Dom {
        html! { <span>"Test"</span> }
    }
    let node = body();
    app.route("/", test_app);
    app.mount_to(&node);
    next_tick(move || {
        assert_eq!("<span>Test</span>", inner_html(&node));
    });
}

#[wasm_bindgen_test]
fn router_renders() {
    let mut app: App<()> = App::new(());
    app.route("/", |_| {
        html! { <main>"Main"</main> }
    });
    let node = body();
    app.mount_to(&node);
    next_tick(move || {
        assert_eq!("<main>Main</main>", inner_html(&node));
    })
}