@@ -32,7 +32,7 @@ import {MatCalendar} from './calendar';
32
32
import { MatCalendarBody } from './calendar-body' ;
33
33
import { MatDatepickerIntl } from './datepicker-intl' ;
34
34
import { MatMonthView } from './month-view' ;
35
- import { MatMultiYearView } from './multi-year-view' ;
35
+ import { MatMultiYearView , yearsPerPage , yearsPerRow } from './multi-year-view' ;
36
36
import { MatYearView } from './year-view' ;
37
37
38
38
@@ -142,6 +142,24 @@ describe('MatCalendar', () => {
142
142
expect ( calendarInstance . _activeDate ) . toEqual ( new Date ( 2017 , JAN , 31 ) ) ;
143
143
} ) ;
144
144
145
+ it ( 'should go to previous and next multi-year range' , ( ) => {
146
+ periodButton . click ( ) ;
147
+ fixture . detectChanges ( ) ;
148
+
149
+ expect ( calendarInstance . _currentView ) . toBe ( 'multi-year' ) ;
150
+ expect ( calendarInstance . _activeDate ) . toEqual ( new Date ( 2017 , JAN , 31 ) ) ;
151
+
152
+ nextButton . click ( ) ;
153
+ fixture . detectChanges ( ) ;
154
+
155
+ expect ( calendarInstance . _activeDate ) . toEqual ( new Date ( 2017 + yearsPerPage , JAN , 31 ) ) ;
156
+
157
+ prevButton . click ( ) ;
158
+ fixture . detectChanges ( ) ;
159
+
160
+ expect ( calendarInstance . _activeDate ) . toEqual ( new Date ( 2017 , JAN , 31 ) ) ;
161
+ } ) ;
162
+
145
163
it ( 'should go back to month view after selecting year and month' , ( ) => {
146
164
periodButton . click ( ) ;
147
165
fixture . detectChanges ( ) ;
@@ -472,6 +490,125 @@ describe('MatCalendar', () => {
472
490
expect ( testComponent . selected ) . toBeUndefined ( ) ;
473
491
} ) ;
474
492
} ) ;
493
+
494
+ describe ( 'multi-year view' , ( ) => {
495
+ beforeEach ( ( ) => {
496
+ dispatchMouseEvent ( periodButton , 'click' ) ;
497
+ fixture . detectChanges ( ) ;
498
+
499
+ expect ( calendarInstance . _currentView ) . toBe ( 'multi-year' ) ;
500
+ } ) ;
501
+
502
+ it ( 'should decrement year on left arrow press' , ( ) => {
503
+ dispatchKeyboardEvent ( calendarBodyEl , 'keydown' , LEFT_ARROW ) ;
504
+ fixture . detectChanges ( ) ;
505
+
506
+ expect ( calendarInstance . _activeDate ) . toEqual ( new Date ( 2016 , JAN , 31 ) ) ;
507
+
508
+ dispatchKeyboardEvent ( calendarBodyEl , 'keydown' , LEFT_ARROW ) ;
509
+ fixture . detectChanges ( ) ;
510
+
511
+ expect ( calendarInstance . _activeDate ) . toEqual ( new Date ( 2015 , JAN , 31 ) ) ;
512
+ } ) ;
513
+
514
+ it ( 'should increment year on right arrow press' , ( ) => {
515
+ dispatchKeyboardEvent ( calendarBodyEl , 'keydown' , RIGHT_ARROW ) ;
516
+ fixture . detectChanges ( ) ;
517
+
518
+ expect ( calendarInstance . _activeDate ) . toEqual ( new Date ( 2018 , JAN , 31 ) ) ;
519
+
520
+ dispatchKeyboardEvent ( calendarBodyEl , 'keydown' , RIGHT_ARROW ) ;
521
+ fixture . detectChanges ( ) ;
522
+
523
+ expect ( calendarInstance . _activeDate ) . toEqual ( new Date ( 2019 , JAN , 31 ) ) ;
524
+ } ) ;
525
+
526
+ it ( 'should go up a row on up arrow press' , ( ) => {
527
+ dispatchKeyboardEvent ( calendarBodyEl , 'keydown' , UP_ARROW ) ;
528
+ fixture . detectChanges ( ) ;
529
+
530
+ expect ( calendarInstance . _activeDate ) . toEqual ( new Date ( 2017 - yearsPerRow , JAN , 31 ) ) ;
531
+
532
+ dispatchKeyboardEvent ( calendarBodyEl , 'keydown' , UP_ARROW ) ;
533
+ fixture . detectChanges ( ) ;
534
+
535
+ expect ( calendarInstance . _activeDate ) . toEqual ( new Date ( 2017 - yearsPerRow * 2 , JAN , 31 ) ) ;
536
+ } ) ;
537
+
538
+ it ( 'should go down a row on down arrow press' , ( ) => {
539
+ dispatchKeyboardEvent ( calendarBodyEl , 'keydown' , DOWN_ARROW ) ;
540
+ fixture . detectChanges ( ) ;
541
+
542
+ expect ( calendarInstance . _activeDate ) . toEqual ( new Date ( 2017 + yearsPerRow , JAN , 31 ) ) ;
543
+
544
+ dispatchKeyboardEvent ( calendarBodyEl , 'keydown' , DOWN_ARROW ) ;
545
+ fixture . detectChanges ( ) ;
546
+
547
+ expect ( calendarInstance . _activeDate ) . toEqual ( new Date ( 2017 + yearsPerRow * 2 , JAN , 31 ) ) ;
548
+ } ) ;
549
+
550
+ it ( 'should go to first year in current range on home press' , ( ) => {
551
+ dispatchKeyboardEvent ( calendarBodyEl , 'keydown' , HOME ) ;
552
+ fixture . detectChanges ( ) ;
553
+
554
+ expect ( calendarInstance . _activeDate ) . toEqual ( new Date ( 2016 , JAN , 31 ) ) ;
555
+
556
+ dispatchKeyboardEvent ( calendarBodyEl , 'keydown' , HOME ) ;
557
+ fixture . detectChanges ( ) ;
558
+
559
+ expect ( calendarInstance . _activeDate ) . toEqual ( new Date ( 2016 , JAN , 31 ) ) ;
560
+ } ) ;
561
+
562
+ it ( 'should go to last year in current range on end press' , ( ) => {
563
+ dispatchKeyboardEvent ( calendarBodyEl , 'keydown' , END ) ;
564
+ fixture . detectChanges ( ) ;
565
+
566
+ expect ( calendarInstance . _activeDate ) . toEqual ( new Date ( 2039 , JAN , 31 ) ) ;
567
+
568
+ dispatchKeyboardEvent ( calendarBodyEl , 'keydown' , END ) ;
569
+ fixture . detectChanges ( ) ;
570
+
571
+ expect ( calendarInstance . _activeDate ) . toEqual ( new Date ( 2039 , JAN , 31 ) ) ;
572
+ } ) ;
573
+
574
+ it ( 'should go to same index in previous year range page up press' , ( ) => {
575
+ dispatchKeyboardEvent ( calendarBodyEl , 'keydown' , PAGE_UP ) ;
576
+ fixture . detectChanges ( ) ;
577
+
578
+ expect ( calendarInstance . _activeDate ) . toEqual ( new Date ( 2017 - yearsPerPage , JAN , 31 ) ) ;
579
+
580
+ dispatchKeyboardEvent ( calendarBodyEl , 'keydown' , PAGE_UP ) ;
581
+ fixture . detectChanges ( ) ;
582
+
583
+ expect ( calendarInstance . _activeDate )
584
+ . toEqual ( new Date ( 2017 - yearsPerPage * 2 , JAN , 31 ) ) ;
585
+ } ) ;
586
+
587
+ it ( 'should go to same index in next year range on page down press' , ( ) => {
588
+ dispatchKeyboardEvent ( calendarBodyEl , 'keydown' , PAGE_DOWN ) ;
589
+ fixture . detectChanges ( ) ;
590
+
591
+ expect ( calendarInstance . _activeDate ) . toEqual ( new Date ( 2017 + yearsPerPage , JAN , 31 ) ) ;
592
+
593
+ dispatchKeyboardEvent ( calendarBodyEl , 'keydown' , PAGE_DOWN ) ;
594
+ fixture . detectChanges ( ) ;
595
+
596
+ expect ( calendarInstance . _activeDate )
597
+ . toEqual ( new Date ( 2017 + yearsPerPage * 2 , JAN , 31 ) ) ;
598
+ } ) ;
599
+
600
+ it ( 'should go to year view on enter' , ( ) => {
601
+ dispatchKeyboardEvent ( calendarBodyEl , 'keydown' , RIGHT_ARROW ) ;
602
+ fixture . detectChanges ( ) ;
603
+
604
+ dispatchKeyboardEvent ( calendarBodyEl , 'keydown' , ENTER ) ;
605
+ fixture . detectChanges ( ) ;
606
+
607
+ expect ( calendarInstance . _currentView ) . toBe ( 'year' ) ;
608
+ expect ( calendarInstance . _activeDate ) . toEqual ( new Date ( 2018 , JAN , 31 ) ) ;
609
+ expect ( testComponent . selected ) . toBeUndefined ( ) ;
610
+ } ) ;
611
+ } ) ;
475
612
} ) ;
476
613
} ) ;
477
614
} ) ;
@@ -605,6 +742,35 @@ describe('MatCalendar', () => {
605
742
expect ( calendarInstance . yearView . _init ) . toHaveBeenCalled ( ) ;
606
743
} ) ;
607
744
745
+ it ( 'should re-render the multi-year view when the minDate changes' , ( ) => {
746
+ fixture . detectChanges ( ) ;
747
+ const periodButton =
748
+ calendarElement . querySelector ( '.mat-calendar-period-button' ) as HTMLElement ;
749
+ periodButton . click ( ) ;
750
+ fixture . detectChanges ( ) ;
751
+
752
+ spyOn ( calendarInstance . multiYearView , '_init' ) . and . callThrough ( ) ;
753
+
754
+ testComponent . minDate = new Date ( 2017 , NOV , 1 ) ;
755
+ fixture . detectChanges ( ) ;
756
+
757
+ expect ( calendarInstance . multiYearView . _init ) . toHaveBeenCalled ( ) ;
758
+ } ) ;
759
+
760
+ it ( 'should re-render the multi-year view when the maxDate changes' , ( ) => {
761
+ fixture . detectChanges ( ) ;
762
+ const periodButton =
763
+ calendarElement . querySelector ( '.mat-calendar-period-button' ) as HTMLElement ;
764
+ periodButton . click ( ) ;
765
+ fixture . detectChanges ( ) ;
766
+
767
+ spyOn ( calendarInstance . multiYearView , '_init' ) . and . callThrough ( ) ;
768
+
769
+ testComponent . maxDate = new Date ( 2017 , DEC , 1 ) ;
770
+ fixture . detectChanges ( ) ;
771
+
772
+ expect ( calendarInstance . multiYearView . _init ) . toHaveBeenCalled ( ) ;
773
+ } ) ;
608
774
} ) ;
609
775
610
776
describe ( 'calendar with date filter' , ( ) => {
0 commit comments