fix: 修复测试悬空引用与 this 误转字符串问题
This commit is contained in:
@@ -1,7 +1,8 @@
|
||||
use oxide_compiler::compiler::Compiler;
|
||||
use oxide_types::value::JsValue;
|
||||
use oxide_vm::vm::Vm;
|
||||
|
||||
fn eval(source: &str) -> Result<oxide_types::value::JsValue, String> {
|
||||
fn eval(source: &str) -> Result<(Vm, JsValue), String> {
|
||||
let allocator = oxide_parser::Allocator::default();
|
||||
let program =
|
||||
oxide_parser::parse(&allocator, source).map_err(|e| format!("Parse error: {:?}", e))?;
|
||||
@@ -9,12 +10,13 @@ fn eval(source: &str) -> Result<oxide_types::value::JsValue, String> {
|
||||
.compile(&program)
|
||||
.map_err(|e| format!("Compile error: {}", e))?;
|
||||
let mut vm = Vm::new();
|
||||
vm.run(&module)
|
||||
let result = vm.run(&module)?;
|
||||
Ok((vm, result))
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn object_keys_empty() {
|
||||
let result = eval("Object.keys({})").unwrap();
|
||||
let (_vm, result) = eval("Object.keys({})").unwrap();
|
||||
assert!(result.is_object());
|
||||
let obj = unsafe { &*result.as_js_object_ptr() };
|
||||
assert_eq!(obj.prop_count(), 0);
|
||||
@@ -22,55 +24,55 @@ fn object_keys_empty() {
|
||||
|
||||
#[test]
|
||||
fn object_keys_has_own_property() {
|
||||
let result = eval("Object.keys({a:1,b:2})").unwrap();
|
||||
let (_vm, result) = eval("Object.keys({a:1,b:2})").unwrap();
|
||||
let obj = unsafe { &*result.as_js_object_ptr() };
|
||||
assert_eq!(obj.prop_count(), 2);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn object_create_null_proto() {
|
||||
eval("Object.create(null)").unwrap();
|
||||
let (_vm, _result) = eval("Object.create(null)").unwrap();
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn object_assign_copies() {
|
||||
let result = eval("Object.assign({a:1},{b:2})").unwrap();
|
||||
let (_vm, result) = eval("Object.assign({a:1},{b:2})").unwrap();
|
||||
assert!(result.is_object());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn object_get_own_property_descriptor_value() {
|
||||
let result = eval("Object.getOwnPropertyDescriptor({a:1},'a')").unwrap();
|
||||
let (_vm, result) = eval("Object.getOwnPropertyDescriptor({a:1},'a')").unwrap();
|
||||
assert!(result.is_object());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn object_get_own_property_descriptor_missing() {
|
||||
let result = eval("Object.getOwnPropertyDescriptor({},'x')").unwrap();
|
||||
let (_vm, result) = eval("Object.getOwnPropertyDescriptor({},'x')").unwrap();
|
||||
assert!(result.is_undefined());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn object_define_property_sets_value() {
|
||||
let result = eval("Object.defineProperty({},'x',{value:42})").unwrap();
|
||||
let (_vm, result) = eval("Object.defineProperty({},'x',{value:42})").unwrap();
|
||||
assert!(result.is_object());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn object_get_prototype_of() {
|
||||
let result = eval("Object.getPrototypeOf({})").unwrap();
|
||||
let (_vm, result) = eval("Object.getPrototypeOf({})").unwrap();
|
||||
assert!(result.is_object() || result.is_null());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn object_has_own_true() {
|
||||
let result = eval("Object.hasOwn({a:1}, 'a')").unwrap();
|
||||
let (_vm, result) = eval("Object.hasOwn({a:1}, 'a')").unwrap();
|
||||
assert!(result.is_bool());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn object_entries_returns_array() {
|
||||
let result = eval("Object.entries({a:1,b:2})").unwrap();
|
||||
let (_vm, result) = eval("Object.entries({a:1,b:2})").unwrap();
|
||||
assert!(result.is_object());
|
||||
let obj = unsafe { &*result.as_js_object_ptr() };
|
||||
assert_eq!(obj.prop_count(), 2);
|
||||
@@ -78,7 +80,7 @@ fn object_entries_returns_array() {
|
||||
|
||||
#[test]
|
||||
fn object_values_returns_array() {
|
||||
let result = eval("Object.values({a:1,b:2})").unwrap();
|
||||
let (_vm, result) = eval("Object.values({a:1,b:2})").unwrap();
|
||||
assert!(result.is_object());
|
||||
let obj = unsafe { &*result.as_js_object_ptr() };
|
||||
assert_eq!(obj.prop_count(), 2);
|
||||
|
||||
Reference in New Issue
Block a user