@@ -388,6 +388,90 @@ public void rangeDateSelector_isNotEndOfRange() {
388388 assertFalse (monthAdapter .isEndOfRange (month .getDay (9 )));
389389 }
390390
391+ @ Test
392+ public void isDayPositionValid_withValidator () {
393+ Locale .setDefault (Locale .US );
394+ Month month = Month .create (2019 , Calendar .FEBRUARY );
395+ long dateValidFrom = month .getDay (15 );
396+ CalendarConstraints constraints =
397+ new CalendarConstraints .Builder ()
398+ .setValidator (DateValidatorPointForward .from (dateValidFrom ))
399+ .build ();
400+ MonthAdapter adapter = new MonthAdapter (month , new SingleDateSelector (), constraints , null );
401+
402+ assertThat (adapter .isDayPositionValid (adapter .dayToPosition (14 ))).isFalse ();
403+ assertThat (adapter .isDayPositionValid (adapter .dayToPosition (15 ))).isTrue ();
404+ }
405+
406+ @ Test
407+ public void findNextValidDayPosition_withValidator () {
408+ Locale .setDefault (Locale .US );
409+ Month month = Month .create (2019 , Calendar .FEBRUARY );
410+ long dateValidFrom = month .getDay (15 );
411+ CalendarConstraints constraints =
412+ new CalendarConstraints .Builder ()
413+ .setValidator (DateValidatorPointForward .from (dateValidFrom ))
414+ .build ();
415+ MonthAdapter adapter = new MonthAdapter (month , new SingleDateSelector (), constraints , null );
416+
417+ // Search forward from day 28 (last valid day), expecting no results.
418+ assertThat (adapter .findNextValidDayPosition (adapter .dayToPosition (28 ))).isEqualTo (-1 );
419+ // Search forward from day 14 (valid) to day 15 (valid).
420+ assertThat (adapter .findNextValidDayPosition (adapter .dayToPosition (14 )))
421+ .isEqualTo (adapter .dayToPosition (15 ));
422+ }
423+
424+ @ Test
425+ public void findPreviousValidDayPosition_withValidator () {
426+ Locale .setDefault (Locale .US );
427+ Month month = Month .create (2019 , Calendar .FEBRUARY );
428+ long dateValidFrom = month .getDay (15 );
429+ CalendarConstraints constraints =
430+ new CalendarConstraints .Builder ()
431+ .setValidator (DateValidatorPointForward .from (dateValidFrom ))
432+ .build ();
433+ MonthAdapter adapter = new MonthAdapter (month , new SingleDateSelector (), constraints , null );
434+
435+ // Search backward from day 15 (first valid day), expecting no results.
436+ assertThat (adapter .findPreviousValidDayPosition (adapter .dayToPosition (15 ))).isEqualTo (-1 );
437+ // Search backward from day 16 (valid) to day 15 (valid).
438+ assertThat (adapter .findPreviousValidDayPosition (adapter .dayToPosition (16 )))
439+ .isEqualTo (adapter .dayToPosition (15 ));
440+ }
441+
442+ @ Test
443+ public void findFirstValidDayPosition_withValidator () {
444+ Locale .setDefault (Locale .US );
445+ Month month = Month .create (2019 , Calendar .FEBRUARY );
446+ long dateValidFrom = month .getDay (15 );
447+ CalendarConstraints constraints =
448+ new CalendarConstraints .Builder ()
449+ .setValidator (DateValidatorPointForward .from (dateValidFrom ))
450+ .build ();
451+ MonthAdapter adapter = new MonthAdapter (month , new SingleDateSelector (), constraints , null );
452+
453+ assertThat (adapter .findFirstValidDayPosition ()).isEqualTo (adapter .dayToPosition (15 ));
454+ }
455+
456+ @ Test
457+ public void findLastValidDayPosition_withValidator () {
458+ Locale .setDefault (Locale .US );
459+ Month month = Month .create (2019 , Calendar .FEBRUARY );
460+ long dateValidFrom = month .getDay (15 );
461+ long dateValidTo = month .getDay (18 );
462+ CalendarConstraints constraints =
463+ new CalendarConstraints .Builder ()
464+ .setValidator (
465+ CompositeDateValidator .allOf (
466+ Arrays .asList (
467+ DateValidatorPointForward .from (dateValidFrom ),
468+ DateValidatorPointBackward .before (dateValidTo ))))
469+ .build ();
470+ MonthAdapter adapter = new MonthAdapter (month , new SingleDateSelector (), constraints , null );
471+
472+ assertThat (adapter .findLastValidDayPosition ()).isEqualTo (adapter .dayToPosition (18 ));
473+ }
474+
391475 private MonthAdapter createRangeMonthAdapter (Month month , Pair <Long , Long > selection ) {
392476 DateSelector <Pair <Long , Long >> dateSelector = new RangeDateSelector ();
393477 dateSelector .setSelection (selection );
0 commit comments