use javascript::Value;
use javascript::evaluate_script;
#[ctor::ctor]
fn __init_test_logger() {
let _ = env_logger::Builder::from_env(env_logger::Env::default()).is_test(true).try_init();
}
#[test]
fn test_reflect_has() {
let result = evaluate_script("Reflect.has({test: 1}, 'test')", None::<&std::path::Path>).unwrap();
assert!(matches!(result, Value::Boolean(true)));
let result = evaluate_script("Reflect.has({}, 'test')", None::<&std::path::Path>).unwrap();
assert!(matches!(result, Value::Boolean(false)));
}
#[test]
fn test_reflect_get() {
let result = evaluate_script("Reflect.get({test: 42}, 'test')", None::<&std::path::Path>).unwrap();
assert!(matches!(result, Value::Number(n) if (n - 42.0).abs() < f64::EPSILON));
let result = evaluate_script("Reflect.get({}, 'test')", None::<&std::path::Path>).unwrap();
assert!(matches!(result, Value::Undefined));
}
#[test]
fn test_reflect_set() {
let result = evaluate_script("let obj = {}; Reflect.set(obj, 'test', 123); obj.test", None::<&std::path::Path>).unwrap();
assert!(matches!(result, Value::Number(n) if (n - 123.0).abs() < f64::EPSILON));
}
#[test]
fn test_reflect_own_keys() {
let result = evaluate_script("Reflect.ownKeys({a: 1, b: 2}).length", None::<&std::path::Path>).unwrap();
assert!(matches!(result, Value::Number(n) if (n - 2.0).abs() < f64::EPSILON));
}
#[test]
fn test_reflect_is_extensible() {
let result = evaluate_script("Reflect.isExtensible({})", None::<&std::path::Path>).unwrap();
assert!(matches!(result, Value::Boolean(true)));
}
#[test]
fn test_reflect_get_prototype_of() {
let result = evaluate_script("typeof Reflect.getPrototypeOf({})", None::<&std::path::Path>).unwrap();
match result {
Value::String(s) => assert_eq!(String::from_utf16_lossy(&s), "object"),
_ => panic!("Expected string"),
}
}