feat: JsObject 新增 frozen/sealed 标志位,修复 freeze/seal/preventExtensions/isFrozen/isSealed/isExtensible 六个完整性方法

This commit is contained in:
2026-06-27 15:12:44 +08:00
parent b85df71019
commit af2d11d197
4 changed files with 208 additions and 11 deletions
@@ -0,0 +1,59 @@
use oxide_types::object::JsObject;
use oxide_types::value::JsValue;
fn new_obj() -> JsObject {
JsObject::new_empty(0, JsValue::null())
}
#[test]
fn test_set_frozen() {
let mut obj = new_obj();
assert!(!obj.is_frozen());
obj.set_frozen(true);
assert!(obj.is_frozen());
}
#[test]
fn test_set_sealed() {
let mut obj = new_obj();
assert!(!obj.is_sealed());
obj.set_sealed(true);
assert!(obj.is_sealed());
}
#[test]
fn test_frozen_and_sealed_independent() {
let mut obj = new_obj();
obj.set_frozen(true);
assert!(obj.is_frozen());
assert!(!obj.is_sealed());
obj.set_sealed(true);
assert!(obj.is_frozen());
assert!(obj.is_sealed());
obj.set_frozen(false);
assert!(!obj.is_frozen());
assert!(obj.is_sealed());
}
#[test]
fn test_defaults_are_false() {
let obj = new_obj();
assert!(!obj.is_frozen());
assert!(!obj.is_sealed());
}
#[test]
fn test_clear_frozen() {
let mut obj = new_obj();
obj.set_frozen(true);
obj.set_frozen(false);
assert!(!obj.is_frozen());
}
#[test]
fn test_clear_sealed() {
let mut obj = new_obj();
obj.set_sealed(true);
obj.set_sealed(false);
assert!(!obj.is_sealed());
}