@@ -10,6 +10,32 @@ import {FakeViewportRuler} from '../core/overlay/position/fake-viewport-ruler';
1010describe ( 'MdCheckbox' , ( ) => {
1111 let fixture : ComponentFixture < any > ;
1212
13+ /** Creates a DOM mouse event. */
14+ const createMouseEvent = ( eventType : string , dict : any = { } ) => {
15+ // Ideally this would just be "return new MouseEvent(eventType, dict)". But IE11 doesn't support
16+ // the MouseEvent constructor, and Edge inexplicably divides clientX and clientY by 100 to get
17+ // pageX and pageY. (Really. After "e = new MouseEvent('click', {clientX: 200, clientY: 300})",
18+ // e.clientX is 200, e.pageX is 2, e.clientY is 300, and e.pageY is 3.)
19+ // So instead we use the deprecated createEvent/initMouseEvent API, which works everywhere.
20+ const event = document . createEvent ( 'MouseEvents' ) ;
21+ event . initMouseEvent ( eventType ,
22+ false , /* canBubble */
23+ false , /* cancelable */
24+ window , /* view */
25+ 0 , /* detail */
26+ dict . screenX || 0 ,
27+ dict . screenY || 0 ,
28+ dict . clientX || 0 ,
29+ dict . clientY || 0 ,
30+ false , /* ctrlKey */
31+ false , /* altKey */
32+ false , /* shiftKey */
33+ false , /* metaKey */
34+ 0 , /* button */
35+ null /* relatedTarget */ ) ;
36+ return event ;
37+ } ;
38+
1339 beforeEach ( async ( ( ) => {
1440 TestBed . configureTestingModule ( {
1541 imports : [ MdCheckboxModule . forRoot ( ) , FormsModule , ReactiveFormsModule ] ,
@@ -388,7 +414,7 @@ describe('MdCheckbox', () => {
388414 testComponent . isIndeterminate = true ;
389415 fixture . detectChanges ( ) ;
390416
391- inputElement . click ( ) ;
417+ inputElement . dispatchEvent ( createMouseEvent ( 'click' ) ) ;
392418 fixture . detectChanges ( ) ;
393419
394420 expect ( checkboxNativeElement . classList ) . not . toContain (
0 commit comments