@mui/x-date-pickers 6.3.1 → 6.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (169) hide show
  1. package/AdapterDateFns/AdapterDateFns.d.ts +3 -7
  2. package/AdapterDateFns/AdapterDateFns.js +2 -8
  3. package/AdapterDateFnsJalali/AdapterDateFnsJalali.d.ts +3 -7
  4. package/AdapterDateFnsJalali/AdapterDateFnsJalali.js +2 -8
  5. package/AdapterDayjs/AdapterDayjs.d.ts +3 -9
  6. package/AdapterDayjs/AdapterDayjs.js +2 -3
  7. package/AdapterLuxon/AdapterLuxon.d.ts +3 -8
  8. package/AdapterLuxon/AdapterLuxon.js +6 -5
  9. package/AdapterMoment/AdapterMoment.d.ts +3 -9
  10. package/AdapterMoment/AdapterMoment.js +2 -2
  11. package/AdapterMomentHijri/AdapterMomentHijri.d.ts +5 -14
  12. package/AdapterMomentHijri/AdapterMomentHijri.js +4 -10
  13. package/AdapterMomentJalaali/AdapterMomentJalaali.d.ts +6 -16
  14. package/AdapterMomentJalaali/AdapterMomentJalaali.js +15 -12
  15. package/CHANGELOG.md +57 -0
  16. package/DateCalendar/DateCalendar.js +2 -2
  17. package/DateCalendar/DayCalendar.js +11 -10
  18. package/DateCalendar/PickersCalendarHeader.js +2 -2
  19. package/DateCalendar/useCalendarState.d.ts +1 -1
  20. package/DatePicker/shared.d.ts +1 -1
  21. package/LocalizationProvider/LocalizationProvider.d.ts +10 -8
  22. package/LocalizationProvider/LocalizationProvider.js +3 -3
  23. package/MonthCalendar/MonthCalendar.js +2 -2
  24. package/index.js +1 -1
  25. package/internals/hooks/useField/useField.utils.d.ts +13 -13
  26. package/internals/hooks/useField/useField.utils.js +3 -2
  27. package/internals/hooks/useUtils.d.ts +1 -1
  28. package/internals/utils/date-utils.d.ts +6 -4
  29. package/internals/utils/date-utils.js +16 -0
  30. package/internals/utils/time-utils.d.ts +4 -4
  31. package/internals/utils/validation/extractValidationProps.d.ts +1 -1
  32. package/legacy/AdapterDateFns/AdapterDateFns.js +2 -8
  33. package/legacy/AdapterDateFnsJalali/AdapterDateFnsJalali.js +2 -8
  34. package/legacy/AdapterDayjs/AdapterDayjs.js +2 -3
  35. package/legacy/AdapterLuxon/AdapterLuxon.js +6 -5
  36. package/legacy/AdapterMoment/AdapterMoment.js +2 -2
  37. package/legacy/AdapterMomentHijri/AdapterMomentHijri.js +4 -10
  38. package/legacy/AdapterMomentJalaali/AdapterMomentJalaali.js +15 -12
  39. package/legacy/DateCalendar/DateCalendar.js +2 -2
  40. package/legacy/DateCalendar/DayCalendar.js +11 -10
  41. package/legacy/DateCalendar/PickersCalendarHeader.js +2 -2
  42. package/legacy/LocalizationProvider/LocalizationProvider.js +3 -3
  43. package/legacy/MonthCalendar/MonthCalendar.js +2 -2
  44. package/legacy/index.js +1 -1
  45. package/legacy/internals/hooks/useField/useField.utils.js +5 -4
  46. package/legacy/internals/utils/date-utils.js +16 -0
  47. package/legacy/locales/csCZ.js +3 -3
  48. package/legacy/locales/index.js +1 -0
  49. package/legacy/locales/skSK.js +93 -0
  50. package/legacy/locales/ukUA.js +3 -1
  51. package/legacy/tests/describeGregorianAdapter/describeGregorianAdapter.js +2 -7
  52. package/legacy/tests/describeGregorianAdapter/describeGregorianAdapter.utils.js +2 -0
  53. package/legacy/tests/describeGregorianAdapter/index.js +2 -1
  54. package/legacy/tests/describeGregorianAdapter/testCalculations.js +272 -200
  55. package/legacy/tests/describeGregorianAdapter/testLocalization.js +34 -0
  56. package/legacy/tests/describeHijriAdapter/describeHijriAdapter.js +1 -3
  57. package/legacy/tests/describeHijriAdapter/testCalculations.js +101 -28
  58. package/legacy/tests/describeHijriAdapter/testLocalization.js +8 -0
  59. package/legacy/tests/describeJalaliAdapter/describeJalaliAdapter.js +2 -6
  60. package/legacy/tests/describeJalaliAdapter/testCalculations.js +157 -24
  61. package/legacy/tests/describeJalaliAdapter/testLocalization.js +8 -0
  62. package/locales/beBY.d.ts +3 -3
  63. package/locales/caES.d.ts +3 -3
  64. package/locales/csCZ.d.ts +3 -3
  65. package/locales/csCZ.js +3 -3
  66. package/locales/daDK.d.ts +3 -3
  67. package/locales/deDE.d.ts +3 -3
  68. package/locales/enUS.d.ts +3 -3
  69. package/locales/esES.d.ts +3 -3
  70. package/locales/faIR.d.ts +3 -3
  71. package/locales/fiFI.d.ts +3 -3
  72. package/locales/frFR.d.ts +3 -3
  73. package/locales/heIL.d.ts +3 -3
  74. package/locales/huHU.d.ts +3 -3
  75. package/locales/index.d.ts +1 -0
  76. package/locales/index.js +1 -0
  77. package/locales/isIS.d.ts +3 -3
  78. package/locales/itIT.d.ts +3 -3
  79. package/locales/jaJP.d.ts +3 -3
  80. package/locales/koKR.d.ts +3 -3
  81. package/locales/kzKZ.d.ts +3 -3
  82. package/locales/nbNO.d.ts +3 -3
  83. package/locales/nlNL.d.ts +3 -3
  84. package/locales/plPL.d.ts +3 -3
  85. package/locales/ptBR.d.ts +3 -3
  86. package/locales/ruRU.d.ts +3 -3
  87. package/locales/skSK.d.ts +53 -0
  88. package/locales/skSK.js +61 -0
  89. package/locales/svSE.d.ts +3 -3
  90. package/locales/trTR.d.ts +3 -3
  91. package/locales/ukUA.d.ts +3 -3
  92. package/locales/ukUA.js +1 -1
  93. package/locales/urPK.d.ts +3 -3
  94. package/locales/utils/getPickersLocalization.d.ts +3 -3
  95. package/locales/zhCN.d.ts +3 -3
  96. package/models/adapters.d.ts +43 -35
  97. package/modern/AdapterDateFns/AdapterDateFns.js +2 -8
  98. package/modern/AdapterDateFnsJalali/AdapterDateFnsJalali.js +2 -8
  99. package/modern/AdapterDayjs/AdapterDayjs.js +2 -2
  100. package/modern/AdapterLuxon/AdapterLuxon.js +6 -5
  101. package/modern/AdapterMoment/AdapterMoment.js +2 -2
  102. package/modern/AdapterMomentHijri/AdapterMomentHijri.js +4 -10
  103. package/modern/AdapterMomentJalaali/AdapterMomentJalaali.js +15 -12
  104. package/modern/DateCalendar/DateCalendar.js +2 -2
  105. package/modern/DateCalendar/DayCalendar.js +11 -10
  106. package/modern/DateCalendar/PickersCalendarHeader.js +2 -2
  107. package/modern/LocalizationProvider/LocalizationProvider.js +3 -3
  108. package/modern/MonthCalendar/MonthCalendar.js +2 -2
  109. package/modern/index.js +1 -1
  110. package/modern/internals/hooks/useField/useField.utils.js +3 -2
  111. package/modern/internals/utils/date-utils.js +16 -0
  112. package/modern/locales/csCZ.js +3 -3
  113. package/modern/locales/index.js +1 -0
  114. package/modern/locales/skSK.js +58 -0
  115. package/modern/locales/ukUA.js +1 -1
  116. package/modern/tests/describeGregorianAdapter/describeGregorianAdapter.js +2 -7
  117. package/modern/tests/describeGregorianAdapter/describeGregorianAdapter.utils.js +2 -0
  118. package/modern/tests/describeGregorianAdapter/index.js +2 -1
  119. package/modern/tests/describeGregorianAdapter/testCalculations.js +272 -198
  120. package/modern/tests/describeGregorianAdapter/testLocalization.js +34 -0
  121. package/modern/tests/describeHijriAdapter/describeHijriAdapter.js +1 -3
  122. package/modern/tests/describeHijriAdapter/testCalculations.js +101 -28
  123. package/modern/tests/describeHijriAdapter/testLocalization.js +8 -0
  124. package/modern/tests/describeJalaliAdapter/describeJalaliAdapter.js +2 -6
  125. package/modern/tests/describeJalaliAdapter/testCalculations.js +157 -24
  126. package/modern/tests/describeJalaliAdapter/testLocalization.js +8 -0
  127. package/node/AdapterDateFns/AdapterDateFns.js +2 -8
  128. package/node/AdapterDateFnsJalali/AdapterDateFnsJalali.js +2 -8
  129. package/node/AdapterDayjs/AdapterDayjs.js +2 -2
  130. package/node/AdapterLuxon/AdapterLuxon.js +6 -5
  131. package/node/AdapterMoment/AdapterMoment.js +2 -2
  132. package/node/AdapterMomentHijri/AdapterMomentHijri.js +4 -10
  133. package/node/AdapterMomentJalaali/AdapterMomentJalaali.js +15 -12
  134. package/node/DateCalendar/DateCalendar.js +1 -1
  135. package/node/DateCalendar/DayCalendar.js +11 -10
  136. package/node/DateCalendar/PickersCalendarHeader.js +2 -2
  137. package/node/LocalizationProvider/LocalizationProvider.js +5 -5
  138. package/node/MonthCalendar/MonthCalendar.js +1 -1
  139. package/node/index.js +1 -1
  140. package/node/internals/hooks/useField/useField.utils.js +3 -2
  141. package/node/internals/utils/date-utils.js +20 -2
  142. package/node/locales/csCZ.js +3 -3
  143. package/node/locales/index.js +11 -0
  144. package/node/locales/skSK.js +65 -0
  145. package/node/locales/ukUA.js +1 -1
  146. package/node/tests/describeGregorianAdapter/describeGregorianAdapter.js +3 -9
  147. package/node/tests/describeGregorianAdapter/describeGregorianAdapter.utils.js +10 -0
  148. package/node/tests/describeGregorianAdapter/index.js +4 -3
  149. package/node/tests/describeGregorianAdapter/testCalculations.js +272 -198
  150. package/node/tests/describeGregorianAdapter/testLocalization.js +35 -0
  151. package/node/tests/describeHijriAdapter/describeHijriAdapter.js +1 -3
  152. package/node/tests/describeHijriAdapter/testCalculations.js +100 -27
  153. package/node/tests/describeHijriAdapter/testLocalization.js +8 -0
  154. package/node/tests/describeJalaliAdapter/describeJalaliAdapter.js +2 -6
  155. package/node/tests/describeJalaliAdapter/testCalculations.js +156 -23
  156. package/node/tests/describeJalaliAdapter/testLocalization.js +8 -0
  157. package/package.json +1 -1
  158. package/tests/describeGregorianAdapter/describeGregorianAdapter.js +2 -7
  159. package/tests/describeGregorianAdapter/describeGregorianAdapter.utils.js +2 -0
  160. package/tests/describeGregorianAdapter/index.js +2 -1
  161. package/tests/describeGregorianAdapter/testCalculations.js +272 -198
  162. package/tests/describeGregorianAdapter/testLocalization.js +34 -0
  163. package/tests/describeHijriAdapter/describeHijriAdapter.js +1 -3
  164. package/tests/describeHijriAdapter/testCalculations.js +101 -28
  165. package/tests/describeHijriAdapter/testLocalization.js +8 -0
  166. package/tests/describeJalaliAdapter/describeJalaliAdapter.js +2 -6
  167. package/tests/describeJalaliAdapter/testCalculations.js +157 -24
  168. package/tests/describeJalaliAdapter/testLocalization.js +8 -0
  169. package/themeAugmentation/props.d.ts +1 -1
