sapphire-lang 0.8.0

Gradually typed scripting language where every value is an object and types are optional, checked at runtime
Documentation
use super::{VmValue, eval, eval_err};

#[test]
fn get_set_round_trip() {
    unsafe { std::env::set_var("SPR_TEST_GET", "hello") };
    assert_eq!(eval(r#"Env.get("SPR_TEST_GET")"#), VmValue::Str("hello".to_string()));
}

#[test]
fn get_missing_returns_nil() {
    assert_eq!(eval(r#"Env.get("SPR_DEFINITELY_NOT_SET_XYZ_123")"#), VmValue::Nil);
}

#[test]
fn fetch_raises_when_missing() {
    let err = eval_err(r#"Env.fetch("SPR_DEFINITELY_NOT_SET_XYZ_123")"#);
    assert!(matches!(err, sapphire::vm::VmError::Raised(_)));
}

#[test]
fn set_and_get() {
    eval(r#"Env.set("SPR_TEST_SET", "world")"#);
    assert_eq!(
        std::env::var("SPR_TEST_SET").unwrap(),
        "world"
    );
}

#[test]
fn delete() {
    unsafe { std::env::set_var("SPR_TEST_DEL", "bye") };
    assert_eq!(eval(r#"Env.delete("SPR_TEST_DEL")"#), VmValue::Nil);
    assert!(std::env::var("SPR_TEST_DEL").is_err());
}

#[test]
fn all_returns_map() {
    unsafe { std::env::set_var("SPR_TEST_ALL", "yes") };
    assert_eq!(eval(r#"Env.all().has_key?("SPR_TEST_ALL")"#), VmValue::Bool(true));
}