@@ -13,7 +13,7 @@ import {
1313 OverlayCancelableEventArgs , OverlayClosingEventArgs , OverlayEventArgs , OverlaySettings ,
1414 WEEKDAYS
1515} from 'igniteui-angular/core' ;
16- import { ChangeDetectorRef , Component , DebugElement , ElementRef , EventEmitter , Injector , QueryList , Renderer2 , ViewChild } from '@angular/core' ;
16+ import { ChangeDetectorRef , Component , DebugElement , ElementRef , EventEmitter , Injector , provideZonelessChangeDetection , QueryList , Renderer2 , ViewChild } from '@angular/core' ;
1717import { By } from '@angular/platform-browser' ;
1818import { PickerCalendarOrientation , PickerHeaderOrientation , PickerInteractionMode } from '../../../core/src/date-common/types' ;
1919import { DatePart } from '../../../core/src/date-common/public_api' ;
@@ -903,8 +903,8 @@ describe('IgxDatePicker', () => {
903903 get : mockNgControl
904904 } ) ;
905905
906- mockCdr = jasmine . createSpyObj ( 'ChangeDetectorRef' , [ 'detectChanges' ] ) ;
907- mockCalendar = { selected : new EventEmitter < any > ( ) , selectDate : ( ) => { } } ;
906+ mockCdr = jasmine . createSpyObj ( 'ChangeDetectorRef' , [ 'detectChanges' , 'markForCheck' ] ) ;
907+ mockCalendar = { selected : new EventEmitter < any > ( ) , selectDate : ( ) => { } } ;
908908 const mockComponentInstance = {
909909 calendar : mockCalendar ,
910910 todaySelection : new EventEmitter < any > ( ) ,
@@ -1665,6 +1665,44 @@ describe('IgxDatePicker', () => {
16651665 } ) ;
16661666 } ) ;
16671667 } ) ;
1668+
1669+ describe ( 'Zoneless' , ( ) => {
1670+ let fixture : ComponentFixture < IgxDatePickerNgModelComponent > ;
1671+ let datePicker : IgxDatePickerComponent ;
1672+
1673+ beforeEach ( async ( ) => {
1674+ await TestBed . configureTestingModule ( {
1675+ imports : [
1676+ NoopAnimationsModule ,
1677+ IgxDatePickerNgModelComponent ,
1678+ ] ,
1679+ providers : [
1680+ provideZonelessChangeDetection ( )
1681+ ]
1682+ } ) . compileComponents ( ) ;
1683+
1684+ fixture = TestBed . createComponent ( IgxDatePickerNgModelComponent ) ;
1685+ fixture . detectChanges ( ) ;
1686+ } ) ;
1687+
1688+ it ( 'should not throw ExpressionChangedAfterItHasBeenCheckedError when closing - issue #17305' , fakeAsync ( ( ) => {
1689+ datePicker = fixture . componentInstance . datePicker ;
1690+
1691+ datePicker . open ( ) ;
1692+ fixture . detectChanges ( ) ;
1693+ tick ( ) ;
1694+
1695+ expect ( ( ) => {
1696+ datePicker . close ( ) ;
1697+ fixture . detectChanges ( ) ;
1698+ } ) . not . toThrow ( ) ;
1699+
1700+ fixture . detectChanges ( ) ;
1701+ tick ( 100 ) ;
1702+ const input = fixture . debugElement . query ( By . css ( 'input' ) ) ;
1703+ expect ( input . nativeElement . getAttribute ( 'aria-expanded' ) ) . toBe ( 'false' ) ;
1704+ } ) ) ;
1705+ } ) ;
16681706} ) ;
16691707@Component ( {
16701708 template : `
0 commit comments