diff --git a/crates/js-sys/src/lib.rs b/crates/js-sys/src/lib.rs index 951784b4c9a..578e4080304 100644 --- a/crates/js-sys/src/lib.rs +++ b/crates/js-sys/src/lib.rs @@ -426,8 +426,14 @@ extern "C" { } // TODO pre-initialize the Array with the correct length using TrustedLen -impl std::iter::FromIterator for Array where A: AsRef { - fn from_iter(iter: T) -> Array where T: IntoIterator { +impl std::iter::FromIterator for Array +where + A: AsRef, +{ + fn from_iter(iter: T) -> Array + where + T: IntoIterator, + { let out = Array::new(); for value in iter { @@ -1992,6 +1998,75 @@ extern "C" { #[wasm_bindgen(constructor)] pub fn new_0() -> Date; + /// Creates a JavaScript Date instance that represents + /// a single moment in time. Date objects are based on a time value that is + /// the number of milliseconds since 1 January 1970 UTC. + /// + /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date) + #[wasm_bindgen(constructor)] + pub fn new_with_year_month(year: u32, month: i32) -> Date; + + /// Creates a JavaScript Date instance that represents + /// a single moment in time. Date objects are based on a time value that is + /// the number of milliseconds since 1 January 1970 UTC. + /// + /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date) + #[wasm_bindgen(constructor)] + pub fn new_with_year_month_day(year: u32, month: i32, day: i32) -> Date; + + /// Creates a JavaScript Date instance that represents + /// a single moment in time. Date objects are based on a time value that is + /// the number of milliseconds since 1 January 1970 UTC. + /// + /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date) + #[wasm_bindgen(constructor)] + pub fn new_with_year_month_day_hr(year: u32, month: i32, day: i32, hr: i32) -> Date; + + /// Creates a JavaScript Date instance that represents + /// a single moment in time. Date objects are based on a time value that is + /// the number of milliseconds since 1 January 1970 UTC. + /// + /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date) + #[wasm_bindgen(constructor)] + pub fn new_with_year_month_day_hr_min( + year: u32, + month: i32, + day: i32, + hr: i32, + min: i32, + ) -> Date; + + /// Creates a JavaScript Date instance that represents + /// a single moment in time. Date objects are based on a time value that is + /// the number of milliseconds since 1 January 1970 UTC. + /// + /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date) + #[wasm_bindgen(constructor)] + pub fn new_with_year_month_day_hr_min_sec( + year: u32, + month: i32, + day: i32, + hr: i32, + min: i32, + sec: i32, + ) -> Date; + + /// Creates a JavaScript Date instance that represents + /// a single moment in time. Date objects are based on a time value that is + /// the number of milliseconds since 1 January 1970 UTC. + /// + /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date) + #[wasm_bindgen(constructor)] + pub fn new_with_year_month_day_hr_min_sec_milli( + year: u32, + month: i32, + day: i32, + hr: i32, + min: i32, + sec: i32, + milli: i32, + ) -> Date; + /// The `Date.now()` method returns the number of milliseconds /// elapsed since January 1, 1970 00:00:00 UTC. /// @@ -2020,6 +2095,20 @@ extern "C" { #[wasm_bindgen(method, js_name = setFullYear)] pub fn set_full_year(this: &Date, year: u32) -> f64; + /// The setFullYear() method sets the full year for a specified date according to local time. + /// Returns new timestamp. + /// + /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setFullYear) + #[wasm_bindgen(method, js_name = setFullYear)] + pub fn set_full_year_with_month(this: &Date, year: u32, month: i32) -> f64; + + /// The setFullYear() method sets the full year for a specified date according to local time. + /// Returns new timestamp. + /// + /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setFullYear) + #[wasm_bindgen(method, js_name = setFullYear)] + pub fn set_full_year_with_month_date(this: &Date, year: u32, month: i32, date: i32) -> f64; + /// The setHours() method sets the hours for a specified date according to local time, /// and returns the number of milliseconds since January 1, 1970 00:00:00 UTC until the time represented /// by the updated Date instance. @@ -2072,6 +2161,18 @@ extern "C" { #[wasm_bindgen(method, js_name = setUTCFullYear)] pub fn set_utc_full_year(this: &Date, year: u32) -> f64; + /// The setUTCFullYear() method sets the full year for a specified date according to universal time. + /// + /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setUTCFullYear) + #[wasm_bindgen(method, js_name = setUTCFullYear)] + pub fn set_utc_full_year_with_month(this: &Date, year: u32, month: i32) -> f64; + + /// The setUTCFullYear() method sets the full year for a specified date according to universal time. + /// + /// [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setUTCFullYear) + #[wasm_bindgen(method, js_name = setUTCFullYear)] + pub fn set_utc_full_year_with_month_date(this: &Date, year: u32, month: i32, date: i32) -> f64; + /// The setUTCHours() method sets the hour for a specified date according to universal time, /// and returns the number of milliseconds since January 1, 1970 00:00:00 UTC until the time /// represented by the updated Date instance. diff --git a/crates/js-sys/tests/wasm/Date.rs b/crates/js-sys/tests/wasm/Date.rs index fd63674c99d..712862ed72a 100644 --- a/crates/js-sys/tests/wasm/Date.rs +++ b/crates/js-sys/tests/wasm/Date.rs @@ -143,6 +143,69 @@ fn new() { assert!(JsValue::from(Date::new(&JsValue::undefined())).is_object()); } +#[wasm_bindgen_test] +fn new_with_year_month() { + let date1 = Date::new_with_year_month(1975, 7); + + assert_eq!(date1.get_full_year(), 1975); + assert_eq!(date1.get_month(), 7); +} + +#[wasm_bindgen_test] +fn new_with_year_month_day() { + let date1 = Date::new_with_year_month_day(1975, 7, 8); + + assert_eq!(date1.get_full_year(), 1975); + assert_eq!(date1.get_month(), 7); + assert_eq!(date1.get_date(), 8); +} + +#[wasm_bindgen_test] +fn new_with_year_month_day_hr() { + let date1 = Date::new_with_year_month_day_hr(1975, 7, 8, 4); + + assert_eq!(date1.get_full_year(), 1975); + assert_eq!(date1.get_month(), 7); + assert_eq!(date1.get_date(), 8); + assert_eq!(date1.get_hours(), 4); +} + +#[wasm_bindgen_test] +fn new_with_year_month_day_hr_min() { + let date1 = Date::new_with_year_month_day_hr_min(1975, 7, 8, 4, 35); + + assert_eq!(date1.get_full_year(), 1975); + assert_eq!(date1.get_month(), 7); + assert_eq!(date1.get_date(), 8); + assert_eq!(date1.get_hours(), 4); + assert_eq!(date1.get_minutes(), 35); +} + +#[wasm_bindgen_test] +fn new_with_year_month_day_hr_min_sec() { + let date1 = Date::new_with_year_month_day_hr_min_sec(1975, 7, 8, 4, 35, 25); + + assert_eq!(date1.get_full_year(), 1975); + assert_eq!(date1.get_month(), 7); + assert_eq!(date1.get_date(), 8); + assert_eq!(date1.get_hours(), 4); + assert_eq!(date1.get_minutes(), 35); + assert_eq!(date1.get_seconds(), 25); +} + +#[wasm_bindgen_test] +fn new_with_year_month_day_hr_min_sec_milli() { + let date1 = Date::new_with_year_month_day_hr_min_sec_milli(1975, 7, 8, 4, 35, 25, 300); + + assert_eq!(date1.get_full_year(), 1975); + assert_eq!(date1.get_month(), 7); + assert_eq!(date1.get_date(), 8); + assert_eq!(date1.get_hours(), 4); + assert_eq!(date1.get_minutes(), 35); + assert_eq!(date1.get_seconds(), 25); + assert_eq!(date1.get_milliseconds(), 300); +} + #[wasm_bindgen_test] fn now() { assert!(Date::now() > 0.); @@ -181,6 +244,27 @@ fn set_full_year() { assert_eq!(event1.get_full_year(), 1976); } +#[wasm_bindgen_test] +fn set_full_year_with_month() { + let event1 = Date::new(&"August 19, 1976 23:15:30".into()); + + event1.set_full_year_with_month(1979, 4); + + assert_eq!(event1.get_full_year(), 1979); + assert_eq!(event1.get_month(), 4); +} + +#[wasm_bindgen_test] +fn set_full_year_with_month_date() { + let event1 = Date::new(&"August 19, 1976 23:15:30".into()); + + event1.set_full_year_with_month_date(1979, -1, 25); + + assert_eq!(event1.get_full_year(), 1978); + assert_eq!(event1.get_month(), 11); + assert_eq!(event1.get_date(), 25); +} + #[wasm_bindgen_test] fn set_hours() { let event1 = Date::new(&"August 19, 1975 23:15:30".into()); @@ -274,6 +358,27 @@ fn set_utc_full_year() { assert_eq!(event1.get_utc_full_year(), 1975); } +#[wasm_bindgen_test] +fn set_utc_full_year_with_month() { + let event1 = Date::new(&"December 31, 1975 23:15:30 GMT-3:00".into()); + + event1.set_utc_full_year_with_month(1975, 6); + + assert_eq!(event1.get_utc_full_year(), 1975); + assert_eq!(event1.get_utc_month(), 6); +} + +#[wasm_bindgen_test] +fn set_utc_full_year_with_month_date() { + let event1 = Date::new(&"December 31, 1975 23:15:30 GMT-3:00".into()); + + event1.set_utc_full_year_with_month_date(1975, -2, 21); + + assert_eq!(event1.get_utc_full_year(), 1974); + assert_eq!(event1.get_utc_month(), 10); + assert_eq!(event1.get_utc_date(), 21); +} + #[wasm_bindgen_test] fn set_utc_hours() { let event1 = Date::new(&"August 19, 1975 23:15:30 GMT-3:00".into());