hirola 0.3.0

Hirola is an un-opinionated web framework that is focused on simplicity and predictability
#![allow(unused_variables)]
use hirola::prelude::*;
use hirola_core::dom_test_utils::next_tick;
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();
    let element = doc.create_element("div").unwrap().into();
    element
}

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();
    let root = app.mount_to(&node);
    assert_eq!("<main>Main</main>", inner_html(&node));
    router.push("/page");

    next_tick(move || {
        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);
    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();
    let dom = app.mount_to(&node);
    assert_eq!("<main>Main</main>", inner_html(&node));
}