javascript 0.3.0

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

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

#[test]
fn test_for_single_statement_body() {
    let script = r#"
        function f() {
            var a = [];
            for (var i = 0; i < 3; i++) a.push(i);
            return a.join(',');
        }
        f();
    "#;
    let result = evaluate_script(script, false, None::<&std::path::Path>).unwrap();
    assert_eq!(result, "\"0,1,2\"");
}

#[test]
fn test_while_single_statement_body() {
    let script = r#"
        function f() {
            var sum = 0;
            var i = 0;
            while (i < 4) sum += i++;
            return sum;
        }
        f();
    "#;
    let result = evaluate_script(script, false, None::<&std::path::Path>).unwrap();
    assert_eq!(result, "6");
}

#[test]
fn test_do_while_single_statement_body() {
    let script = r#"
        function f() {
            var i = 0;
            var x = [];
            do x.push(i++); while (i < 2);
            return x.join('-');
        }
        f();
    "#;
    let result = evaluate_script(script, false, None::<&std::path::Path>).unwrap();
    assert_eq!(result, "\"0-1\"");
}

#[test]
fn test_if_single_statement_then_and_else() {
    let script = r#"
        function f(v) {
            var out = 0;
            if (v) out = 1; else out = 2;
            return out;
        }
        [f(true), f(false)].join(',');
    "#;
    let result = evaluate_script(script, false, None::<&std::path::Path>).unwrap();
    assert_eq!(result, "\"1,2\"");
}