yao 0.1.4

a fast, tiny, extensiable workflow engine
Documentation
use std::collections::HashMap;

use crate::{env::Enviroment, Engine};

#[test]
fn env_run() {
    let env = Enviroment::new();

    let script = r#"
    let v = 5;
    print(`v=${v}`);
    "#;

    let vm = env.vm();
    let result = env.run(script, &vm);

    assert_eq!(result.unwrap(), true);
}

#[test]
fn env_eval() {
    let env = Enviroment::new();
    let script = r#"
    let v = 5;
    v
    "#;

    let vm = env.vm();
    let result = env.eval::<i64>(script, &vm);

    assert_eq!(result.unwrap(), 5);
}

#[test]
fn env_eval_error() {
    let env = Enviroment::new();

    let script = r#"
    let v = 5
    v
    "#;

    let vm = env.vm();
    let script_result = env.eval::<i64>(script, &vm);
    let reuslt = match script_result {
        Ok(..) => false,
        Err(_) => true,
    };

    assert_eq!(reuslt, true);
}

#[tokio::test]
async fn env_console_module() {
    let engine = Engine::new();
    let env = Enviroment::new();

    env.registry_console_module(&engine);
    let vm = env.vm();
    let script = r#"
    let v = 5;
    console::log(`v=${v}`);
    console::dbg(`v=${v}`);
    console::wran(`v=${v}`);
    console::error(`v=${v}`);
    "#;
    let result = env.run(script, &vm);

    assert_eq!(result.unwrap(), true);
}

#[tokio::test]
async fn env_act_module() {
    let mut engine = Engine::new();

    let add = |a: i64, b: i64| Ok(a + b);
    engine.register_action("add", add);

    let env = Enviroment::new();
    env.registry_act_module(&engine);

    let vm = env.vm();

    let script = r#"
    let a = 5;
    let b = 4;
    let result = act::add(a, b);

    result
    "#;
    let result = env.eval::<i64>(script, &vm);

    assert_eq!(result.unwrap(), 9);
}

#[test]
fn env_vm_get() {
    let engine = Engine::new();
    let env = Enviroment::new();
    env.registry_env_module(&engine);

    let vm = env.vm();

    let vars = HashMap::from([("a".to_string(), 10.into()), ("b".to_string(), "b".into())]);
    vm.append(vars);

    let script = r#"
    let a = env.get("a");
    a
    "#;
    let result = vm.eval::<i64>(script);

    assert_eq!(result.unwrap(), 10);
}

#[test]
fn env_vm_set() {
    let engine = Engine::new();
    let env = Enviroment::new();
    env.registry_env_module(&engine);

    let vm = env.vm();

    let vars = HashMap::from([("a".to_string(), 10.into()), ("b".to_string(), "b".into())]);
    vm.append(vars);

    let script = r#"
    let a = env.get("a");
    a
    "#;
    let result = vm.eval::<i64>(script);

    assert_eq!(result.unwrap(), 10);
}