javascript 0.3.0

A JavaScript engine implementation in Rust
Documentation
use javascript::*;

#[ctor::ctor(unsafe)]
fn __init_test_logger() {
    let _ = env_logger::Builder::from_env(env_logger::Env::default()).is_test(true).try_init();
}

#[test]
fn undefined_equality() {
    let script = "undefined == undefined";
    let result = evaluate_script(script, false, None::<&std::path::Path>).unwrap();
    assert_eq!(result, "true");
}

#[test]
fn undefined_strict_equality() {
    let script = "undefined === undefined";
    let result = evaluate_script(script, false, None::<&std::path::Path>).unwrap();
    assert_eq!(result, "true");
}

#[test]
fn object_identity_strict_equal() {
    let script = "let a = {}; let b = a; a === b";
    let result = evaluate_script(script, false, None::<&std::path::Path>).unwrap();
    assert_eq!(result, "true");
}

#[test]
fn object_identity_distinct_objects() {
    let script = "let a = {}; a === {}";
    let result = evaluate_script(script, false, None::<&std::path::Path>).unwrap();
    assert_eq!(result, "false");
}

#[test]
fn string_concat_with_undefined_right() {
    let script = "'a' + undefined";
    let result = evaluate_script(script, false, None::<&std::path::Path>).unwrap();
    assert_eq!(result, "\"aundefined\"");
}

#[test]
fn string_concat_with_undefined_left() {
    let script = "undefined + 'b'";
    let result = evaluate_script(script, false, None::<&std::path::Path>).unwrap();
    assert_eq!(result, "\"undefinedb\"");
}

#[test]
fn number_strict_equality_same() {
    let script = "10 === 10";
    let result = evaluate_script(script, false, None::<&std::path::Path>).unwrap();
    assert_eq!(result, "true");
}

#[test]
fn number_strict_equality_different() {
    let script = "10 === 20";
    let result = evaluate_script(script, false, None::<&std::path::Path>).unwrap();
    assert_eq!(result, "false");
}

#[test]
fn string_strict_equality_same() {
    let script = "'hello' === 'hello'";
    let result = evaluate_script(script, false, None::<&std::path::Path>).unwrap();
    assert_eq!(result, "true");
}

#[test]
fn string_strict_equality_different() {
    let script = "'hello' === 'world'";
    let result = evaluate_script(script, false, None::<&std::path::Path>).unwrap();
    assert_eq!(result, "false");
}

#[test]
fn boolean_strict_equality_true() {
    let script = "true === true";
    let result = evaluate_script(script, false, None::<&std::path::Path>).unwrap();
    assert_eq!(result, "true");
}

#[test]
fn boolean_strict_equality_false() {
    let script = "true === false";
    let result = evaluate_script(script, false, None::<&std::path::Path>).unwrap();
    assert_eq!(result, "false");
}

#[test]
fn strict_equality_different_types() {
    let script = "10 === '10'";
    let result = evaluate_script(script, false, None::<&std::path::Path>).unwrap();
    assert_eq!(result, "false");
}