fix: 修复 harness 函数原型和 Object.assign ToObject

This commit is contained in:
爱特每羊队
2026-06-09 19:46:50 +08:00
parent e588fa4c8c
commit 16568c83fe
10 changed files with 131 additions and 16 deletions
@@ -37,6 +37,14 @@ fn object_assign_copies() {
assert!(result.is_object());
}
#[test]
fn object_assign_boxes_primitive_target() {
let (_vm, result) = eval("var result = Object.assign('a'); result.valueOf()").unwrap();
assert!(result.is_string());
let rendered = _vm.kernel().string_forge().lookup(result.as_string_index()).unwrap_or_default();
assert_eq!(rendered, "a");
}
#[test]
fn object_is_uses_same_value_semantics() {
let (_vm, result) = eval("Object.is(NaN, NaN)").unwrap();
+19
View File
@@ -188,3 +188,22 @@ fn this_in_constructor_sets_proto() {
let result = eval(&mut vm, "function Ctor(m) { this.message = m; } Ctor.prototype = new Object(); 1").unwrap();
assert_eq!(result.as_int(), 1);
}
#[test]
fn function_declaration_has_default_prototype_object() {
let mut vm = Vm::new();
let result = eval(&mut vm, "function Ctor() {} Ctor.prototype.constructor === Ctor").unwrap();
assert_eq!(result, JsValue::bool(true));
}
#[test]
fn function_default_prototype_accepts_member_assignment() {
let mut vm = Vm::new();
let result = eval(
&mut vm,
"function Test262Error(message) { this.message = message || ''; } Test262Error.prototype.toString = function () { return this.message; }; new Test262Error('ok').toString()",
)
.unwrap();
let rendered = vm.kernel().string_forge().lookup(result.as_string_index()).unwrap_or_default();
assert_eq!(rendered, "ok");
}