hsml 0.7.2

A pug-inspired HTML preprocessor
Documentation
#![cfg(target_arch = "wasm32")]

use wasm_bindgen::JsValue;
use wasm_bindgen_test::*;

#[wasm_bindgen_test]
fn wasm_compile_content_returns_html() {
    let result = hsml::compile_content("h1 Hello\n");
    assert_eq!(result.unwrap(), "<h1>Hello</h1>");
}

#[wasm_bindgen_test]
fn wasm_compile_content_returns_error_for_invalid_input() {
    let result = hsml::compile_content("@@@invalid");
    assert!(result.is_err());
}

#[wasm_bindgen_test]
fn wasm_compile_with_diagnostics_success() {
    let result = hsml::compile_content_with_diagnostics("h1 Hello\n", JsValue::UNDEFINED);

    let success = js_sys::Reflect::get(&result, &JsValue::from_str("success")).unwrap();
    assert_eq!(success, JsValue::from_bool(true));

    let html = js_sys::Reflect::get(&result, &JsValue::from_str("html")).unwrap();
    assert_eq!(html, JsValue::from_str("<h1>Hello</h1>"));

    let diagnostics = js_sys::Reflect::get(&result, &JsValue::from_str("diagnostics")).unwrap();
    let arr = js_sys::Array::from(&diagnostics);
    assert_eq!(arr.length(), 0);
}

#[wasm_bindgen_test]
fn wasm_compile_with_diagnostics_warning() {
    let result = hsml::compile_content_with_diagnostics("h1.foo.foo Hello\n", JsValue::UNDEFINED);

    let success = js_sys::Reflect::get(&result, &JsValue::from_str("success")).unwrap();
    assert_eq!(success, JsValue::from_bool(true));

    let html = js_sys::Reflect::get(&result, &JsValue::from_str("html")).unwrap();
    assert!(html.is_string(), "html should be a string");

    let diagnostics = js_sys::Reflect::get(&result, &JsValue::from_str("diagnostics")).unwrap();
    let arr = js_sys::Array::from(&diagnostics);
    assert_eq!(arr.length(), 1);

    let diag = arr.get(0);
    let severity = js_sys::Reflect::get(&diag, &JsValue::from_str("severity")).unwrap();
    assert_eq!(severity, JsValue::from_str("warning"));
}

#[wasm_bindgen_test]
fn wasm_compile_with_diagnostics_error() {
    let result = hsml::compile_content_with_diagnostics("@@@invalid", JsValue::UNDEFINED);

    let success = js_sys::Reflect::get(&result, &JsValue::from_str("success")).unwrap();
    assert_eq!(success, JsValue::from_bool(false));

    let html = js_sys::Reflect::get(&result, &JsValue::from_str("html")).unwrap();
    assert!(html.is_null(), "html should be null on error");

    let diagnostics = js_sys::Reflect::get(&result, &JsValue::from_str("diagnostics")).unwrap();
    let arr = js_sys::Array::from(&diagnostics);
    assert!(arr.length() > 0, "should have at least one diagnostic");

    let diag = arr.get(0);
    let severity = js_sys::Reflect::get(&diag, &JsValue::from_str("severity")).unwrap();
    assert_eq!(severity, JsValue::from_str("error"));
}

#[wasm_bindgen_test]
fn wasm_compile_with_diagnostics_pretty() {
    let options = js_sys::Object::new();
    js_sys::Reflect::set(&options, &JsValue::from_str("pretty"), &JsValue::from(true)).unwrap();

    let result = hsml::compile_content_with_diagnostics("div\n  p Hello\n", options.into());

    let html = js_sys::Reflect::get(&result, &JsValue::from_str("html")).unwrap();
    assert_eq!(html, JsValue::from_str("<div>\n  <p>Hello</p>\n</div>\n"));
}

#[wasm_bindgen_test]
fn wasm_format_content_returns_formatted() {
    let result = hsml::format_content("div\n    h1 Hello\n", JsValue::UNDEFINED);
    assert_eq!(result.unwrap(), "div\n  h1 Hello\n");
}

#[wasm_bindgen_test]
fn wasm_format_content_returns_error_for_invalid_input() {
    let result = hsml::format_content("@@@invalid", JsValue::UNDEFINED);
    assert!(result.is_err());
}

#[wasm_bindgen_test]
fn wasm_format_content_respects_custom_indent_size() {
    let options = js_sys::Object::new();
    js_sys::Reflect::set(
        &options,
        &JsValue::from_str("indentSize"),
        &JsValue::from(4),
    )
    .unwrap();

    let result = hsml::format_content("div\n  h1 Hello\n", options.into());
    assert_eq!(result.unwrap(), "div\n    h1 Hello\n");
}