natrix 0.2.0

Rust-First frontend framework.
Documentation
#![allow(dead_code)]

use natrix::prelude::*;
use proptest::proptest;
use wasm_bindgen_test::*;

wasm_bindgen_test::wasm_bindgen_test_configure!(run_in_browser);

const HELLO_ID: &str = "__HELLO";

#[derive(Component)]
struct HelloWorld;

impl Component for HelloWorld {
    fn render() -> impl Element<Self::Data> {
        e::h1().id(HELLO_ID).text("Hello World!")
    }
}

#[wasm_bindgen_test]
fn renders_fine() {
    crate::mount_test(HelloWorld);

    let element = crate::get(HELLO_ID);
    assert_eq!(element.text_content(), Some("Hello World!".to_owned()));
}

#[derive(Component)]
struct Render<T>(T);

impl<T: Element<Self::Data> + Clone> Component for Render<T> {
    fn render() -> impl Element<Self::Data> {
        e::div().text(|ctx: R<Self>| ctx.0.clone()).id(HELLO_ID)
    }
}

#[wasm_bindgen_test]
fn render_option_some() {
    crate::mount_test(Render(Some("hey")));

    let element = crate::get(HELLO_ID);
    assert_eq!(element.text_content(), Some("hey".to_owned()));
}

#[wasm_bindgen_test]
fn render_option_none() {
    crate::mount_test(Render(None::<String>));

    let element = crate::get(HELLO_ID);
    assert_eq!(element.text_content(), Some("".to_owned()));
}

#[wasm_bindgen_test]
fn render_result_ok() {
    crate::mount_test(Render(Ok::<&str, &str>("hey")));

    let element = crate::get(HELLO_ID);
    assert_eq!(element.text_content(), Some("hey".to_owned()));
}

#[wasm_bindgen_test]
fn render_result_err() {
    crate::mount_test(Render(Err::<&str, &str>("hey")));

    let element = crate::get(HELLO_ID);
    assert_eq!(element.text_content(), Some("hey".to_owned()));
}

#[cfg(feature = "either")]
mod either_test {
    use either::Either;

    use super::*;

    #[wasm_bindgen_test]
    fn render_either_left() {
        crate::mount_test(Render(Either::Left::<&str, &str>("hey")));

        let element = crate::get(HELLO_ID);
        assert_eq!(element.text_content(), Some("hey".to_owned()));
    }

    #[wasm_bindgen_test]
    fn render_either_right() {
        crate::mount_test(Render(Either::Right::<&str, &str>("hey")));

        let element = crate::get(HELLO_ID);
        assert_eq!(element.text_content(), Some("hey".to_owned()));
    }
}

proptest! {
    #[wasm_bindgen_test]
    fn render_int(x: u32) {

        crate::mount_test(Render(x));
    }
    #[wasm_bindgen_test]
    fn render_float(x: f32) {

        crate::mount_test(Render(x));
    }
    #[wasm_bindgen_test]
    fn render_string(x: String) {

        crate::mount_test(Render(x));
    }
}