Date.rs 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525
  1. use js_sys::*;
  2. use wasm_bindgen::JsCast;
  3. use wasm_bindgen::JsValue;
  4. use wasm_bindgen_test::*;
  5. #[wasm_bindgen_test]
  6. fn get_date() {
  7. let date = Date::new(&"August 19, 1975 23:15:30".into());
  8. assert_eq!(date.get_date(), 19);
  9. }
  10. #[wasm_bindgen_test]
  11. fn get_day() {
  12. let date = Date::new(&"August 19, 1975 23:15:30".into());
  13. assert_eq!(date.get_day(), 2);
  14. }
  15. #[wasm_bindgen_test]
  16. fn get_full_year() {
  17. let date = Date::new(&"July 20, 1969 00:20:18".into());
  18. let abbr = Date::new(&"Thu, 06 Sep 12 00:00:00".into());
  19. assert_eq!(date.get_full_year(), 1969);
  20. assert_eq!(abbr.get_full_year(), 2012);
  21. }
  22. #[wasm_bindgen_test]
  23. fn get_hours() {
  24. let date = Date::new(&"March 13, 08 04:20".into());
  25. assert_eq!(date.get_hours(), 4);
  26. }
  27. #[wasm_bindgen_test]
  28. fn get_milliseconds() {
  29. let date = Date::new(&"1995-12-17T09:24:00Z".into());
  30. let ms = Date::new(&"1995-12-17T09:24:00.123Z".into());
  31. assert_eq!(date.get_milliseconds(), 0);
  32. assert_eq!(ms.get_milliseconds(), 123);
  33. }
  34. #[wasm_bindgen_test]
  35. fn get_minutes() {
  36. let date = Date::new(&"March 13, 08 04:20".into());
  37. assert_eq!(date.get_minutes(), 20);
  38. }
  39. #[wasm_bindgen_test]
  40. fn get_month() {
  41. let date = Date::new(&"July 20, 69 00:20:18".into());
  42. assert_eq!(date.get_month(), 6);
  43. }
  44. #[wasm_bindgen_test]
  45. fn get_seconds() {
  46. let date = Date::new(&"July 20, 69 00:20:18".into());
  47. assert_eq!(date.get_seconds(), 18);
  48. }
  49. #[wasm_bindgen_test]
  50. fn get_time() {
  51. let date = Date::new(&"July 20, 69 00:20:18 GMT+00:00".into());
  52. assert_eq!(date.get_time(), -14254782000.0);
  53. }
  54. #[wasm_bindgen_test]
  55. fn get_timezone_offset() {
  56. let date1 = Date::new(&"August 19, 1975 23:15:30 GMT+07:00".into());
  57. let date2 = Date::new(&"August 19, 1975 23:15:30 GMT-02:00".into());
  58. assert_eq!(date1.get_timezone_offset(), date2.get_timezone_offset());
  59. }
  60. #[wasm_bindgen_test]
  61. fn get_utc_date() {
  62. let date1 = Date::new(&"August 19, 1975 23:15:30 GMT+11:00".into());
  63. let date2 = Date::new(&"August 19, 1975 23:15:30 GMT-11:00".into());
  64. assert_eq!(date1.get_utc_date(), 19);
  65. assert_eq!(date2.get_utc_date(), 20);
  66. }
  67. #[wasm_bindgen_test]
  68. fn get_utc_day() {
  69. let date1 = Date::new(&"August 19, 1975 23:15:30 GMT+11:00".into());
  70. let date2 = Date::new(&"August 19, 1975 23:15:30 GMT-11:00".into());
  71. assert_eq!(date1.get_utc_day(), 2);
  72. assert_eq!(date2.get_utc_day(), 3);
  73. }
  74. #[wasm_bindgen_test]
  75. fn get_utc_full_year() {
  76. let date1 = Date::new(&"December 31, 1975, 23:15:30 GMT+11:00".into());
  77. let date2 = Date::new(&"December 31, 1975, 23:15:30 GMT-11:00".into());
  78. assert_eq!(date1.get_utc_full_year(), 1975);
  79. assert_eq!(date2.get_utc_full_year(), 1976);
  80. }
  81. #[wasm_bindgen_test]
  82. fn get_utc_hours() {
  83. let date1 = Date::new(&"December 31, 1975, 23:15:30 GMT+11:00".into());
  84. let date2 = Date::new(&"December 31, 1975, 23:15:30 GMT-11:00".into());
  85. assert_eq!(date1.get_utc_hours(), 12);
  86. assert_eq!(date2.get_utc_hours(), 10);
  87. }
  88. #[wasm_bindgen_test]
  89. fn get_utc_milliseconds() {
  90. let date = Date::new(&"2018-01-02T03:04:05.678Z".into());
  91. assert_eq!(date.get_utc_milliseconds(), 678);
  92. }
  93. #[wasm_bindgen_test]
  94. fn get_utc_minutes() {
  95. let date1 = Date::new(&"1 January 2000 03:15:30 GMT+07:00".into());
  96. let date2 = Date::new(&"1 January 2000 03:15:30 GMT+03:30".into());
  97. assert_eq!(date1.get_utc_minutes(), 15);
  98. assert_eq!(date2.get_utc_minutes(), 45);
  99. }
  100. #[wasm_bindgen_test]
  101. fn get_utc_month() {
  102. let date1 = Date::new(&"December 31, 1975, 23:15:30 GMT+11:00".into());
  103. let date2 = Date::new(&"December 31, 1975, 23:15:30 GMT-11:00".into());
  104. assert_eq!(date1.get_utc_month(), 11);
  105. assert_eq!(date2.get_utc_month(), 0);
  106. }
  107. #[wasm_bindgen_test]
  108. fn get_utc_seconds() {
  109. let date = Date::new(&"July 20, 1969, 20:18:04 UTC".into());
  110. assert_eq!(date.get_utc_seconds(), 4);
  111. }
  112. #[wasm_bindgen_test]
  113. fn new() {
  114. assert!(JsValue::from(Date::new(&JsValue::undefined())).is_object());
  115. }
  116. #[wasm_bindgen_test]
  117. fn new_with_year_month() {
  118. let date1 = Date::new_with_year_month(1975, 7);
  119. assert_eq!(date1.get_full_year(), 1975);
  120. assert_eq!(date1.get_month(), 7);
  121. }
  122. #[wasm_bindgen_test]
  123. fn new_with_year_month_day() {
  124. let date1 = Date::new_with_year_month_day(1975, 7, 8);
  125. assert_eq!(date1.get_full_year(), 1975);
  126. assert_eq!(date1.get_month(), 7);
  127. assert_eq!(date1.get_date(), 8);
  128. }
  129. #[wasm_bindgen_test]
  130. fn new_with_year_month_day_hr() {
  131. let date1 = Date::new_with_year_month_day_hr(1975, 7, 8, 4);
  132. assert_eq!(date1.get_full_year(), 1975);
  133. assert_eq!(date1.get_month(), 7);
  134. assert_eq!(date1.get_date(), 8);
  135. assert_eq!(date1.get_hours(), 4);
  136. }
  137. #[wasm_bindgen_test]
  138. fn new_with_year_month_day_hr_min() {
  139. let date1 = Date::new_with_year_month_day_hr_min(1975, 7, 8, 4, 35);
  140. assert_eq!(date1.get_full_year(), 1975);
  141. assert_eq!(date1.get_month(), 7);
  142. assert_eq!(date1.get_date(), 8);
  143. assert_eq!(date1.get_hours(), 4);
  144. assert_eq!(date1.get_minutes(), 35);
  145. }
  146. #[wasm_bindgen_test]
  147. fn new_with_year_month_day_hr_min_sec() {
  148. let date1 = Date::new_with_year_month_day_hr_min_sec(1975, 7, 8, 4, 35, 25);
  149. assert_eq!(date1.get_full_year(), 1975);
  150. assert_eq!(date1.get_month(), 7);
  151. assert_eq!(date1.get_date(), 8);
  152. assert_eq!(date1.get_hours(), 4);
  153. assert_eq!(date1.get_minutes(), 35);
  154. assert_eq!(date1.get_seconds(), 25);
  155. }
  156. #[wasm_bindgen_test]
  157. fn new_with_year_month_day_hr_min_sec_milli() {
  158. let date1 = Date::new_with_year_month_day_hr_min_sec_milli(1975, 7, 8, 4, 35, 25, 300);
  159. assert_eq!(date1.get_full_year(), 1975);
  160. assert_eq!(date1.get_month(), 7);
  161. assert_eq!(date1.get_date(), 8);
  162. assert_eq!(date1.get_hours(), 4);
  163. assert_eq!(date1.get_minutes(), 35);
  164. assert_eq!(date1.get_seconds(), 25);
  165. assert_eq!(date1.get_milliseconds(), 300);
  166. }
  167. #[wasm_bindgen_test]
  168. fn now() {
  169. assert!(Date::now() > 0.);
  170. }
  171. #[wasm_bindgen_test]
  172. fn parse() {
  173. let date = Date::parse("04 Dec 1995 00:12:00 GMT");
  174. let zero = Date::parse("01 Jan 1970 00:00:00 GMT");
  175. assert_eq!(date, 818035920000.0);
  176. assert_eq!(zero, 0.0);
  177. }
  178. #[wasm_bindgen_test]
  179. fn set_date() {
  180. let event1 = Date::new(&"August 19, 1975 23:15:30".into());
  181. let event2 = Date::new(&"August 24, 1975 23:15:30".into());
  182. let ms = event1.set_date(24);
  183. assert_eq!(ms, event2.get_time());
  184. assert_eq!(event1.get_time(), event2.get_time());
  185. assert_eq!(event1.get_date(), 24);
  186. }
  187. #[wasm_bindgen_test]
  188. fn set_full_year() {
  189. let event1 = Date::new(&"August 19, 1975 23:15:30".into());
  190. let event2 = Date::new(&"August 19, 1976 23:15:30".into());
  191. let ms = event1.set_full_year(1976);
  192. assert_eq!(ms, event2.get_time());
  193. assert_eq!(event1.get_time(), event2.get_time());
  194. assert_eq!(event1.get_full_year(), 1976);
  195. }
  196. #[wasm_bindgen_test]
  197. fn set_full_year_with_month() {
  198. let event1 = Date::new(&"August 19, 1976 23:15:30".into());
  199. event1.set_full_year_with_month(1979, 4);
  200. assert_eq!(event1.get_full_year(), 1979);
  201. assert_eq!(event1.get_month(), 4);
  202. }
  203. #[wasm_bindgen_test]
  204. fn set_full_year_with_month_date() {
  205. let event1 = Date::new(&"August 19, 1976 23:15:30".into());
  206. event1.set_full_year_with_month_date(1979, -1, 25);
  207. assert_eq!(event1.get_full_year(), 1978);
  208. assert_eq!(event1.get_month(), 11);
  209. assert_eq!(event1.get_date(), 25);
  210. }
  211. #[wasm_bindgen_test]
  212. fn set_hours() {
  213. let event1 = Date::new(&"August 19, 1975 23:15:30".into());
  214. let event2 = Date::new(&"August 19, 1975 20:15:30".into());
  215. let ms = event1.set_hours(20);
  216. assert_eq!(ms, event2.get_time());
  217. assert_eq!(event1.get_time(), event2.get_time());
  218. assert_eq!(event1.get_hours(), 20);
  219. }
  220. #[wasm_bindgen_test]
  221. fn set_milliseconds() {
  222. let event = Date::new(&"August 19, 1975 23:15:30".into());
  223. let ms = event.set_milliseconds(456);
  224. assert_eq!(ms, event.get_time());
  225. assert_eq!(event.get_milliseconds(), 456);
  226. }
  227. #[wasm_bindgen_test]
  228. fn set_minutes() {
  229. let event1 = Date::new(&"August 19, 1975 23:15:30".into());
  230. let event2 = Date::new(&"August 19, 1975 23:45:30".into());
  231. let ms = event1.set_minutes(45);
  232. assert_eq!(ms, event2.get_time());
  233. assert_eq!(event1.get_time(), event2.get_time());
  234. assert_eq!(event1.get_minutes(), 45);
  235. }
  236. #[wasm_bindgen_test]
  237. fn set_month() {
  238. let event1 = Date::new(&"August 19, 1975 23:15:30".into());
  239. let event2 = Date::new(&"April 19, 1975 23:15:30".into());
  240. let ms = event1.set_month(3);
  241. assert_eq!(ms, event2.get_time());
  242. assert_eq!(event1.get_time(), event2.get_time());
  243. assert_eq!(event1.get_month(), 3);
  244. }
  245. #[wasm_bindgen_test]
  246. fn set_seconds() {
  247. let event1 = Date::new(&"August 19, 1975 23:15:30".into());
  248. let event2 = Date::new(&"August 19, 1975 23:15:42".into());
  249. let ms = event1.set_seconds(42);
  250. assert_eq!(ms, event2.get_time());
  251. assert_eq!(event1.get_time(), event2.get_time());
  252. assert_eq!(event1.get_seconds(), 42);
  253. }
  254. #[wasm_bindgen_test]
  255. fn set_time() {
  256. let event1 = Date::new(&"July 1, 1999".into());
  257. let event2 = Date::new(&JsValue::undefined());
  258. let ms = event2.set_time(event1.get_time());
  259. assert_eq!(ms, event2.get_time());
  260. assert_eq!(event1.get_time(), event2.get_time());
  261. }
  262. #[wasm_bindgen_test]
  263. fn set_utc_date() {
  264. let event1 = Date::new(&"August 19, 1975 23:15:30 GMT-3:00".into());
  265. let event2 = Date::new(&"August 19, 1975 02:15:30 GMT".into());
  266. let ms = event1.set_utc_date(19);
  267. assert_eq!(ms, event2.get_time());
  268. assert_eq!(event1.get_time(), event2.get_time());
  269. assert_eq!(event1.get_utc_date(), 19);
  270. }
  271. #[wasm_bindgen_test]
  272. fn set_utc_full_year() {
  273. let event1 = Date::new(&"December 31, 1975 23:15:30 GMT-3:00".into());
  274. let event2 = Date::new(&"January 01, 1975 02:15:30 GMT".into());
  275. let ms = event1.set_utc_full_year(1975);
  276. assert_eq!(ms, event2.get_time());
  277. assert_eq!(event1.get_time(), event2.get_time());
  278. assert_eq!(event1.get_utc_full_year(), 1975);
  279. }
  280. #[wasm_bindgen_test]
  281. fn set_utc_full_year_with_month() {
  282. let event1 = Date::new(&"December 31, 1975 23:15:30 GMT-3:00".into());
  283. event1.set_utc_full_year_with_month(1975, 6);
  284. assert_eq!(event1.get_utc_full_year(), 1975);
  285. assert_eq!(event1.get_utc_month(), 6);
  286. }
  287. #[wasm_bindgen_test]
  288. fn set_utc_full_year_with_month_date() {
  289. let event1 = Date::new(&"December 31, 1975 23:15:30 GMT-3:00".into());
  290. event1.set_utc_full_year_with_month_date(1975, -2, 21);
  291. assert_eq!(event1.get_utc_full_year(), 1974);
  292. assert_eq!(event1.get_utc_month(), 10);
  293. assert_eq!(event1.get_utc_date(), 21);
  294. }
  295. #[wasm_bindgen_test]
  296. fn set_utc_hours() {
  297. let event1 = Date::new(&"August 19, 1975 23:15:30 GMT-3:00".into());
  298. let event2 = Date::new(&"August 20, 1975 23:15:30 GMT".into());
  299. let ms = event1.set_utc_hours(23);
  300. assert_eq!(ms, event2.get_time());
  301. assert_eq!(event1.get_time(), event2.get_time());
  302. assert_eq!(event1.get_utc_hours(), 23);
  303. }
  304. #[wasm_bindgen_test]
  305. fn set_utc_milliseconds() {
  306. let event1 = Date::new(&"1995-12-17T09:24:00Z".into());
  307. let event2 = Date::new(&"1995-12-17T09:24:00.420Z".into());
  308. let ms = event1.set_utc_milliseconds(420);
  309. assert_eq!(ms, event2.get_time());
  310. assert_eq!(event1.get_time(), event2.get_time());
  311. assert_eq!(event1.get_utc_milliseconds(), 420);
  312. }
  313. #[wasm_bindgen_test]
  314. fn set_utc_minutes() {
  315. let event1 = Date::new(&"December 31, 1975, 23:15:30 GMT-3:00".into());
  316. let event2 = Date::new(&"January 01, 1976 02:25:30 GMT".into());
  317. let ms = event1.set_utc_minutes(25);
  318. assert_eq!(ms, event2.get_time());
  319. assert_eq!(event1.get_time(), event2.get_time());
  320. assert_eq!(event1.get_utc_minutes(), 25);
  321. }
  322. #[wasm_bindgen_test]
  323. fn set_utc_month() {
  324. let event1 = Date::new(&"December 31, 1975 23:15:30 GMT-3:00".into());
  325. let event2 = Date::new(&"December 01, 1976 02:15:30 GMT".into());
  326. let ms = event1.set_utc_month(11);
  327. assert_eq!(ms, event2.get_time());
  328. assert_eq!(event1.get_time(), event2.get_time());
  329. assert_eq!(event1.get_utc_month(), 11);
  330. }
  331. #[wasm_bindgen_test]
  332. fn set_utc_seconds() {
  333. let event1 = Date::new(&"December 31, 1975 23:15:30 GMT-3:00".into());
  334. let event2 = Date::new(&"January 01, 1976 02:15:39 GMT".into());
  335. let ms = event1.set_utc_seconds(39);
  336. assert_eq!(ms, event2.get_time());
  337. assert_eq!(event1.get_time(), event2.get_time());
  338. assert_eq!(event1.get_utc_seconds(), 39);
  339. }
  340. #[wasm_bindgen_test]
  341. fn to_date_string() {
  342. let date = Date::new(&"05 October 2011 14:48 UTC".into());
  343. assert_eq!(JsValue::from(date.to_date_string()), "Wed Oct 05 2011");
  344. }
  345. #[wasm_bindgen_test]
  346. fn to_iso_string() {
  347. let date = Date::new(&"05 October 2011 14:48 UTC".into());
  348. assert_eq!(
  349. JsValue::from(date.to_iso_string()),
  350. "2011-10-05T14:48:00.000Z"
  351. );
  352. }
  353. #[wasm_bindgen_test]
  354. fn to_json() {
  355. let date = Date::new(&"August 19, 1975 23:15:30 UTC".into());
  356. assert_eq!(JsValue::from(date.to_json()), "1975-08-19T23:15:30.000Z");
  357. }
  358. #[wasm_bindgen_test]
  359. fn to_locale_date_string() {
  360. let date = Date::new(&"August 19, 1975 23:15:30 UTC".into());
  361. let s = date.to_locale_date_string("de-DE", &JsValue::undefined());
  362. assert!(s.length() > 0);
  363. }
  364. #[wasm_bindgen_test]
  365. fn to_locale_string() {
  366. let date = Date::new(&"August 19, 1975 23:15:30 UTC".into());
  367. let s = date.to_locale_string("de-DE", &JsValue::undefined());
  368. assert!(s.length() > 0);
  369. }
  370. #[wasm_bindgen_test]
  371. fn to_locale_time_string() {
  372. let date = Date::new(&"August 19, 1975 23:15:30".into());
  373. assert_eq!(
  374. JsValue::from(date.to_locale_time_string("en-US")),
  375. "11:15:30 PM",
  376. );
  377. }
  378. #[wasm_bindgen_test]
  379. fn to_string() {
  380. let date = Date::new(&"August 19, 1975 23:15:30".into());
  381. let s = JsValue::from(date.to_string()).as_string().unwrap();
  382. assert_eq!(&s[0..15], "Tue Aug 19 1975");
  383. }
  384. #[wasm_bindgen_test]
  385. fn to_time_string() {
  386. let date = Date::new(&"August 19, 1975 23:15:30".into());
  387. let s = JsValue::from(date.to_time_string()).as_string().unwrap();
  388. assert_eq!(&s[0..8], "23:15:30");
  389. }
  390. #[wasm_bindgen_test]
  391. fn to_utc_string() {
  392. let date = Date::new(&"14 Jun 2017 00:00:00 PDT".into());
  393. let s = JsValue::from(date.to_utc_string()).as_string().unwrap();
  394. assert_eq!(s, "Wed, 14 Jun 2017 07:00:00 GMT");
  395. }
  396. #[wasm_bindgen_test]
  397. fn utc() {
  398. assert_eq!(Date::utc(2018f64, 6f64), 1530403200000.0);
  399. }
  400. #[wasm_bindgen_test]
  401. fn value_of() {
  402. let date = Date::new(&Date::utc(2018f64, 6f64).into());
  403. assert_eq!(date.value_of(), 1530403200000.0);
  404. }
  405. #[wasm_bindgen_test]
  406. fn date_inheritance() {
  407. let date = Date::new(&"August 19, 1975 23:15:30".into());
  408. assert!(date.is_instance_of::<Date>());
  409. assert!(date.is_instance_of::<Object>());
  410. let _: &Object = date.as_ref();
  411. }