Skip to content

Commit d1c7259

Browse files
authoredFeb 22, 2019
fix(ui5-datepicker): display extreme values correctly (#75)
* fix(ui5-datepicker): display extreme values correctly Fixes #26 * fix(ui5-datepicker): display extreme values correctly * fix(ui5-datepicker): display extreme values correctly * add tests * some more constants and a method extract
1 parent 9038494 commit d1c7259

File tree

10 files changed

+359
-49
lines changed

10 files changed

+359
-49
lines changed
 

‎packages/base/src/sap/ui/webcomponents/base/delegate/ItemNavigation.js

+4
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,10 @@ class ItemNavigation extends EventProvider {
139139
this.currentIndex -= this.rowSize;
140140
}
141141

142+
if (this.currentIndex < 0) {
143+
this.currentIndex = 0;
144+
}
145+
142146
const currentItem = items[this.currentIndex];
143147

144148
if (currentItem instanceof WebComponent) {

‎packages/main/src/Calendar.js

+50-10
Original file line numberDiff line numberDiff line change
@@ -303,6 +303,10 @@ class Calendar extends WebComponent {
303303
nextMonth.setDate(1);
304304
nextMonth.setMonth(nextMonth.getMonth() + 1);
305305

306+
if (nextMonth.getYear() > YearPicker._MAX_YEAR) {
307+
return;
308+
}
309+
306310
this._focusFirstDayOfMonth(nextMonth);
307311
this.timestamp = nextMonth.valueOf() / 1000;
308312
}
@@ -333,14 +337,16 @@ class Calendar extends WebComponent {
333337

334338
const weekDaysCount = 7;
335339

336-
// find the DOM for the last day index
337-
const lastDay = dayPicker.shadowRoot.querySelector(".sapWCDayPickerItemsContainer").children[parseInt(lastDayOfMonthIndex / weekDaysCount)].children[(lastDayOfMonthIndex % weekDaysCount)];
340+
if (lastDayOfMonthIndex !== -1) {
341+
// find the DOM for the last day index
342+
const lastDay = dayPicker.shadowRoot.querySelector(".sapWCDayPickerItemsContainer").children[parseInt(lastDayOfMonthIndex / weekDaysCount)].children[(lastDayOfMonthIndex % weekDaysCount)];
338343

339-
// update current item in ItemNavigation
340-
dayPicker._itemNav.current = lastDayOfMonthIndex;
344+
// update current item in ItemNavigation
345+
dayPicker._itemNav.current = lastDayOfMonthIndex;
341346

342-
// focus the item
343-
lastDay.focus();
347+
// focus the item
348+
lastDay.focus();
349+
}
344350

345351
if (iNewMonth > 11) {
346352
iNewMonth = 0;
@@ -356,36 +362,60 @@ class Calendar extends WebComponent {
356362
oNewDate.setYear(iNewYear);
357363
oNewDate.setMonth(iNewMonth);
358364

365+
366+
if (oNewDate.getYear() < YearPicker._MIN_YEAR) {
367+
return;
368+
}
359369
this.timestamp = oNewDate.valueOf() / 1000;
360370
}
361371

362372
_showNextYear() {
373+
if (this._calendarDate.getYear() === YearPicker._MAX_YEAR) {
374+
return;
375+
}
376+
363377
const oNewDate = this._calendarDate;
364378
oNewDate.setYear(this._calendarDate.getYear() + 1);
365379

366380
this.timestamp = oNewDate.valueOf() / 1000;
367381
}
368382

369383
_showPrevYear() {
384+
if (this._calendarDate.getYear() === YearPicker._MIN_YEAR) {
385+
return;
386+
}
387+
370388
const oNewDate = this._calendarDate;
371389
oNewDate.setYear(this._calendarDate.getYear() - 1);
372390

373391
this.timestamp = oNewDate.valueOf() / 1000;
374392
}
375393

376394
_showNextPageYears() {
395+
if (!this._isYearInRange(this._yearPicker.timestamp,
396+
YearPicker._ITEMS_COUNT - YearPicker._MIDDLE_ITEM_INDEX,
397+
YearPicker._MIN_YEAR,
398+
YearPicker._MAX_YEAR)) {
399+
return;
400+
}
401+
377402
this._yearPicker = Object.assign({}, this._yearPicker, {
378-
// add 20 years to the timestamp of the monthpicker
379-
timestamp: this._yearPicker.timestamp + (31536000 * 20),
403+
timestamp: this._yearPicker.timestamp + (31536000 * YearPicker._ITEMS_COUNT),
380404
});
381405

382406
this._isShiftingYears = true;
383407
}
384408

385409
_showPrevPageYears() {
410+
if (!this._isYearInRange(this._yearPicker.timestamp,
411+
-YearPicker._MIDDLE_ITEM_INDEX - 1,
412+
YearPicker._MIN_YEAR,
413+
YearPicker._MAX_YEAR)) {
414+
return;
415+
}
416+
386417
this._yearPicker = Object.assign({}, this._yearPicker, {
387-
// subtracts 20 years from the timestamp of the monthpicker
388-
timestamp: this._yearPicker.timestamp - (31536000 * 20),
418+
timestamp: this._yearPicker.timestamp - (31536000 * YearPicker._ITEMS_COUNT),
389419
});
390420

391421
this._isShiftingYears = true;
@@ -436,6 +466,16 @@ class Calendar extends WebComponent {
436466
this._oMonth._hidden = false;
437467
}
438468

469+
_isYearInRange(timestamp, yearsoffset, min, max) {
470+
if (timestamp) {
471+
const oCalDate = CalendarDate.fromTimestamp(timestamp * 1000, this._primaryCalendarType);
472+
oCalDate.setMonth(0);
473+
oCalDate.setDate(1);
474+
oCalDate.setYear(oCalDate.getYear() + yearsoffset);
475+
return oCalDate.getYear() >= min && oCalDate.getYear() <= max;
476+
}
477+
}
478+
439479
static get calculateTemplateContext() {
440480
return CalendarTemplateContext.calculate;
441481
}

‎packages/main/src/DatePicker.js

+5
Original file line numberDiff line numberDiff line change
@@ -464,6 +464,11 @@ class DatePicker extends WebComponent {
464464
}
465465

466466
_changeCalendarSelection() {
467+
if (this._calendarDate.getYear() < 1) {
468+
// 0 is a valid year, but we cannot display it
469+
return;
470+
}
471+
467472
const oCalDate = this._calendarDate;
468473
const timestamp = oCalDate.valueOf() / 1000;
469474

‎packages/main/src/DayPicker.hbs

+23-19
Original file line numberDiff line numberDiff line change
@@ -22,25 +22,29 @@
2222
</div>
2323
<div id="{{ctr._id}}-days" class="sapWCDayPickerItemsContainer" tabindex="-1">
2424
{{#each ctr._weeks}}
25-
<div style="display: flex;">
26-
{{#each this}}
27-
<div
28-
id="{{this.id}}"
29-
tabindex="{{this._tabIndex}}"
30-
data-sap-timestamp="{{this.timestamp}}"
31-
data-sap-index="{{this._index}}"
32-
role="gridcell"
33-
aria-selected="{{this.selected}}"
34-
class="{{this.classes}} sapWCDayPickerDay">
35-
<span
36-
class="sapWCDayPickerDayText"
37-
data-sap-timestamp="{{this.timestamp}}"
38-
data-sap-index="{{this._index}}">
39-
{{this.iDay}}
40-
</span>
41-
</div>
42-
{{/each}}
43-
</div>
25+
{{#if this.length}}
26+
<div style="display: flex;">
27+
{{#each this}}
28+
<div
29+
id="{{this.id}}"
30+
tabindex="{{this._tabIndex}}"
31+
data-sap-timestamp="{{this.timestamp}}"
32+
data-sap-index="{{this._index}}"
33+
role="gridcell"
34+
aria-selected="{{this.selected}}"
35+
class="{{this.classes}} sapWCDayPickerDay">
36+
<span
37+
class="sapWCDayPickerDayText"
38+
data-sap-timestamp="{{this.timestamp}}"
39+
data-sap-index="{{this._index}}">
40+
{{this.iDay}}
41+
</span>
42+
</div>
43+
{{/each}}
44+
</div>
45+
{{else}}
46+
<div class="sapWCEmptyWeek"></div>
47+
{{/if}}
4448
{{/each}}
4549
</div>
4650
</div>

‎packages/main/src/DayPicker.js

+16-4
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,9 @@ const metadata = {
9494
},
9595
};
9696

97+
const MAX_YEAR = 9999;
98+
const MIN_YEAR = 1;
99+
97100
/**
98101
* @class
99102
*
@@ -164,7 +167,7 @@ class DayPicker extends WebComponent {
164167
return d === timestamp;
165168
}),
166169
iDay: oCalDate.getDate(),
167-
_index: i,
170+
_index: i.toString(),
168171
classes: `sapWCDayPickerItem sapWCDayPickerWDay${weekday}`,
169172
};
170173

@@ -206,11 +209,16 @@ class DayPicker extends WebComponent {
206209
day.classes += " sapWCDayPickerItemWeekEnd";
207210
}
208211

209-
if (day.classes.indexOf("sapWCDayPickerWDay6") !== -1) {
212+
if (day.classes.indexOf("sapWCDayPickerWDay6") !== -1
213+
|| _aVisibleDays.length - 1 === i) {
210214
this._weeks.push(week);
211215
week = [];
212216
}
213217
}
218+
219+
while (this._weeks.length < 6) {
220+
this._weeks.push([]);
221+
}
214222
/* eslint-enable no-loop-func */
215223

216224
if (!isDaySelected && todayIndex && this._itemNav.current === 0) {
@@ -339,6 +347,10 @@ class DayPicker extends WebComponent {
339347
oNewDate.setYear(iNewYear);
340348
oNewDate.setMonth(iNewMonth);
341349

350+
if (oNewDate.getYear() < MIN_YEAR || oNewDate.getYear() > MAX_YEAR) {
351+
return;
352+
}
353+
342354
this.fireEvent("navigate", { timestamp: (oNewDate.valueOf() / 1000) });
343355
}
344356

@@ -382,12 +394,12 @@ class DayPicker extends WebComponent {
382394
for (let i = 0; i < 42; i++) {
383395
iYear = oDay.getYear();
384396
oCalDate = new CalendarDate(oDay, this._primaryCalendarType);
385-
if (bIncludeBCDates && iYear < 1) {
397+
if (bIncludeBCDates && iYear < MIN_YEAR) {
386398
// For dates before 0001-01-01 we should render only empty squares to keep
387399
// the month square matrix correct.
388400
oCalDate._bBeforeFirstYear = true;
389401
_aVisibleDays.push(oCalDate);
390-
} else if (iYear > 0 && iYear < 10000) {
402+
} else if (iYear >= MIN_YEAR && iYear <= MAX_YEAR) {
391403
// Days before 0001-01-01 or after 9999-12-31 should not be rendered.
392404
_aVisibleDays.push(oCalDate);
393405
}

‎packages/main/src/YearPicker.js

+31-13
Original file line numberDiff line numberDiff line change
@@ -65,9 +65,6 @@ const metadata = {
6565
},
6666
};
6767

68-
const ITEMS_COUNT = 20;
69-
const MIDDLE_ITEM_INDEX = 7;
70-
7168
/**
7269
* @class
7370
*
@@ -117,16 +114,29 @@ class YearPicker extends WebComponent {
117114
const oCalDate = this._calendarDate;
118115
oCalDate.setMonth(0);
119116
oCalDate.setDate(1);
120-
oCalDate.setYear(oCalDate.getYear() - MIDDLE_ITEM_INDEX - 1);
117+
if (oCalDate.getYear() - YearPicker._MIDDLE_ITEM_INDEX - 1 > YearPicker._MAX_YEAR - YearPicker._ITEMS_COUNT) {
118+
oCalDate.setYear(YearPicker._MAX_YEAR - YearPicker._ITEMS_COUNT);
119+
} else if (oCalDate.getYear() - YearPicker._MIDDLE_ITEM_INDEX - 1 < YearPicker._MIN_YEAR) {
120+
oCalDate.setYear(YearPicker._MIN_YEAR - 1);
121+
} else {
122+
oCalDate.setYear(oCalDate.getYear() - YearPicker._MIDDLE_ITEM_INDEX - 1);
123+
}
124+
121125
const intervals = [];
122126
let timestamp;
123127

124128
if (this._selectedYear === undefined) {
125129
this._selectedYear = this._year;
126130
}
127131

128-
for (let i = 0; i < ITEMS_COUNT; i++) {
132+
for (let i = 0; i < YearPicker._ITEMS_COUNT; i++) {
133+
const intervalIndex = parseInt(i / 4);
134+
if (!intervals[intervalIndex]) {
135+
intervals[intervalIndex] = [];
136+
}
137+
129138
oCalDate.setYear(oCalDate.getYear() + 1);
139+
130140
timestamp = oCalDate.valueOf() / 1000;
131141

132142
const year = {
@@ -140,12 +150,8 @@ class YearPicker extends WebComponent {
140150
year.classes += " sapWCYearPickerItemSel";
141151
}
142152

143-
const intervalIndex = parseInt(i / 4);
144-
145153
if (intervals[intervalIndex]) {
146154
intervals[intervalIndex].push(year);
147-
} else {
148-
intervals[intervalIndex] = [year];
149155
}
150156
}
151157

@@ -183,7 +189,7 @@ class YearPicker extends WebComponent {
183189
const timestamp = this.getTimestampFromDom(event.ui5target);
184190
this.timestamp = timestamp;
185191
this._selectedYear = this._year;
186-
this._itemNav.current = MIDDLE_ITEM_INDEX;
192+
this._itemNav.current = YearPicker._MIDDLE_ITEM_INDEX;
187193
this.fireEvent("selectedYearChange", { timestamp });
188194
}
189195
}
@@ -204,7 +210,7 @@ class YearPicker extends WebComponent {
204210

205211
this.timestamp = timestamp;
206212
this._selectedYear = this._year;
207-
this._itemNav.current = MIDDLE_ITEM_INDEX;
213+
this._itemNav.current = YearPicker._MIDDLE_ITEM_INDEX;
208214
this.fireEvent("selectedYearChange", { timestamp });
209215
}
210216
}
@@ -227,15 +233,27 @@ class YearPicker extends WebComponent {
227233
oCalDate.setDate(1);
228234

229235
if (event.end) {
230-
oCalDate.setYear(oCalDate.getYear() + ITEMS_COUNT);
236+
oCalDate.setYear(oCalDate.getYear() + YearPicker._ITEMS_COUNT);
231237
} else if (event.start) {
232-
oCalDate.setYear(oCalDate.getYear() - ITEMS_COUNT);
238+
if (oCalDate.getYear() - YearPicker._MIDDLE_ITEM_INDEX < YearPicker._MIN_YEAR) {
239+
return;
240+
}
241+
oCalDate.setYear(oCalDate.getYear() - YearPicker._ITEMS_COUNT);
242+
}
243+
244+
if (oCalDate.getYear() - YearPicker._MIDDLE_ITEM_INDEX > YearPicker._MAX_YEAR) {
245+
return;
233246
}
234247

235248
this.timestamp = oCalDate.valueOf() / 1000;
236249
}
237250
}
238251

252+
YearPicker._ITEMS_COUNT = 20;
253+
YearPicker._MIDDLE_ITEM_INDEX = 7;
254+
YearPicker._MAX_YEAR = 9999;
255+
YearPicker._MIN_YEAR = 1;
256+
239257
Bootstrap.boot().then(_ => {
240258
YearPicker.define();
241259
});

‎packages/main/src/themes/base/DayPicker.less

+11
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,13 @@ ui5-daypicker {
165165

166166
.sapWCDayPickerItemsContainer {
167167
outline: none;
168+
& > :first-child {
169+
justify-content: flex-end;
170+
}
171+
}
172+
173+
.sapWCEmptyWeek {
174+
height: 3rem;
168175
}
169176

170177
.sapUiSizeCompact {
@@ -182,4 +189,8 @@ ui5-daypicker {
182189
margin-top: 2px;
183190
margin-right: 2px;
184191
}
192+
193+
& .sapWCEmptyWeek {
194+
height: 2.125rem;
195+
}
185196
}

‎packages/main/test/pageobjects/DatePickerTestPage.js

+23-1
Original file line numberDiff line numberDiff line change
@@ -45,10 +45,22 @@ class DatePickerTestPage {
4545
return browser.findElementDeep(this._sut + " >>> ui5-icon");
4646
}
4747

48-
get btnNextMonth() {
48+
get btnPrev() {
49+
return browser.findElementDeep(this._sut + " >>> ui5-calendar >>> ui5-calendar-header >>> [data-sap-cal-head-button='Prev']");
50+
}
51+
52+
get btnNext() {
4953
return browser.findElementDeep(this._sut + " >>> ui5-calendar >>> ui5-calendar-header >>> [data-sap-cal-head-button='Next']");
5054
}
5155

56+
get btnYear() {
57+
return browser.findElementDeep(this._sut + " >>> ui5-calendar >>> ui5-calendar-header >>> [data-sap-show-picker='Year']");
58+
}
59+
60+
get btnMonth() {
61+
return browser.findElementDeep(this._sut + " >>> ui5-calendar >>> ui5-calendar-header >>> [data-sap-show-picker='Month']");
62+
}
63+
5264
getPickerDate(timestamp) {
5365
return browser.findElementDeep(`${this._sut} >>> ui5-calendar >>> ui5-daypicker >>> [data-sap-timestamp='${timestamp}']`);
5466
}
@@ -57,6 +69,16 @@ class DatePickerTestPage {
5769
return browser.findElementDeep(`${this._sut} >>> ui5-calendar >>> ui5-daypicker >>> .sapWCDayPickerItem`);
5870
}
5971

72+
getFirstDisplayedYear() {
73+
return browser.findElementDeep(`${this._sut} >>> ui5-calendar >>> ui5-yearpicker >>> .sapWCYearPickerItem`);
74+
}
75+
76+
getDisplayedYear(index) {
77+
return browser
78+
.findElementDeep(`${this._sut} >>> ui5-calendar >>> ui5-yearpicker >>> .sapWCYearPicker`)
79+
.$$(".sapWCYearPickerItem")[index];
80+
}
81+
6082
isValid(value) {
6183
return browser.execute((id, value) => {
6284
return document.querySelector(id).isValid(value);

‎packages/main/test/sap/ui/webcomponents/main/pages/DatePicker_test_page.html

+1
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
<ui5-datepicker id="dp9" value="today"></ui5-datepicker>
3232
<ui5-datepicker id="dp10" disabled></ui5-datepicker>
3333
<ui5-datepicker id="dp11"></ui5-datepicker>
34+
<ui5-datepicker id="dp12"></ui5-datepicker>
3435
<label id='lbl'>0</label>
3536
<label for="inputTimezone">Timezone:</label>
3637
<input id="inputTimezone" type="number"/>

‎packages/main/test/specs/DatePicker.spec.js

+195-2
Original file line numberDiff line numberDiff line change
@@ -200,7 +200,7 @@ describe("Date Picker Tests", () => {
200200

201201
datepicker.innerInput.setValue("Jan 30, 2019");
202202
datepicker.valueHelpIcon.click();
203-
datepicker.btnNextMonth.click();
203+
datepicker.btnNext.click();
204204

205205
const firstDisplayedDate = datepicker.getFirstDisplayedDate();
206206

@@ -254,7 +254,6 @@ describe("Date Picker Tests", () => {
254254
});
255255

256256
it("does not open, if disabled", () => {
257-
var canClick = true;
258257
datepicker.id = "#dp10";
259258

260259
assert.ok(!datepicker.isPickerOpen(), "picker is closed initially.");
@@ -306,4 +305,198 @@ describe("Date Picker Tests", () => {
306305
browser.pause(1000);
307306
assert.ok(datepicker.isPickerOpen(), "picker is open");
308307
});
308+
309+
it("daypicker extreme values max", () => {
310+
var _28Nov9999 = "253399363200";
311+
312+
datepicker.open();
313+
datepicker.id = "#dp12";
314+
315+
datepicker.innerInput.setValue("Dec 31, 9999");
316+
datepicker.valueHelpIcon.click();
317+
318+
assert.ok(datepicker.getFirstDisplayedDate().getProperty("id").indexOf(_28Nov9999) > -1, "28 Nov, 9999 is the first displayed date");
319+
});
320+
321+
it("daypicker extreme values min", () => {
322+
var _1Jan0001 = "-62135596800";
323+
324+
datepicker.open();
325+
datepicker.id = "#dp12";
326+
327+
datepicker.innerInput.setValue("Jan 1, 0001");
328+
datepicker.valueHelpIcon.click();
329+
330+
assert.ok(datepicker.getFirstDisplayedDate().getProperty("id").indexOf(_1Jan0001) > -1, "Jan 1, 0001 is the first displayed date");
331+
});
332+
333+
it("daypicker prev extreme values min", () => {
334+
var _1Jan0001 = "-62135596800";
335+
336+
datepicker.open();
337+
datepicker.id = "#dp12";
338+
339+
datepicker.innerInput.setValue("Feb 1, 0001");
340+
datepicker.valueHelpIcon.click();
341+
342+
datepicker.btnPrev.click();
343+
344+
assert.ok(datepicker.getFirstDisplayedDate().getProperty("id").indexOf(_1Jan0001) > -1, "Jan 1, 0001 is the first displayed date");
345+
346+
datepicker.btnPrev.click();
347+
348+
assert.ok(datepicker.getFirstDisplayedDate().getProperty("id").indexOf(_1Jan0001) > -1, "Jan 1, 0001 is the first displayed date");
349+
});
350+
351+
it("daypicker next extreme values max", () => {
352+
var _28Nov9999 = "253399363200";
353+
354+
datepicker.open();
355+
datepicker.id = "#dp12";
356+
357+
datepicker.innerInput.setValue("Nov 31, 9999");
358+
datepicker.valueHelpIcon.click();
359+
360+
datepicker.btnNext.click();
361+
362+
assert.ok(datepicker.getFirstDisplayedDate().getProperty("id").indexOf(_28Nov9999) > -1, "28 Nov, 9999 is the first displayed date");
363+
364+
datepicker.btnNext.click();
365+
366+
assert.ok(datepicker.getFirstDisplayedDate().getProperty("id").indexOf(_28Nov9999) > -1, "28 Nov, 9999 is the first displayed date");
367+
});
368+
369+
it("monthpicker next extreme values max", () => {
370+
datepicker.open();
371+
datepicker.id = "#dp12";
372+
373+
datepicker.innerInput.setValue("Dec 31, 9998");
374+
datepicker.valueHelpIcon.click();
375+
376+
datepicker.btnMonth.click();
377+
datepicker.btnNext.click();
378+
379+
assert.ok(datepicker.btnYear.getProperty("innerHTML").indexOf("9999") > -1, "year button's text is correct");
380+
381+
datepicker.btnNext.click();
382+
383+
assert.ok(datepicker.btnYear.getProperty("innerHTML").indexOf("9999") > -1, "year button's text is correct");
384+
});
385+
386+
it("monthpicker prev extreme values min", () => {
387+
datepicker.open();
388+
datepicker.id = "#dp12";
389+
390+
datepicker.innerInput.setValue("Jan 1, 0002");
391+
datepicker.valueHelpIcon.click();
392+
393+
datepicker.btnMonth.click();
394+
datepicker.btnPrev.click();
395+
396+
assert.ok(datepicker.btnYear.getProperty("innerHTML").indexOf("0001") > -1, "year button's text is correct");
397+
398+
datepicker.btnPrev.click();
399+
400+
assert.ok(datepicker.btnYear.getProperty("innerHTML").indexOf("0001") > -1, "year button's text is correct");
401+
});
402+
403+
it("yearpicker extreme values max", () => {
404+
datepicker.open();
405+
datepicker.id = "#dp12";
406+
407+
datepicker.innerInput.setValue("Dec 31, 9995");
408+
datepicker.valueHelpIcon.click();
409+
410+
datepicker.btnYear.click();
411+
412+
assert.ok(datepicker.getFirstDisplayedYear().getProperty("innerHTML").indexOf("9980") > -1, "First year in the year picker is correct");
413+
});
414+
415+
it("yearpicker extreme values min", () => {
416+
datepicker.open();
417+
datepicker.id = "#dp12";
418+
419+
datepicker.innerInput.setValue("Jan 1, 0003");
420+
datepicker.valueHelpIcon.click();
421+
422+
datepicker.btnYear.click();
423+
424+
assert.ok(datepicker.getFirstDisplayedYear().getProperty("innerHTML").indexOf("0001") > -1, "First year in the year picker is correct");
425+
});
426+
427+
it("yearpicker prev page extreme values min", () => {
428+
datepicker.open();
429+
datepicker.id = "#dp12";
430+
431+
datepicker.innerInput.setValue("Jan 1, 0009");
432+
datepicker.valueHelpIcon.click();
433+
434+
datepicker.btnYear.click();
435+
436+
assert.ok(datepicker.getFirstDisplayedYear().getProperty("innerHTML").indexOf("0002") > -1, "First year in the year picker is correct");
437+
438+
datepicker.btnPrev.click();
439+
440+
assert.ok(datepicker.getFirstDisplayedYear().getProperty("innerHTML").indexOf("0001") > -1, "First year in the year picker is correct");
441+
442+
datepicker.btnPrev.click();
443+
444+
assert.ok(datepicker.getFirstDisplayedYear().getProperty("innerHTML").indexOf("0001") > -1, "First year in the year picker is correct");
445+
});
446+
447+
it("yearpicker next page extreme values max", () => {
448+
datepicker.open();
449+
datepicker.id = "#dp12";
450+
451+
datepicker.innerInput.setValue("Dec 31, 9986");
452+
datepicker.valueHelpIcon.click();
453+
454+
datepicker.btnYear.click();
455+
456+
assert.ok(datepicker.getFirstDisplayedYear().getProperty("innerHTML").indexOf("9979") > -1, "First year in the year picker is correct");
457+
458+
datepicker.btnNext.click();
459+
460+
assert.ok(datepicker.getFirstDisplayedYear().getProperty("innerHTML").indexOf("9980") > -1, "First year in the year picker is correct");
461+
462+
datepicker.btnNext.click();
463+
464+
assert.ok(datepicker.getFirstDisplayedYear().getProperty("innerHTML").indexOf("9980") > -1, "First year in the year picker is correct");
465+
});
466+
467+
it("yearpicker click extreme values max", () => {
468+
datepicker.open();
469+
datepicker.id = "#dp12";
470+
471+
datepicker.innerInput.setValue("Dec 31, 9986");
472+
datepicker.valueHelpIcon.click();
473+
474+
datepicker.btnYear.click();
475+
476+
var tenthYear = datepicker.getDisplayedYear(9);
477+
assert.ok(tenthYear.getProperty("innerHTML").indexOf("9988") > -1, "Tenth year in the year picker is correct");
478+
479+
tenthYear.click();
480+
datepicker.btnYear.click();
481+
482+
assert.ok(datepicker.getFirstDisplayedYear().getProperty("innerHTML").indexOf("9980") > -1, "First year in the year picker is correct");
483+
});
484+
485+
it("yearpicker click extreme values min", () => {
486+
datepicker.open();
487+
datepicker.id = "#dp12";
488+
489+
datepicker.innerInput.setValue("Jan 1, 0009");
490+
datepicker.valueHelpIcon.click();
491+
492+
datepicker.btnYear.click();
493+
494+
var thirdYear = datepicker.getDisplayedYear(2);
495+
assert.ok(thirdYear.getProperty("innerHTML").indexOf("0004") > -1, "Third year in the year picker is correct");
496+
497+
thirdYear.click();
498+
datepicker.btnYear.click();
499+
500+
assert.ok(datepicker.getFirstDisplayedYear().getProperty("innerHTML").indexOf("0001") > -1, "First year in the year picker is correct");
501+
});
309502
});

0 commit comments

Comments
 (0)
Please sign in to comment.