|
1 |
| -import {ENTER, ESCAPE, RIGHT_ARROW, UP_ARROW} from '@angular/cdk/keycodes'; |
| 1 | +import {ENTER, ESCAPE, RIGHT_ARROW, UP_ARROW, DOWN_ARROW} from '@angular/cdk/keycodes'; |
2 | 2 | import {Overlay, OverlayContainer, ScrollDispatcher} from '@angular/cdk/overlay';
|
3 | 3 | import {
|
4 | 4 | createKeyboardEvent,
|
@@ -432,15 +432,66 @@ describe('MatDatepicker', () => {
|
432 | 432 | expect(testComponent.datepicker.opened).toBe(false);
|
433 | 433 | }));
|
434 | 434 |
|
| 435 | + it('should open the datpeicker using ALT + DOWN_ARROW', fakeAsync(() => { |
| 436 | + expect(testComponent.datepicker.opened).toBe(false); |
| 437 | + |
| 438 | + const event = createKeyboardEvent('keydown', DOWN_ARROW); |
| 439 | + Object.defineProperty(event, 'altKey', {get: () => true}); |
| 440 | + |
| 441 | + dispatchEvent(fixture.nativeElement.querySelector('input'), event); |
| 442 | + fixture.detectChanges(); |
| 443 | + flush(); |
| 444 | + |
| 445 | + expect(testComponent.datepicker.opened).toBe(true); |
| 446 | + expect(event.defaultPrevented).toBe(true); |
| 447 | + })); |
| 448 | + |
435 | 449 | });
|
436 | 450 |
|
437 | 451 | describe('datepicker with too many inputs', () => {
|
438 | 452 | it('should throw when multiple inputs registered', fakeAsync(() => {
|
439 |
| - let fixture = createComponent(MultiInputDatepicker, [MatNativeDateModule]); |
| 453 | + const fixture = createComponent(MultiInputDatepicker, [MatNativeDateModule]); |
440 | 454 | expect(() => fixture.detectChanges()).toThrow();
|
441 | 455 | }));
|
442 | 456 | });
|
443 | 457 |
|
| 458 | + describe('datepicker that is assigned to input at a later point', () => { |
| 459 | + it('should not throw on ALT + DOWN_ARROW for input without datepicker', fakeAsync(() => { |
| 460 | + const fixture = createComponent(DelayedDatepicker, [MatNativeDateModule]); |
| 461 | + fixture.detectChanges(); |
| 462 | + |
| 463 | + expect(() => { |
| 464 | + const event = createKeyboardEvent('keydown', DOWN_ARROW); |
| 465 | + Object.defineProperty(event, 'altKey', {get: () => true}); |
| 466 | + dispatchEvent(fixture.nativeElement.querySelector('input'), event); |
| 467 | + fixture.detectChanges(); |
| 468 | + flush(); |
| 469 | + }).not.toThrow(); |
| 470 | + })); |
| 471 | + |
| 472 | + it('should handle value changes when a datepicker is assigned after init', fakeAsync(() => { |
| 473 | + const fixture = createComponent(DelayedDatepicker, [MatNativeDateModule]); |
| 474 | + const testComponent: DelayedDatepicker = fixture.componentInstance; |
| 475 | + const toSelect = new Date(2017, JAN, 1); |
| 476 | + |
| 477 | + fixture.detectChanges(); |
| 478 | + |
| 479 | + expect(testComponent.datepickerInput.value).toBeNull(); |
| 480 | + expect(testComponent.datepicker._selected).toBeNull(); |
| 481 | + |
| 482 | + testComponent.assignedDatepicker = testComponent.datepicker; |
| 483 | + fixture.detectChanges(); |
| 484 | + |
| 485 | + testComponent.assignedDatepicker.select(toSelect); |
| 486 | + fixture.detectChanges(); |
| 487 | + flush(); |
| 488 | + fixture.detectChanges(); |
| 489 | + |
| 490 | + expect(testComponent.datepickerInput.value).toEqual(toSelect); |
| 491 | + expect(testComponent.datepicker._selected).toEqual(toSelect); |
| 492 | + })); |
| 493 | + }); |
| 494 | + |
444 | 495 | describe('datepicker with no inputs', () => {
|
445 | 496 | let fixture: ComponentFixture<NoInputDatepicker>;
|
446 | 497 | let testComponent: NoInputDatepicker;
|
@@ -1787,3 +1838,18 @@ class DatepickerWithCustomHeader {
|
1787 | 1838 | `,
|
1788 | 1839 | })
|
1789 | 1840 | class CustomHeaderForDatepicker {}
|
| 1841 | + |
| 1842 | + |
| 1843 | + |
| 1844 | +@Component({ |
| 1845 | + template: ` |
| 1846 | + <input [matDatepicker]="assignedDatepicker" [value]="date"> |
| 1847 | + <mat-datepicker #d [touchUi]="touch"></mat-datepicker> |
| 1848 | + `, |
| 1849 | +}) |
| 1850 | +class DelayedDatepicker { |
| 1851 | + @ViewChild('d') datepicker: MatDatepicker<Date>; |
| 1852 | + @ViewChild(MatDatepickerInput) datepickerInput: MatDatepickerInput<Date>; |
| 1853 | + date: Date | null; |
| 1854 | + assignedDatepicker: MatDatepicker<Date>; |
| 1855 | +} |
0 commit comments