feat: 注入 harness 并补齐关键全局内建

This commit is contained in:
爱特每羊队
2026-06-09 17:08:10 +08:00
parent ed0864d01f
commit d20eadaccc
13 changed files with 209 additions and 48 deletions
@@ -187,6 +187,15 @@ fn array_empty_literal() {
assert_eq!(obj.prop_count(), 0);
}
#[test]
fn array_is_array_static_method() {
let (_vm, result) = eval("Array.isArray([])").unwrap();
assert_eq!(result, JsValue::bool(true));
let (_vm, result) = eval("Array.isArray({})").unwrap();
assert_eq!(result, JsValue::bool(false));
}
#[test]
fn array_shift_removes_first() {
let (_vm, result) = eval("[1,2,3].shift()").unwrap();
@@ -36,7 +36,7 @@ fn function_to_string_includes_function() {
let result = eval(&mut vm, "Math.max.toString()").unwrap();
assert!(result.is_string());
let rendered = vm.kernel().string_forge().lookup(result.as_string_index()).unwrap_or_default();
assert!(rendered.contains("function"), "got: {}", rendered);
assert_eq!(rendered, "function max() { [native code] }");
}
#[test]
@@ -76,3 +76,10 @@ fn division_by_zero_gives_infinity() {
assert!(result.is_double());
assert!(result.as_double().is_infinite());
}
#[test]
fn global_this_points_to_global_object() {
let result = eval("globalThis.Object === Object").unwrap();
assert!(result.is_bool());
assert!(result.as_bool());
}
@@ -37,6 +37,18 @@ fn object_assign_copies() {
assert!(result.is_object());
}
#[test]
fn object_is_uses_same_value_semantics() {
let (_vm, result) = eval("Object.is(NaN, NaN)").unwrap();
assert_eq!(result, JsValue::bool(true));
let (_vm, result) = eval("Object.is(1, 1)").unwrap();
assert_eq!(result, JsValue::bool(true));
let (_vm, result) = eval("Object.is(1, '1')").unwrap();
assert_eq!(result, JsValue::bool(false));
}
#[test]
fn object_get_own_property_descriptor_value() {
let (_vm, result) = eval("Object.getOwnPropertyDescriptor({a:1},'a')").unwrap();