Temporal.rs 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. use js_sys::*;
  2. use wasm_bindgen::prelude::*;
  3. use wasm_bindgen::JsCast;
  4. use wasm_bindgen_test::*;
  5. #[wasm_bindgen(module = "tests/wasm/Temporal.js")]
  6. extern "C" {
  7. fn is_temporal_supported() -> bool;
  8. }
  9. #[wasm_bindgen_test]
  10. fn now() {
  11. if !is_temporal_supported() {
  12. return;
  13. }
  14. let x = Temporal::Now::plain_date("iso8086");
  15. let y: JsValue = x.into();
  16. assert!(y.is_object());
  17. }
  18. #[wasm_bindgen_test]
  19. fn duration() {
  20. if !is_temporal_supported() {
  21. return;
  22. }
  23. let x = Temporal::Duration::from(&"PT1.00001S".into());
  24. assert_eq!(x.years(), 0);
  25. assert_eq!(x.microseconds(), 10);
  26. }
  27. #[wasm_bindgen_test]
  28. fn zoned_date_time() {
  29. if !is_temporal_supported() {
  30. return;
  31. }
  32. let zdt = Temporal::ZonedDateTime::from(&"2020-03-09T00:00-07:00[America/Los_Angeles]".into());
  33. let earlier_day = zdt.subtract(
  34. &Temporal::Duration::from(&"P1D".into()),
  35. &JsValue::UNDEFINED,
  36. );
  37. let earlier_hours = zdt.subtract(
  38. &Temporal::Duration::from(&"PT24H".into()),
  39. &JsValue::UNDEFINED,
  40. );
  41. assert_eq!(earlier_day.hour(), 0);
  42. assert_eq!(earlier_hours.hour(), 23);
  43. }
  44. #[wasm_bindgen_test]
  45. fn plain_time() {
  46. if !is_temporal_supported() {
  47. return;
  48. }
  49. let time = Temporal::PlainTime::from(&"19:39:09.068346205".into());
  50. assert_eq!(time.microsecond(), 346);
  51. assert_eq!(time.round(&"hour".into()).hour(), 20);
  52. }
  53. #[wasm_bindgen_test]
  54. fn plain_date() {
  55. if !is_temporal_supported() {
  56. return;
  57. }
  58. let x = Temporal::PlainDate::new(2022, 2, 2).with_calendar("persian");
  59. let y = Temporal::PlainDate::new(2022, 2, 5);
  60. let z = Temporal::PlainDate::from(&"-002022-02-02[u-ca=gregory]".into());
  61. assert_eq!(Temporal::PlainDate::compare(&x, &y), -1);
  62. assert_eq!(x.year(), 1400);
  63. assert_eq!(x.month(), 11);
  64. assert_eq!(x.month_code(), "M11");
  65. assert_eq!(x.day(), 13);
  66. assert_eq!(x.era(), "ap");
  67. assert_eq!(y.era(), JsValue::UNDEFINED);
  68. assert_eq!(z.era_year(), 2023i32);
  69. assert_eq!(y.day_of_week(), 6);
  70. assert_eq!(
  71. Reflect::get(&x.get_iso_fields(), &"isoYear".into()).unwrap(),
  72. 2022i32
  73. );
  74. assert_eq!(x.in_leap_year(), false);
  75. }