@@ -10,6 +10,32 @@ import {FakeViewportRuler} from '../core/overlay/position/fake-viewport-ruler';
10
10
describe ( 'MdCheckbox' , ( ) => {
11
11
let fixture : ComponentFixture < any > ;
12
12
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
+
13
39
beforeEach ( async ( ( ) => {
14
40
TestBed . configureTestingModule ( {
15
41
imports : [ MdCheckboxModule . forRoot ( ) , FormsModule , ReactiveFormsModule ] ,
@@ -388,7 +414,7 @@ describe('MdCheckbox', () => {
388
414
testComponent . isIndeterminate = true ;
389
415
fixture . detectChanges ( ) ;
390
416
391
- inputElement . click ( ) ;
417
+ inputElement . dispatchEvent ( createMouseEvent ( 'click' ) ) ;
392
418
fixture . detectChanges ( ) ;
393
419
394
420
expect ( checkboxNativeElement . classList ) . not . toContain (
0 commit comments