mirror of
https://github.com/pjh456/OxideJS.git
synced 2026-10-26 11:41:13 +08:00
feat: 支持 Date/Map/Set 的 new 运算符
This commit is contained in:
@@ -11,35 +11,128 @@ fn eval(vm: &mut Vm, source: &str) -> Result<oxide_types::value::JsValue, String
|
||||
vm.run(&module)
|
||||
}
|
||||
|
||||
fn str_val(vm: &Vm, val: oxide_types::value::JsValue) -> String {
|
||||
vm.kernel()
|
||||
.string_forge()
|
||||
.lookup(val.as_string_index())
|
||||
.unwrap_or_default()
|
||||
}
|
||||
|
||||
// -- static methods --
|
||||
|
||||
#[test]
|
||||
fn date_now_returns_number() {
|
||||
let mut vm = Vm::new();
|
||||
let result = eval(&mut vm, "Date.now()").unwrap();
|
||||
assert!(result.is_double());
|
||||
assert!(result.as_double() > 0.0);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn date_now_increases() {
|
||||
let mut vm = Vm::new();
|
||||
let t1 = eval(&mut vm, "Date.now()").unwrap().as_double();
|
||||
let t2 = eval(&mut vm, "Date.now()").unwrap().as_double();
|
||||
assert!(t2 >= t1);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn date_parse_returns_nan() {
|
||||
let mut vm = Vm::new();
|
||||
let result = eval(&mut vm, "Date.parse('invalid-date')").unwrap();
|
||||
assert!(result.is_double());
|
||||
assert!(result.as_double().is_nan());
|
||||
let r = eval(&mut vm, "Date.now()").unwrap();
|
||||
assert!(r.is_double() && r.as_double() > 0.0);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn date_parse_iso_format() {
|
||||
let mut vm = Vm::new();
|
||||
let result = eval(&mut vm, "Date.parse('2020-01-15')").unwrap();
|
||||
assert!(result.is_double());
|
||||
assert!(!result.as_double().is_nan());
|
||||
assert!(result.as_double() > 0.0);
|
||||
let r = eval(&mut vm, "Date.parse('2020-01-15')").unwrap();
|
||||
assert!(!r.as_double().is_nan());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn date_parse_invalid() {
|
||||
let mut vm = Vm::new();
|
||||
let r = eval(&mut vm, "Date.parse('nope')").unwrap();
|
||||
assert!(r.as_double().is_nan());
|
||||
}
|
||||
|
||||
// -- new Date() constructor via JS --
|
||||
|
||||
#[test]
|
||||
fn date_new_multi_arg() {
|
||||
let mut vm = Vm::new();
|
||||
let r = eval(&mut vm, "new Date(2020, 0, 15).getFullYear()").unwrap();
|
||||
assert_eq!(r.as_double(), 2020.0);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn date_new_epoch_zero() {
|
||||
let mut vm = Vm::new();
|
||||
let r = eval(&mut vm, "new Date(0).getTime()").unwrap();
|
||||
assert_eq!(r.as_double(), 0.0);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn date_new_get_month() {
|
||||
let mut vm = Vm::new();
|
||||
let r = eval(&mut vm, "new Date(2020, 5, 15).getMonth()").unwrap();
|
||||
assert_eq!(r.as_double(), 5.0);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn date_new_get_date() {
|
||||
let mut vm = Vm::new();
|
||||
let r = eval(&mut vm, "new Date(2020, 1, 29).getDate()").unwrap();
|
||||
assert_eq!(r.as_double(), 29.0);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn date_new_get_hours_min_sec() {
|
||||
let mut vm = Vm::new();
|
||||
let r = eval(&mut vm, "new Date(2020, 0, 1, 12, 30, 45).getHours()").unwrap();
|
||||
assert_eq!(r.as_double(), 12.0);
|
||||
let r = eval(&mut vm, "new Date(2020, 0, 1, 12, 30, 45).getMinutes()").unwrap();
|
||||
assert_eq!(r.as_double(), 30.0);
|
||||
let r = eval(&mut vm, "new Date(2020, 0, 1, 12, 30, 45).getSeconds()").unwrap();
|
||||
assert_eq!(r.as_double(), 45.0);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn date_set_time() {
|
||||
let mut vm = Vm::new();
|
||||
let r = eval(&mut vm, "var d = new Date(0); d.setTime(1000); d.getTime()").unwrap();
|
||||
assert_eq!(r.as_double(), 1000.0);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn date_set_full_year() {
|
||||
let mut vm = Vm::new();
|
||||
let r = eval(
|
||||
&mut vm,
|
||||
"var d = new Date(2020, 0, 1); d.setFullYear(2025); d.getFullYear()",
|
||||
)
|
||||
.unwrap();
|
||||
assert_eq!(r.as_double(), 2025.0);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn date_value_of() {
|
||||
let mut vm = Vm::new();
|
||||
let r = eval(&mut vm, "new Date(2020, 0, 1).valueOf()").unwrap();
|
||||
assert!(r.as_double() > 0.0);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn date_to_iso_string() {
|
||||
let mut vm = Vm::new();
|
||||
let r = eval(&mut vm, "new Date(2020, 0, 1, 0, 0, 0).toISOString()").unwrap();
|
||||
let s = str_val(&vm, r);
|
||||
assert!(s.starts_with("2020-01-01"), "got: {s}");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn date_to_json() {
|
||||
let mut vm = Vm::new();
|
||||
let r = eval(&mut vm, "new Date(2020, 0, 1).toJSON()").unwrap();
|
||||
let s = str_val(&vm, r);
|
||||
assert!(s.starts_with("2020-01-01"), "got: {s}");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn date_to_string_not_empty() {
|
||||
let mut vm = Vm::new();
|
||||
let r = eval(&mut vm, "new Date(0).toString()").unwrap();
|
||||
assert!(r.is_string());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn date_to_utc_string_not_empty() {
|
||||
let mut vm = Vm::new();
|
||||
let r = eval(&mut vm, "new Date(0).toUTCString()").unwrap();
|
||||
assert!(r.is_string());
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user