@@ -3,16 +3,11 @@ import createDescribe from '@mui/monorepo/test/utils/createDescribe';
3
3
  import { testCalculations } from './testCalculations';
4
4
  import { testLocalization } from './testLocalization';
5
5
  import { testFormat } from './testFormat';
6
- export const TEST_DATE_ISO = '2018-10-30T11:44:00.000Z';
7
6
  function innerGregorianDescribeAdapter(Adapter, params) {
8
- const adapter = new Adapter({
9
- locale: params.locale
10
- });
7
+ const adapter = new Adapter();
11
8
  describe(adapter.lib, () => {
12
9
  const testSuitParams = _extends({}, params, {
13
- adapter,
14
- testDateISO: TEST_DATE_ISO,
15
- testDate: adapter.date(TEST_DATE_ISO)
10
+ adapter
16
11
  });
17
12
  testCalculations(testSuitParams);
18
13
  testLocalization(testSuitParams);
@@ -0,0 +1,2 @@
1
+ export const TEST_DATE_ISO_STRING = '2018-10-30T11:44:00.000Z';
2
+ export const TEST_DATE_LOCALE_STRING = '2018-10-30';
@@ -1 +1,2 @@
1
- export { describeGregorianAdapter, TEST_DATE_ISO } from './describeGregorianAdapter';
1
+ export { describeGregorianAdapter } from './describeGregorianAdapter';
2
+ export { TEST_DATE_ISO_STRING } from './describeGregorianAdapter.utils';
@@ -1,275 +1,349 @@
1
1
  import { expect } from 'chai';
2
+ import { TEST_DATE_ISO_STRING, TEST_DATE_LOCALE_STRING } from './describeGregorianAdapter.utils';
2
3
  export const testCalculations = ({
3
- adapter,
4
- testDate,
5
- testDateISO,
6
- formatDateTime
4
+ adapter
7
5
  }) => {
8
- it('Method: date', () => {
9
- // ISO string
10
- expect(adapter.isEqual(testDate, adapter.date(testDateISO))).to.equal(true);
11
-
12
- // Native Date
13
- expect(adapter.isEqual(testDate, adapter.date(new Date(testDateISO)))).to.equal(true);
6
+ const testDateIso = adapter.date(TEST_DATE_ISO_STRING);
7
+ const testDateLocale = adapter.date(TEST_DATE_LOCALE_STRING);
8
+ describe('Method: date', () => {
9
+ it('should parse strings', () => {
10
+ expect(adapter.isEqual(testDateIso, adapter.date(TEST_DATE_ISO_STRING))).to.equal(true);
11
+ expect(adapter.isEqual(testDateLocale, adapter.date(TEST_DATE_LOCALE_STRING))).to.equal(true);
12
+ });
13
+ it('should parse native Date object', () => {
14
+ expect(adapter.isEqual(testDateIso, adapter.date(new Date(TEST_DATE_ISO_STRING)))).to.equal(true);
15
+ expect(adapter.isEqual(testDateLocale, adapter.date(new Date(TEST_DATE_LOCALE_STRING)))).to.equal(true);
16
+ });
17
+ it('should parse already-parsed object', () => {
18
+ expect(adapter.isEqual(testDateIso, adapter.date(adapter.date(TEST_DATE_ISO_STRING)))).to.equal(true);
19
+ expect(adapter.isEqual(testDateLocale, adapter.date(adapter.date(TEST_DATE_LOCALE_STRING)))).to.equal(true);
20
+ });
21
+ it('should parse null', () => {
22
+ expect(adapter.date(null)).to.equal(null);
23
+ });
24
+ it('should parse undefined', () => {
25
+ expect(adapter.date(undefined)).toEqualDateTime(new Date());
26
+ });
27
+ });
28
+ it('Method: toJsDate', () => {
29
+ expect(adapter.toJsDate(testDateIso)).to.be.instanceOf(Date);
30
+ expect(adapter.toJsDate(testDateLocale)).to.be.instanceOf(Date);
31
+ });
32
+ it('Method: parseISO', () => {
33
+ expect(adapter.parseISO(TEST_DATE_ISO_STRING)).toEqualDateTime(testDateIso);
34
+ });
35
+ it('Method: toISO', () => {
36
+ const outputtedISO = adapter.toISO(testDateIso);
37
+ if (adapter.lib === 'date-fns') {
38
+ // date-fns never suppress useless milliseconds in the end
39
+ expect(outputtedISO).to.equal(TEST_DATE_ISO_STRING.replace('.000Z', 'Z'));
40
+ } else if (adapter.lib === 'luxon') {
41
+ // luxon does not shorthand +00:00 to Z, which is also valid ISO string
42
+ expect(outputtedISO).to.equal(TEST_DATE_ISO_STRING.replace('Z', '+00:00'));
43
+ } else {
44
+ expect(outputtedISO).to.equal(TEST_DATE_ISO_STRING);
45
+ }
46
+ });
47
+ it('Method: parse', () => {
48
+ // Date time
49
+ expect(adapter.parse('10/30/2018 11:44', adapter.formats.keyboardDateTime24h)).toEqualDateTime('2018-10-30T11:44:00.000Z');
14
50
 
15
- // Parse already date-specific object
16
- expect(adapter.isEqual(testDate, adapter.date(adapter.date(testDateISO)))).to.equal(true);
51
+ // Date
52
+ expect(adapter.parse('10/30/2018', adapter.formats.keyboardDate)).toEqualDateTime('2018-10-30T00:00:00.000Z');
17
53
 
18
- // Parse null inputs
19
- expect(adapter.date(null)).to.equal(null);
54
+ // Empty string
55
+ expect(adapter.parse('', adapter.formats.keyboardDate)).to.equal(null);
20
56
 
21
- // Undefined
22
- expect(!!adapter.date(undefined)).to.equal(true);
57
+ // Invalid input
58
+ expect(adapter.isValid(adapter.parse('99/99/9999', adapter.formats.keyboardDate))).to.equal(false);
59
+ });
60
+ it('Method: isNull', () => {
61
+ expect(adapter.isNull(null)).to.equal(true);
62
+ expect(adapter.isNull(testDateIso)).to.equal(false);
63
+ expect(adapter.isNull(testDateLocale)).to.equal(false);
23
64
  });
24
65
  it('Method: isValid', () => {
25
66
  const invalidDate = adapter.date('2018-42-30T11:60:00.000Z');
26
- expect(adapter.isValid(testDate)).to.equal(true);
67
+ expect(adapter.isValid(testDateIso)).to.equal(true);
68
+ expect(adapter.isValid(testDateLocale)).to.equal(true);
27
69
  expect(adapter.isValid(invalidDate)).to.equal(false);
28
70
  expect(adapter.isValid(undefined)).to.equal(true);
29
71
  expect(adapter.isValid(null)).to.equal(false);
30
72
  expect(adapter.isValid('2018-42-30T11:60:00.000Z')).to.equal(false);
31
73
  });
32
- it('Method: addYears', () => {
33
- expect(adapter.format(adapter.addYears(testDate, 2), 'year')).to.equal('2020');
34
- expect(adapter.format(adapter.addYears(testDate, -2), 'year')).to.equal('2016');
74
+ describe('Method: getDiff', () => {
75
+ it('should compute the millisecond diff when there is no unit', () => {
76
+ expect(adapter.getDiff(testDateIso, adapter.date('2018-10-29T11:44:00.000Z'))).to.equal(86400000);
77
+ expect(adapter.getDiff(testDateIso, adapter.date('2018-10-31T11:44:00.000Z'))).to.equal(-86400000);
78
+ expect(adapter.getDiff(testDateIso, adapter.date('2018-10-31T11:44:00.000Z'))).to.equal(-86400000);
79
+ });
80
+ it('should compute the diff in the provided unit (ISO)', () => {
81
+ expect(adapter.getDiff(testDateIso, adapter.date('2017-09-29T11:44:00.000Z'), 'years')).to.equal(1);
82
+ expect(adapter.getDiff(testDateIso, adapter.date('2018-08-29T11:44:00.000Z'), 'months')).to.equal(2);
83
+ expect(adapter.getDiff(testDateIso, adapter.date('2018-05-29T11:44:00.000Z'), 'quarters')).to.equal(1);
84
+ expect(adapter.getDiff(testDateIso, adapter.date('2018-09-29T11:44:00.000Z'), 'days')).to.equal(31);
85
+ expect(adapter.getDiff(testDateIso, adapter.date('2018-09-29T11:44:00.000Z'), 'weeks')).to.equal(4);
86
+ expect(adapter.getDiff(testDateIso, adapter.date('2018-09-29T11:44:00.000Z'), 'hours')).to.equal(744);
87
+ expect(adapter.getDiff(testDateIso, adapter.date('2018-09-29T11:44:00.000Z'), 'minutes')).to.equal(44640);
88
+ expect(adapter.getDiff(testDateIso, adapter.date('2018-10-30T10:44:00.000Z'), 'seconds')).to.equal(3600);
89
+ expect(adapter.getDiff(testDateIso, adapter.date('2018-10-30T10:44:00.000Z'), 'milliseconds')).to.equal(3600000);
90
+ });
91
+ it('should compute the diff in the provided unit (locale)', () => {
92
+ expect(adapter.getDiff(testDateLocale, adapter.date('2017-09-29'), 'years')).to.equal(1);
93
+ expect(adapter.getDiff(testDateLocale, adapter.date('2018-08-29'), 'months')).to.equal(2);
94
+ expect(adapter.getDiff(testDateLocale, adapter.date('2018-05-29'), 'quarters')).to.equal(1);
95
+ expect(adapter.getDiff(testDateLocale, adapter.date('2018-09-29'), 'days')).to.equal(31);
96
+ expect(adapter.getDiff(testDateLocale, adapter.date('2018-09-29'), 'weeks')).to.equal(4);
97
+ });
98
+ it('should compute the diff with string "comparing" param', () => {
99
+ expect(adapter.getDiff(testDateLocale, '2017-09-29', 'years')).to.equal(1);
100
+ expect(adapter.getDiff(testDateLocale, '2018-08-29', 'months')).to.equal(2);
101
+ expect(adapter.getDiff(testDateLocale, '2018-05-29', 'quarters')).to.equal(1);
102
+ expect(adapter.getDiff(testDateLocale, '2018-09-29', 'days')).to.equal(31);
103
+ expect(adapter.getDiff(testDateLocale, '2018-09-29', 'weeks')).to.equal(4);
104
+ });
35
105
  });
36
- it('Method: addMonths', () => {
37
- expect(adapter.format(adapter.addMonths(testDate, 2), 'monthAndYear')).to.equal('December 2018');
38
- expect(adapter.format(adapter.addMonths(testDate, -2), 'monthAndYear')).to.equal('August 2018');
106
+ it('Method: isEqual', () => {
107
+ expect(adapter.isEqual(adapter.date(null), null)).to.equal(true);
108
+ expect(adapter.isEqual(testDateIso, adapter.date(TEST_DATE_ISO_STRING))).to.equal(true);
109
+ expect(adapter.isEqual(null, testDateIso)).to.equal(false);
110
+ expect(adapter.isEqual(testDateLocale, adapter.date(TEST_DATE_LOCALE_STRING))).to.equal(true);
111
+ expect(adapter.isEqual(null, testDateLocale)).to.equal(false);
39
112
  });
40
- it('Method: addWeeks', () => {
41
- expect(adapter.getDiff(adapter.addWeeks(testDate, 1), testDate, 'weeks')).to.equal(1);
42
- expect(adapter.getDiff(adapter.addWeeks(testDate, -1), testDate, 'weeks')).to.equal(-1);
113
+ it('Method: isSameYear', () => {
114
+ expect(adapter.isSameYear(testDateIso, adapter.date('2018-10-01T00:00:00.000Z'))).to.equal(true);
115
+ expect(adapter.isSameYear(testDateIso, adapter.date('2019-10-01T00:00:00.000Z'))).to.equal(false);
116
+ expect(adapter.isSameYear(testDateLocale, adapter.date('2018-10-01T00:00:00.000Z'))).to.equal(true);
117
+ expect(adapter.isSameYear(testDateLocale, adapter.date('2019-10-01T00:00:00.000Z'))).to.equal(false);
43
118
  });
44
- it('Method: addDays', () => {
45
- expect(adapter.format(adapter.addDays(testDate, 1), 'dayOfMonth')).to.equal('31');
46
- expect(adapter.format(adapter.addDays(testDate, -1), 'dayOfMonth')).to.equal('29');
119
+ it('Method: isSameMonth', () => {
120
+ expect(adapter.isSameMonth(testDateIso, adapter.date('2018-10-01T00:00:00.000Z'))).to.equal(true);
121
+ expect(adapter.isSameMonth(testDateIso, adapter.date('2019-10-01T00:00:00.000Z'))).to.equal(false);
122
+ expect(adapter.isSameMonth(testDateLocale, adapter.date('2018-10-01T00:00:00.000Z'))).to.equal(true);
123
+ expect(adapter.isSameMonth(testDateLocale, adapter.date('2019-10-01T00:00:00.000Z'))).to.equal(false);
47
124
  });
48
- it('Method: addHours', () => {
49
- expect(adapter.format(adapter.addHours(testDate, 65), 'hours24h')).to.equal('04');
50
- expect(adapter.format(adapter.addHours(testDate, -5), 'hours24h')).to.equal('06');
125
+ it('Method: isSameDay', () => {
126
+ expect(adapter.isSameDay(testDateIso, adapter.date('2018-10-30T00:00:00.000Z'))).to.equal(true);
127
+ expect(adapter.isSameDay(testDateIso, adapter.date('2019-10-30T00:00:00.000Z'))).to.equal(false);
128
+ expect(adapter.isSameDay(testDateLocale, adapter.date('2018-10-30T00:00:00.000Z'))).to.equal(true);
129
+ expect(adapter.isSameDay(testDateLocale, adapter.date('2019-10-30T00:00:00.000Z'))).to.equal(false);
51
130
  });
52
- it('Method: addMinutes', () => {
53
- expect(adapter.format(adapter.addMinutes(testDate, 65), 'minutes')).to.equal('49');
54
- expect(adapter.format(adapter.addMinutes(testDate, -5), 'minutes')).to.equal('39');
131
+ it('Method: isSameHour', () => {
132
+ expect(adapter.isSameHour(testDateIso, adapter.date('2018-10-30T11:00:00.000Z'))).to.equal(true);
133
+ expect(adapter.isSameHour(testDateIso, adapter.date('2018-10-30T12:00:00.000Z'))).to.equal(false);
55
134
  });
56
- it('Method: addSeconds', () => {
57
- expect(adapter.format(adapter.addSeconds(testDate, 65), 'seconds')).to.equal('05');
58
- expect(adapter.format(adapter.addSeconds(testDate, -5), 'seconds')).to.equal('55');
135
+ it('Method: isAfter', () => {
136
+ expect(adapter.isAfter(adapter.date(), testDateIso)).to.equal(true);
137
+ expect(adapter.isAfter(testDateIso, adapter.date())).to.equal(false);
138
+ expect(adapter.isAfter(adapter.date(), testDateLocale)).to.equal(true);
139
+ expect(adapter.isAfter(testDateLocale, adapter.date())).to.equal(false);
140
+ });
141
+ it('Method: isAfterYear', () => {
142
+ const nextYearIso = adapter.addYears(testDateIso, 1);
143
+ expect(adapter.isAfterYear(nextYearIso, testDateIso)).to.equal(true);
144
+ expect(adapter.isAfterYear(testDateIso, nextYearIso)).to.equal(false);
145
+ const nextYearLocale = adapter.addYears(testDateLocale, 1);
146
+ expect(adapter.isAfterYear(nextYearLocale, testDateLocale)).to.equal(true);
147
+ expect(adapter.isAfterYear(testDateLocale, nextYearLocale)).to.equal(false);
148
+ });
149
+ it('Method: isAfterDay', () => {
150
+ const nextDayIso = adapter.addDays(testDateIso, 1);
151
+ expect(adapter.isAfterDay(nextDayIso, testDateIso)).to.equal(true);
152
+ expect(adapter.isAfterDay(testDateIso, nextDayIso)).to.equal(false);
153
+ const nextDayLocale = adapter.addDays(testDateLocale, 1);
154
+ expect(adapter.isAfterDay(nextDayLocale, testDateLocale)).to.equal(true);
155
+ expect(adapter.isAfterDay(testDateLocale, nextDayLocale)).to.equal(false);
156
+ });
157
+ it('Method: isBefore', () => {
158
+ expect(adapter.isBefore(testDateIso, adapter.date())).to.equal(true);
159
+ expect(adapter.isBefore(adapter.date(), testDateIso)).to.equal(false);
160
+ expect(adapter.isBefore(testDateLocale, adapter.date())).to.equal(true);
161
+ expect(adapter.isBefore(adapter.date(), testDateLocale)).to.equal(false);
162
+ });
163
+ it('Method: isBeforeYear', () => {
164
+ const nextYearIso = adapter.addYears(testDateIso, -1);
165
+ expect(adapter.isBeforeYear(nextYearIso, testDateIso)).to.equal(true);
166
+ expect(adapter.isBeforeYear(testDateIso, nextYearIso)).to.equal(false);
167
+ const nextYearLocale = adapter.addYears(testDateLocale, -1);
168
+ expect(adapter.isBeforeYear(nextYearLocale, testDateLocale)).to.equal(true);
169
+ expect(adapter.isBeforeYear(testDateLocale, nextYearLocale)).to.equal(false);
170
+ });
171
+ it('Method: isBeforeDay', () => {
172
+ const nextDayIso = adapter.addDays(testDateIso, -1);
173
+ expect(adapter.isBeforeDay(nextDayIso, testDateIso)).to.equal(true);
174
+ expect(adapter.isBeforeDay(testDateIso, nextDayIso)).to.equal(false);
175
+ const nextDayLocale = adapter.addDays(testDateLocale, -1);
176
+ expect(adapter.isBeforeDay(nextDayLocale, testDateLocale)).to.equal(true);
177
+ expect(adapter.isBeforeDay(testDateLocale, nextDayLocale)).to.equal(false);
178
+ });
179
+ describe('Method: isWithinRange', () => {
180
+ it('should work on simple examples', () => {
181
+ expect(adapter.isWithinRange(adapter.date('2019-10-01T00:00:00.000Z'), [adapter.date('2019-09-01T00:00:00.000Z'), adapter.date('2019-11-01T00:00:00.000Z')])).to.equal(true);
182
+ expect(adapter.isWithinRange(adapter.date('2019-12-01T00:00:00.000Z'), [adapter.date('2019-09-01T00:00:00.000Z'), adapter.date('2019-11-01T00:00:00.000Z')])).to.equal(false);
183
+ expect(adapter.isWithinRange(adapter.date('2019-10-01'), [adapter.date('2019-09-01'), adapter.date('2019-11-01')])).to.equal(true);
184
+ expect(adapter.isWithinRange(adapter.date('2019-12-01'), [adapter.date('2019-09-01'), adapter.date('2019-11-01')])).to.equal(false);
185
+ });
186
+ it('should use inclusivity of range', () => {
187
+ expect(adapter.isWithinRange(adapter.date('2019-09-01T00:00:00.000Z'), [adapter.date('2019-09-01T00:00:00.000Z'), adapter.date('2019-12-01T00:00:00.000Z')])).to.equal(true);
188
+ expect(adapter.isWithinRange(adapter.date('2019-12-01T00:00:00.000Z'), [adapter.date('2019-09-01T00:00:00.000Z'), adapter.date('2019-12-01T00:00:00.000Z')])).to.equal(true);
189
+ expect(adapter.isWithinRange(adapter.date('2019-09-01'), [adapter.date('2019-09-01'), adapter.date('2019-12-01')])).to.equal(true);
190
+ expect(adapter.isWithinRange(adapter.date('2019-12-01'), [adapter.date('2019-09-01'), adapter.date('2019-12-01')])).to.equal(true);
191
+ });
59
192
  });
60
193
  it('Method: startOfYear', () => {
61
- expect(adapter.formatByString(adapter.startOfYear(testDate), formatDateTime)).to.equal('2018-01-01 00:00:00');
194
+ const expected = '2018-01-01T00:00:00.000Z';
195
+ expect(adapter.startOfYear(testDateIso)).toEqualDateTime(expected);
196
+ expect(adapter.startOfYear(testDateLocale)).toEqualDateTime(expected);
62
197
  });
63
198
  it('Method: startOfMonth', () => {
64
- expect(adapter.formatByString(adapter.startOfMonth(testDate), formatDateTime)).to.equal('2018-10-01 00:00:00');
199
+ const expected = '2018-10-01T00:00:00.000Z';
200
+ expect(adapter.startOfMonth(testDateIso)).toEqualDateTime(expected);
201
+ expect(adapter.startOfMonth(testDateLocale)).toEqualDateTime(expected);
65
202
  });
66
203
  it('Method: startOfWeek', () => {
67
- expect(adapter.formatByString(adapter.startOfWeek(testDate), formatDateTime)).to.equal(adapter.lib === 'luxon' ? '2018-10-29 00:00:00' : '2018-10-28 00:00:00');
68
-
69
- // Non ISO
70
- expect(adapter.formatByString(adapter.startOfWeek(adapter.date('2018-10-28T00:00:00.000Z')), formatDateTime)).to.equal(adapter.lib === 'luxon' ? '2018-10-22 00:00:00' : '2018-10-28 00:00:00');
204
+ const expected = adapter.lib === 'luxon' ? '2018-10-29T00:00:00.000Z' : '2018-10-28T00:00:00.000Z';
205
+ expect(adapter.startOfWeek(testDateIso)).toEqualDateTime(expected);
206
+ expect(adapter.startOfWeek(testDateLocale)).toEqualDateTime(expected);
71
207
  });
72
208
  it('Method: startOfDay', () => {
73
- expect(adapter.formatByString(adapter.startOfDay(testDate), formatDateTime)).to.equal('2018-10-30 00:00:00');
209
+ const expected = '2018-10-30T00:00:00.000Z';
210
+ expect(adapter.startOfDay(testDateIso)).toEqualDateTime(expected);
211
+ expect(adapter.startOfDay(testDateLocale)).toEqualDateTime(expected);
74
212
  });
75
213
  it('Method: endOfYear', () => {
76
- expect(adapter.formatByString(adapter.endOfYear(testDate), formatDateTime)).to.equal('2018-12-31 23:59:59');
214
+ const expected = '2018-12-31T23:59:59.999Z';
215
+ expect(adapter.endOfYear(testDateIso)).toEqualDateTime(expected);
216
+ expect(adapter.endOfYear(testDateLocale)).toEqualDateTime(expected);
77
217
  });
78
218
  it('Method: endOfMonth', () => {
79
- expect(adapter.formatByString(adapter.endOfMonth(testDate), formatDateTime)).to.equal('2018-10-31 23:59:59');
219
+ const expected = '2018-10-31T23:59:59.999Z';
220
+ expect(adapter.endOfMonth(testDateIso)).toEqualDateTime(expected);
221
+ expect(adapter.endOfMonth(testDateLocale)).toEqualDateTime(expected);
80
222
  });
81
223
  it('Method: endOfWeek', () => {
82
- expect(adapter.formatByString(adapter.endOfWeek(testDate), formatDateTime)).to.equal(adapter.lib === 'luxon' ? '2018-11-04 23:59:59' : '2018-11-03 23:59:59');
83
-
84
- // Non ISO
85
- expect(adapter.formatByString(adapter.endOfWeek(adapter.date('2018-10-28T00:00:00.000Z')), formatDateTime)).to.equal(adapter.lib === 'luxon' ? '2018-10-28 23:59:59' : '2018-11-03 23:59:59');
224
+ const expected = adapter.lib === 'luxon' ? '2018-11-04T23:59:59.999Z' : '2018-11-03T23:59:59.999Z';
225
+ expect(adapter.endOfWeek(testDateIso)).toEqualDateTime(expected);
226
+ expect(adapter.endOfWeek(testDateLocale)).toEqualDateTime(expected);
86
227
  });
87
228
  it('Method: endOfDay', () => {
88
- expect(adapter.formatByString(adapter.endOfDay(testDate), formatDateTime)).to.equal('2018-10-30 23:59:59');
229
+ const expected = '2018-10-30T23:59:59.999Z';
230
+ expect(adapter.endOfDay(testDateIso)).toEqualDateTime(expected);
231
+ expect(adapter.endOfDay(testDateLocale)).toEqualDateTime(expected);
89
232
  });
90
- it('Method: getPreviousMonth', () => {
91
- expect(adapter.formatByString(adapter.getPreviousMonth(testDate), formatDateTime)).to.equal('2018-09-30 11:44:00');
233
+ it('Method: addYears', () => {
234
+ expect(adapter.addYears(testDateIso, 2)).toEqualDateTime('2020-10-30T11:44:00.000Z');
235
+ expect(adapter.addYears(testDateIso, -2)).toEqualDateTime('2016-10-30T11:44:00.000Z');
92
236
  });
93
- it('Method: getMonthArray', () => {
94
- expect(adapter.getMonthArray(testDate).map(date => adapter.formatByString(date, formatDateTime))).to.deep.equal(['2018-01-01 00:00:00', '2018-02-01 00:00:00', '2018-03-01 00:00:00', '2018-04-01 00:00:00', '2018-05-01 00:00:00', '2018-06-01 00:00:00', '2018-07-01 00:00:00', '2018-08-01 00:00:00', '2018-09-01 00:00:00', '2018-10-01 00:00:00', '2018-11-01 00:00:00', '2018-12-01 00:00:00']);
237
+ it('Method: addMonths', () => {
238
+ expect(adapter.addMonths(testDateIso, 2)).toEqualDateTime('2018-12-30T11:44:00.000Z');
239
+ expect(adapter.addMonths(testDateIso, -2)).toEqualDateTime('2018-08-30T11:44:00.000Z');
240
+ expect(adapter.addMonths(testDateIso, 3)).toEqualDateTime('2019-01-30T11:44:00.000Z');
95
241
  });
96
- it('Method: getNextMonth', () => {
97
- expect(adapter.formatByString(adapter.getNextMonth(testDate), formatDateTime)).to.equal('2018-11-30 11:44:00');
242
+ it('Method: addWeeks', () => {
243
+ expect(adapter.addWeeks(testDateIso, 2)).toEqualDateTime('2018-11-13T11:44:00.000Z');
244
+ expect(adapter.addWeeks(testDateIso, -2)).toEqualDateTime('2018-10-16T11:44:00.000Z');
98
245
  });
99
- it('Method: getHours', () => {
100
- expect(adapter.getHours(testDate)).to.equal(new Date(testDateISO).getHours());
246
+ it('Method: addDays', () => {
247
+ expect(adapter.addDays(testDateIso, 2)).toEqualDateTime('2018-11-01T11:44:00.000Z');
248
+ expect(adapter.addDays(testDateIso, -2)).toEqualDateTime('2018-10-28T11:44:00.000Z');
101
249
  });
102
- it('Method: getMinutes', () => {
103
- expect(adapter.getMinutes(testDate)).to.equal(44);
250
+ it('Method: addHours', () => {
251
+ expect(adapter.addHours(testDateIso, 2)).toEqualDateTime('2018-10-30T13:44:00.000Z');
252
+ expect(adapter.addHours(testDateIso, -2)).toEqualDateTime('2018-10-30T09:44:00.000Z');
253
+ expect(adapter.addHours(testDateIso, 15)).toEqualDateTime('2018-10-31T02:44:00.000Z');
104
254
  });
105
- it('Method: getSeconds', () => {
106
- expect(adapter.getSeconds(testDate)).to.equal(0);
255
+ it('Method: addMinutes', () => {
256
+ expect(adapter.addMinutes(testDateIso, 2)).toEqualDateTime('2018-10-30T11:46:00.000Z');
257
+ expect(adapter.addMinutes(testDateIso, -2)).toEqualDateTime('2018-10-30T11:42:00.000Z');
258
+ expect(adapter.addMinutes(testDateIso, 20)).toEqualDateTime('2018-10-30T12:04:00.000Z');
107
259
  });
108
- it('Method: getDate', () => {
109
- expect(adapter.getDate(testDate)).to.equal(30);
260
+ it('Method: addSeconds', () => {
261
+ expect(adapter.addSeconds(testDateIso, 2)).toEqualDateTime('2018-10-30T11:44:02.000Z');
262
+ expect(adapter.addSeconds(testDateIso, -2)).toEqualDateTime('2018-10-30T11:43:58.000Z');
263
+ expect(adapter.addSeconds(testDateIso, 70)).toEqualDateTime('2018-10-30T11:45:10.000Z');
110
264
  });
111
265
  it('Method: getYear', () => {
112
- expect(adapter.getYear(testDate)).to.equal(2018);
266
+ expect(adapter.getYear(testDateIso)).to.equal(2018);
113
267
  });
114
268
  it('Method: getMonth', () => {
115
- expect(adapter.getMonth(testDate)).to.equal(9);
269
+ expect(adapter.getMonth(testDateIso)).to.equal(9);
116
270
  });
117
- it('Method: getDaysInMonth', () => {
118
- expect(adapter.getDaysInMonth(testDate)).to.equal(31);
119
- });
120
- it('Method: setMonth', () => {
121
- const updatedTime = adapter.formatByString(adapter.setMonth(testDate, 4), formatDateTime);
122
- expect(updatedTime).to.equal('2018-05-30 11:44:00');
271
+ it('Method: getDate', () => {
272
+ expect(adapter.getDate(testDateIso)).to.equal(30);
123
273
  });
124
- it('Method: setHours', () => {
125
- const updatedTime = adapter.formatByString(adapter.setHours(testDate, 0), formatDateTime);
126
- expect(updatedTime).to.equal('2018-10-30 00:44:00');
274
+ it('Method: getHours', () => {
275
+ expect(adapter.getHours(testDateIso)).to.equal(11);
127
276
  });
128
- it('Method: setMinutes', () => {
129
- const updatedTime = adapter.formatByString(adapter.setMinutes(testDate, 12), formatDateTime);
130
- expect(updatedTime).to.equal('2018-10-30 11:12:00');
277
+ it('Method: getMinutes', () => {
278
+ expect(adapter.getMinutes(testDateIso)).to.equal(44);
131
279
  });
132
- it('Method: setMinutes', () => {
133
- const updatedTime = adapter.formatByString(adapter.setMinutes(testDate, 12), formatDateTime);
134
- expect(updatedTime).to.equal('2018-10-30 11:12:00');
280
+ it('Method: getSeconds', () => {
281
+ expect(adapter.getSeconds(testDateIso)).to.equal(0);
135
282
  });
136
283
  it('Method: setYear', () => {
137
- const updatedTime = adapter.formatByString(adapter.setYear(testDate, 2011), formatDateTime);
138
- expect(updatedTime).to.equal('2011-10-30 11:44:00');
284
+ expect(adapter.setYear(testDateIso, 2011)).toEqualDateTime('2011-10-30T11:44:00.000Z');
285
+ });
286
+ it('Method: setMonth', () => {
287
+ expect(adapter.setMonth(testDateIso, 4)).toEqualDateTime('2018-05-30T11:44:00.000Z');
139
288
  });
140
289
  it('Method: setDate', () => {
141
- const updatedTime = adapter.formatByString(adapter.setDate(testDate, 15), formatDateTime);
142
- expect(updatedTime).to.equal('2018-10-15 11:44:00');
290
+ expect(adapter.setDate(testDateIso, 15)).toEqualDateTime('2018-10-15T11:44:00.000Z');
143
291
  });
144
- it('Method: setSeconds', () => {
145
- const updatedValue = adapter.formatByString(adapter.setSeconds(testDate, 11), formatDateTime);
146
- expect(updatedValue).to.equal('2018-10-30 11:44:11');
292
+ it('Method: setHours', () => {
293
+ expect(adapter.setHours(testDateIso, 0)).toEqualDateTime('2018-10-30T00:44:00.000Z');
147
294
  });
148
- it('Method: isAfter', () => {
149
- expect(adapter.isAfter(adapter.date(), testDate)).to.equal(true);
150
- expect(adapter.isAfter(testDate, adapter.date())).to.equal(false);
295
+ it('Method: setMinutes', () => {
296
+ expect(adapter.setMinutes(testDateIso, 12)).toEqualDateTime('2018-10-30T11:12:00.000Z');
151
297
  });
152
- it('Method: isBefore', () => {
153
- expect(adapter.isBefore(testDate, adapter.date())).to.equal(true);
154
- expect(adapter.isBefore(adapter.date(), testDate)).to.equal(false);
298
+ it('Method: setSeconds', () => {
299
+ expect(adapter.setSeconds(testDateIso, 11)).toEqualDateTime('2018-10-30T11:44:11.000Z');
155
300
  });
156
- it('Method: isAfterDay', () => {
157
- const nextDay = adapter.addDays(testDate, 1);
158
- expect(adapter.isAfterDay(nextDay, testDate)).to.equal(true);
159
- expect(adapter.isAfterDay(testDate, nextDay)).to.equal(false);
301
+ it('Method: getDaysInMonth', () => {
302
+ expect(adapter.getDaysInMonth(testDateIso)).to.equal(31);
303
+ expect(adapter.getDaysInMonth(testDateLocale)).to.equal(31);
304
+ expect(adapter.getDaysInMonth(adapter.addMonths(testDateIso, 1))).to.equal(30);
160
305
  });
161
- it('Method: isBeforeDay', () => {
162
- const previousDay = adapter.addDays(testDate, -1);
163
- expect(adapter.isBeforeDay(testDate, previousDay)).to.equal(false);
164
- expect(adapter.isBeforeDay(previousDay, testDate)).to.equal(true);
306
+ it('Method: getNextMonth', () => {
307
+ expect(adapter.getNextMonth(testDateIso)).toEqualDateTime('2018-11-30T11:44:00.000Z');
165
308
  });
166
- it('Method: isAfterYear', () => {
167
- const nextYear = adapter.setYear(testDate, 2019);
168
- expect(adapter.isAfterYear(nextYear, testDate)).to.equal(true);
169
- expect(adapter.isAfterYear(testDate, nextYear)).to.equal(false);
309
+ it('Method: getPreviousMonth', () => {
310
+ expect(adapter.getPreviousMonth(testDateIso)).toEqualDateTime('2018-09-30T11:44:00.000Z');
170
311
  });
171
- it('Method: isBeforeYear', () => {
172
- const previousYear = adapter.setYear(testDate, 2017);
173
- expect(adapter.isBeforeYear(testDate, previousYear)).to.equal(false);
174
- expect(adapter.isBeforeYear(previousYear, testDate)).to.equal(true);
312
+ it('Method: getMonthArray', () => {
313
+ const monthArray = adapter.getMonthArray(testDateIso);
314
+ let expectedDate = adapter.date('2018-01-01T00:00:00.000Z');
315
+ monthArray.forEach(month => {
316
+ expect(month).toEqualDateTime(expectedDate);
317
+ expectedDate = adapter.addMonths(expectedDate, 1);
318
+ });
319
+ });
320
+ it('Method: mergeDateAndTime', () => {
321
+ const mergedDate = adapter.mergeDateAndTime(testDateIso, adapter.date('2018-01-01T14:15:16.000Z'));
322
+ expect(adapter.toJsDate(mergedDate)).toEqualDateTime('2018-10-30T14:15:16.000Z');
323
+ });
324
+ it('Method: getWeekdays', () => {
325
+ const weekDays = adapter.getWeekdays();
326
+ let date = adapter.startOfWeek(testDateIso);
327
+ weekDays.forEach(dayLabel => {
328
+ expect(adapter.format(date, 'weekday').startsWith(dayLabel)).to.equal(true);
329
+ date = adapter.addDays(date, 1);
330
+ });
175
331
  });
176
332
  it('Method: getWeekArray', () => {
177
- const weekArray = adapter.getWeekArray(testDate);
333
+ const weekArray = adapter.getWeekArray(testDateIso);
178
334
  expect(weekArray).to.have.length(5);
179
335
  weekArray.forEach(week => {
180
336
  expect(week).to.have.length(7);
181
337
  });
182
338
  });
183
339
  it('Method: getWeekNumber', () => {
184
- expect(adapter.getWeekNumber(testDate)).to.equal(44);
340
+ expect(adapter.getWeekNumber(testDateIso)).to.equal(44);
185
341
  });
186
342
  it('Method: getYearRange', () => {
187
- const yearRange = adapter.getYearRange(testDate, adapter.setYear(testDate, 2124));
343
+ const yearRange = adapter.getYearRange(testDateIso, adapter.setYear(testDateIso, 2124));
188
344
  expect(yearRange).to.have.length(107);
189
345
  expect(adapter.getYear(yearRange[yearRange.length - 1])).to.equal(2124);
190
- const emptyYearRange = adapter.getYearRange(testDate, adapter.setYear(testDate, adapter.getYear(testDate) - 1));
346
+ const emptyYearRange = adapter.getYearRange(testDateIso, adapter.setYear(testDateIso, adapter.getYear(testDateIso) - 1));
191
347
  expect(emptyYearRange).to.have.length(0);
192
348
  });
193
- it('Method: getDiff', () => {
194
- expect(adapter.getDiff(testDate, adapter.date('2018-10-29T11:44:00.000Z'))).to.equal(86400000);
195
- expect(adapter.getDiff(testDate, adapter.date('2018-10-31T11:44:00.000Z'))).to.equal(-86400000);
196
- expect(adapter.getDiff(testDate, adapter.date('2018-10-31T11:44:00.000Z'))).to.equal(-86400000);
197
-
198
- // With units
199
- expect(adapter.getDiff(testDate, adapter.date('2017-09-29T11:44:00.000Z'), 'years')).to.equal(1);
200
- expect(adapter.getDiff(testDate, adapter.date('2018-08-29T11:44:00.000Z'), 'months')).to.equal(2);
201
- expect(adapter.getDiff(testDate, adapter.date('2018-05-29T11:44:00.000Z'), 'quarters')).to.equal(1);
202
- expect(adapter.getDiff(testDate, adapter.date('2018-09-29T11:44:00.000Z'), 'days')).to.equal(31);
203
- expect(adapter.getDiff(testDate, adapter.date('2018-09-29T11:44:00.000Z'), 'weeks')).to.equal(4);
204
- expect(adapter.getDiff(testDate, adapter.date('2018-09-29T11:44:00.000Z'), 'hours')).to.equal(744);
205
- expect(adapter.getDiff(testDate, adapter.date('2018-09-29T11:44:00.000Z'), 'minutes')).to.equal(44640);
206
- expect(adapter.getDiff(testDate, adapter.date('2018-10-30T10:44:00.000Z'), 'seconds')).to.equal(3600);
207
- expect(adapter.getDiff(testDate, adapter.date('2018-10-30T10:44:00.000Z'), 'milliseconds')).to.equal(3600000);
208
- });
209
- it('Method: mergeDateAndTime', () => {
210
- const mergedDate = adapter.mergeDateAndTime(testDate, adapter.date('2018-01-01T14:15:16.000Z'));
211
- expect(adapter.toJsDate(mergedDate).toISOString()).to.equal('2018-10-30T14:15:16.000Z');
212
- });
213
- it('Method: isEqual', () => {
214
- expect(adapter.isEqual(adapter.date(null), null)).to.equal(true);
215
- expect(adapter.isEqual(testDate, adapter.date(testDateISO))).to.equal(true);
216
- expect(adapter.isEqual(null, adapter.date(testDateISO))).to.equal(false);
217
- });
218
- it('Method: parseISO', () => {
219
- const parsedDate = adapter.parseISO(testDateISO);
220
- const outputtedISO = adapter.toISO(parsedDate);
221
- if (adapter.lib === 'date-fns') {
222
- // date-fns never suppress useless milliseconds in the end
223
- expect(outputtedISO).to.equal(testDateISO.replace('.000Z', 'Z'));
224
- } else if (adapter.lib === 'luxon') {
225
- // luxon does not shorthand +00:00 to Z, which is also valid ISO string
226
- expect(outputtedISO).to.equal(testDateISO.replace('Z', '+00:00'));
227
- } else {
228
- expect(outputtedISO).to.equal(testDateISO);
229
- }
230
- });
231
- it('Method: parse', () => {
232
- const parsedDate = adapter.parse('2018-10-30 11:44:00', formatDateTime);
233
- expect(adapter.isEqual(parsedDate, testDate)).to.equal(true);
234
- expect(adapter.parse('', formatDateTime)).to.equal(null);
235
-
236
- // Invalid input
237
- const invalidateParsedDate = adapter.parse('99-99-9999', formatDateTime);
238
- expect(adapter.isValid(invalidateParsedDate)).to.equal(false);
239
- });
240
- it('Method: isNull', () => {
241
- expect(adapter.isNull(null)).to.equal(true);
242
- expect(adapter.isNull(testDate)).to.equal(false);
243
- });
244
- it('Method: isSameDay', () => {
245
- expect(adapter.isSameDay(testDate, adapter.date('2018-10-30T00:00:00.000Z'))).to.equal(true);
246
- expect(adapter.isSameDay(testDate, adapter.date('2019-10-30T00:00:00.000Z'))).to.equal(false);
247
- });
248
- it('Method: isSameMonth', () => {
249
- expect(adapter.isSameMonth(testDate, adapter.date('2018-10-01T00:00:00.000Z'))).to.equal(true);
250
- expect(adapter.isSameMonth(testDate, adapter.date('2019-10-01T00:00:00.000Z'))).to.equal(false);
251
- });
252
- it('Method: isSameYear', () => {
253
- expect(adapter.isSameYear(testDate, adapter.date('2018-10-01T00:00:00.000Z'))).to.equal(true);
254
- expect(adapter.isSameYear(testDate, adapter.date('2019-10-01T00:00:00.000Z'))).to.equal(false);
255
- });
256
- it('Method: isSameHour', () => {
257
- expect(adapter.isSameHour(testDate, adapter.date(testDateISO))).to.equal(true);
258
- expect(adapter.isSameHour(testDate, adapter.addDays(adapter.date(testDateISO), 5))).to.equal(false);
259
- });
260
- it('Method: getCurrentLocaleCode', () => {
261
- // Returns the default location
262
- expect(adapter.getCurrentLocaleCode()).to.match(/en/);
263
- });
264
- it('Method: toJsDate', () => {
265
- expect(adapter.toJsDate(testDate)).to.be.instanceOf(Date);
266
- });
267
- it('Method: isWithinRange', () => {
268
- expect(adapter.isWithinRange(adapter.date('2019-10-01T00:00:00.000Z'), [adapter.date('2019-09-01T00:00:00.000Z'), adapter.date('2019-11-01T00:00:00.000Z')])).to.equal(true);
269
- expect(adapter.isWithinRange(adapter.date('2019-12-01T00:00:00.000Z'), [adapter.date('2019-09-01T00:00:00.000Z'), adapter.date('2019-11-01T00:00:00.000Z')])).to.equal(false);
270
-
271
- // Should use inclusivity of range
272
- expect(adapter.isWithinRange(adapter.date('2019-09-01T00:00:00.000Z'), [adapter.date('2019-09-01T00:00:00.000Z'), adapter.date('2019-12-01T00:00:00.000Z')])).to.equal(true);
273
- expect(adapter.isWithinRange(adapter.date('2019-12-01T00:00:00.000Z'), [adapter.date('2019-09-01T00:00:00.000Z'), adapter.date('2019-12-01T00:00:00.000Z')])).to.equal(true);
274
- });
275
349
  };
@@ -1,16 +1,50 @@
1
1
  import { expect } from 'chai';
2
+ import sinon from 'sinon';
3
+ import { cleanText } from 'test/utils/pickers-utils';
4
+ import { TEST_DATE_ISO_STRING } from './describeGregorianAdapter.utils';
2
5
  export const testLocalization = ({
3
6
  adapter
4
7
  }) => {
8
+ const testDateIso = adapter.date(TEST_DATE_ISO_STRING);
5
9
  it('Method: formatNumber', () => {
6
10
  expect(adapter.formatNumber('1')).to.equal('1');
7
11
  });
8
12
  it('Method: getMeridiemText', () => {
9
13
  expect(adapter.getMeridiemText('am')).to.equal('AM');
10
14
  expect(adapter.getMeridiemText('pm')).to.equal('PM');
15
+
16
+ // Moment only translates for 12-hour cycle.
17
+ if (adapter.lib === 'moment') {
18
+ const stub = sinon.stub(adapter, 'is12HourCycleInCurrentLocale').returns(false);
19
+ expect(adapter.getMeridiemText('am')).to.equal('AM');
20
+ expect(adapter.getMeridiemText('pm')).to.equal('PM');
21
+ stub.restore();
22
+ }
23
+ });
24
+ it('Method: expandFormat', () => {
25
+ const testFormat = formatKey => {
26
+ const formatString = adapter.formats[formatKey];
27
+ const expandedFormat = cleanText(adapter.expandFormat(formatString));
28
+ if (expandedFormat === formatString) {
29
+ return;
30
+ }
31
+
32
+ // The expanded format should be fully expanded
33
+ expect(cleanText(adapter.expandFormat(expandedFormat))).to.equal(expandedFormat);
34
+
35
+ // Both format should be equivalent
36
+ expect(cleanText(adapter.formatByString(testDateIso, expandedFormat))).to.equal(cleanText(adapter.format(testDateIso, formatKey)));
37
+ };
38
+ Object.keys(adapter.formats).forEach(formatKey => {
39
+ testFormat(formatKey);
40
+ });
11
41
  });
12
42
  it('Method: getFormatHelperText', () => {
13
43
  expect(adapter.getFormatHelperText(adapter.formats.keyboardDate)).to.equal(adapter.lib === 'luxon' ? 'm/d/yyyy' : 'mm/dd/yyyy');
14
44
  expect(adapter.getFormatHelperText(adapter.formats.keyboardDateTime12h)).to.equal(adapter.lib === 'luxon' ? 'm/d/yyyy hh:mm (a|p)m' : 'mm/dd/yyyy hh:mm (a|p)m');
15
45
  });
46
+ it('Method: getCurrentLocaleCode', () => {
47
+ // Returns the default locale
48
+ expect(adapter.getCurrentLocaleCode()).to.match(/en/);
49
+ });
16
50
  };