mirror of
https://github.com/pjh456/OxideJS.git
synced 2026-10-25 19:21:11 +08:00
fix: PlainDateTime 构造器显式 undefined 时间分量取默认值
This commit is contained in:
@@ -5111,6 +5111,12 @@ pub fn plain_date_time_constructor<H: VmHost>(vm: &mut H, args: &[u8]) -> Native
|
|||||||
let mut component = |index: usize, default: f64| -> Result<f64, JsValue> {
|
let mut component = |index: usize, default: f64| -> Result<f64, JsValue> {
|
||||||
if args.len() > index {
|
if args.len() > index {
|
||||||
let raw = vm.reg(args[index]);
|
let raw = vm.reg(args[index]);
|
||||||
|
// 时间分量(缺省臂为有限值):显式 undefined 与缺参同义,取缺省值;
|
||||||
|
// 日期分量无缺省臂(缺省值为 NaN),undefined 仍经 NaN 统一抛
|
||||||
|
// RangeError。
|
||||||
|
if raw.is_undefined() && default.is_finite() {
|
||||||
|
return Ok(default);
|
||||||
|
}
|
||||||
temporal_option_number(vm, raw).map(f64::trunc)
|
temporal_option_number(vm, raw).map(f64::trunc)
|
||||||
} else {
|
} else {
|
||||||
Ok(default)
|
Ok(default)
|
||||||
|
|||||||
@@ -3816,3 +3816,30 @@ fn plain_time_ctor_number_component_rejects_and_undefined_default() {
|
|||||||
"TypeError|TypeError|RangeError|RangeError|RangeError|0|01:00:00.001|02:00:00"
|
"TypeError|TypeError|RangeError|RangeError|RangeError|0|01:00:00.001|02:00:00"
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn plain_date_time_ctor_undefined_time_components_default() {
|
||||||
|
let mut vm = Vm::new();
|
||||||
|
// 红形钉:显式 undefined 时间分量(时/分/秒/毫秒)与缺参同义取默认 0,
|
||||||
|
// 与全缺省构造等值;旧形为 RangeError。日期分量无缺省臂:undefined 仍抛
|
||||||
|
// RangeError。
|
||||||
|
let r = eval(
|
||||||
|
&mut vm,
|
||||||
|
"(() => {
|
||||||
|
const kind = (fn) => { try { fn(); return 'no'; } catch (e) { return e.constructor.name; } };
|
||||||
|
return [
|
||||||
|
new Temporal.PlainDateTime(2020, 1, 1, undefined, undefined, undefined).toString(),
|
||||||
|
new Temporal.PlainDateTime(2020, 1, 1, 10, undefined, undefined, 5, undefined, undefined).toString(),
|
||||||
|
new Temporal.PlainDateTime(2020, 1, 1).toString(),
|
||||||
|
kind(() => new Temporal.PlainDateTime(undefined, 1, 1)),
|
||||||
|
kind(() => new Temporal.PlainDateTime(2020, undefined, 1)),
|
||||||
|
kind(() => new Temporal.PlainDateTime(2020, 1, undefined)),
|
||||||
|
].join('|');
|
||||||
|
})()",
|
||||||
|
)
|
||||||
|
.unwrap();
|
||||||
|
assert_eq!(
|
||||||
|
str_val(&vm, r),
|
||||||
|
"2020-01-01T00:00:00|2020-01-01T10:00:00.005|2020-01-01T00:00:00|RangeError|RangeError|RangeError"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user