jimtcl 0.3.0

Embed Jim Tcl in Rust.
Documentation
use jimtcl::{Interp, JimResult};

#[test]
fn test_eval_noresult() -> JimResult<()> {
    let interp = Interp::new()?;
    let rv = interp.eval("puts readme")?;
    assert_eq!(&rv.to_string(), "");
    Ok(())
}

#[test]
fn test_eval_simple() -> JimResult<()> {
    let interp = Interp::new()?;
    let rv = interp.eval("expr {1 + 2}")?;
    assert_eq!(&rv.to_string(), "3");
    Ok(())
}

#[test]
fn test_eval_expr() -> JimResult<()> {
    let interp = Interp::new()?;
    let res = interp.eval_expr("1 + 2")?;
    assert_eq!(i32::try_from(&res)?, 3);
    Ok(())
}

#[test]
fn test_get_var() -> JimResult<()> {
    let interp = Interp::new()?;
    interp.eval("set scroll {READ ME}")?;
    let val = interp.get_variable("scroll").unwrap();
    assert_eq!(val.as_str()?, "READ ME");
    Ok(())
}

#[test]
fn test_set_var() -> JimResult<()> {
    let interp = Interp::new()?;
    interp.set_variable("scroll", "HACKEM MUCHE")?;
    let val = interp.get_variable("scroll").unwrap();
    assert_eq!(val.as_str()?, "HACKEM MUCHE");
    let exp = interp.eval_expr("$scroll eq {HACKEM MUCHE}")?;
    assert!(bool::try_from(&exp)?);
    let exp = interp.eval_expr("$scroll eq {READ ME}")?;
    assert!(!bool::try_from(&exp)?);
    Ok(())
}