mirror of
https://github.com/pjh456/OxideJS.git
synced 2026-10-23 18:21:13 +08:00
feat: 实现错误内置对象模型
This commit is contained in:
@@ -0,0 +1,109 @@
|
||||
use oxide_vm::builtins::error;
|
||||
use oxide_vm::vm::Vm;
|
||||
|
||||
fn make_vm() -> Vm {
|
||||
Vm::new()
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn error_constructor_creates_object() {
|
||||
let mut vm = make_vm();
|
||||
let result = error::error_constructor(&mut vm, &[0u8]).unwrap();
|
||||
assert!(result.is_object());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn error_has_message() {
|
||||
let mut vm = make_vm();
|
||||
let msg = vm.intern("test message");
|
||||
vm.set_reg(1, msg);
|
||||
let result = error::error_constructor(&mut vm, &[0u8, 1u8]).unwrap();
|
||||
assert!(result.is_object());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn type_error_constructor_creates_object() {
|
||||
let mut vm = make_vm();
|
||||
let result = error::type_error_constructor(&mut vm, &[0u8]).unwrap();
|
||||
assert!(result.is_object());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn reference_error_constructor_creates_object() {
|
||||
let mut vm = make_vm();
|
||||
let result = error::reference_error_constructor(&mut vm, &[0u8]).unwrap();
|
||||
assert!(result.is_object());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn range_error_constructor_creates_object() {
|
||||
let mut vm = make_vm();
|
||||
let result = error::range_error_constructor(&mut vm, &[0u8]).unwrap();
|
||||
assert!(result.is_object());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn syntax_error_constructor_creates_object() {
|
||||
let mut vm = make_vm();
|
||||
let result = error::syntax_error_constructor(&mut vm, &[0u8]).unwrap();
|
||||
assert!(result.is_object());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn uri_error_constructor_creates_object() {
|
||||
let mut vm = make_vm();
|
||||
let result = error::uri_error_constructor(&mut vm, &[0u8]).unwrap();
|
||||
assert!(result.is_object());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn eval_error_constructor_creates_object() {
|
||||
let mut vm = make_vm();
|
||||
let result = error::eval_error_constructor(&mut vm, &[0u8]).unwrap();
|
||||
assert!(result.is_object());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn create_type_error_returns_jsvalue() {
|
||||
let mut vm = make_vm();
|
||||
let err = error::create_type_error(&mut vm, "something went wrong");
|
||||
assert!(err.is_object());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn create_range_error_returns_jsvalue() {
|
||||
let mut vm = make_vm();
|
||||
let err = error::create_range_error(&mut vm, "out of bounds");
|
||||
assert!(err.is_object());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn create_reference_error_returns_jsvalue() {
|
||||
let mut vm = make_vm();
|
||||
let err = error::create_reference_error(&mut vm, "not defined");
|
||||
assert!(err.is_object());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn create_syntax_error_returns_jsvalue() {
|
||||
let mut vm = make_vm();
|
||||
let err = error::create_syntax_error(&mut vm, "invalid syntax");
|
||||
assert!(err.is_object());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn error_proto_chain_subtype_points_to_error() {
|
||||
let mut vm = make_vm();
|
||||
let err = error::create_type_error(&mut vm, "msg");
|
||||
let obj = unsafe { &*err.as_js_object_ptr() };
|
||||
assert!(obj.proto().is_object());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn error_name_is_string_property() {
|
||||
let mut vm = make_vm();
|
||||
let err = error::error_constructor(&mut vm, &[0u8]).unwrap();
|
||||
let obj = unsafe { &*err.as_js_object_ptr() };
|
||||
let n = obj.prop_count();
|
||||
assert!(n >= 2);
|
||||
}
|
||||
Reference in New Issue
Block a user