1
- import {
2
- async ,
3
- fakeAsync ,
4
- tick ,
5
- ComponentFixture ,
6
- TestBed ,
7
- } from '@angular/core/testing' ;
1
+ import { fakeAsync , tick , ComponentFixture , TestBed } from '@angular/core/testing' ;
8
2
import { NgModel , FormsModule , ReactiveFormsModule , FormControl } from '@angular/forms' ;
9
3
import { Component , DebugElement } from '@angular/core' ;
10
4
import { By } from '@angular/platform-browser' ;
11
5
import {
12
6
MatButtonToggleGroup ,
13
7
MatButtonToggle ,
14
- MatButtonToggleGroupMultiple ,
15
8
MatButtonToggleChange ,
16
9
MatButtonToggleModule ,
17
10
} from './index' ;
18
11
19
-
20
12
describe ( 'MatButtonToggle with forms' , ( ) => {
21
13
22
- beforeEach ( async ( ( ) => {
14
+ beforeEach ( fakeAsync ( ( ) => {
23
15
TestBed . configureTestingModule ( {
24
16
imports : [ MatButtonToggleModule , FormsModule , ReactiveFormsModule ] ,
25
17
declarations : [
@@ -37,7 +29,7 @@ describe('MatButtonToggle with forms', () => {
37
29
let groupInstance : MatButtonToggleGroup ;
38
30
let testComponent : ButtonToggleGroupWithFormControl ;
39
31
40
- beforeEach ( async ( ( ) => {
32
+ beforeEach ( fakeAsync ( ( ) => {
41
33
fixture = TestBed . createComponent ( ButtonToggleGroupWithFormControl ) ;
42
34
fixture . detectChanges ( ) ;
43
35
@@ -89,7 +81,7 @@ describe('MatButtonToggle with forms', () => {
89
81
let groupNgModel : NgModel ;
90
82
let buttonToggleLabels : HTMLElement [ ] ;
91
83
92
- beforeEach ( async ( ( ) => {
84
+ beforeEach ( fakeAsync ( ( ) => {
93
85
fixture = TestBed . createComponent ( ButtonToggleGroupWithNgModel ) ;
94
86
fixture . detectChanges ( ) ;
95
87
testComponent = fixture . debugElement . componentInstance ;
@@ -143,7 +135,10 @@ describe('MatButtonToggle with forms', () => {
143
135
for ( let buttonToggle of buttonToggleInstances ) {
144
136
expect ( buttonToggle . checked ) . toBe ( groupInstance . value === buttonToggle . value ) ;
145
137
}
146
- expect ( groupInstance . selected ! . value ) . toBe ( groupInstance . value ) ;
138
+
139
+ const selected = groupInstance . selected as MatButtonToggle ;
140
+
141
+ expect ( selected . value ) . toBe ( groupInstance . value ) ;
147
142
} ) ;
148
143
149
144
it ( 'should have the correct FormControl state initially and after interaction' ,
@@ -183,7 +178,7 @@ describe('MatButtonToggle with forms', () => {
183
178
184
179
describe ( 'MatButtonToggle without forms' , ( ) => {
185
180
186
- beforeEach ( async ( ( ) => {
181
+ beforeEach ( fakeAsync ( ( ) => {
187
182
TestBed . configureTestingModule ( {
188
183
imports : [ MatButtonToggleModule ] ,
189
184
declarations : [
@@ -318,7 +313,6 @@ describe('MatButtonToggle without forms', () => {
318
313
let changeSpy = jasmine . createSpy ( 'button-toggle change listener' ) ;
319
314
buttonToggleInstances [ 0 ] . change . subscribe ( changeSpy ) ;
320
315
321
-
322
316
buttonToggleLabelElements [ 0 ] . click ( ) ;
323
317
fixture . detectChanges ( ) ;
324
318
tick ( ) ;
@@ -392,14 +386,16 @@ describe('MatButtonToggle without forms', () => {
392
386
393
387
fixture . detectChanges ( ) ;
394
388
389
+ // Note that we cast to a boolean, because the event has some circular references
390
+ // which will crash the runner when Jasmine attempts to stringify them.
391
+ expect ( ! ! testComponent . lastEvent ) . toBe ( false ) ;
395
392
expect ( groupInstance . value ) . toBe ( 'red' ) ;
396
- expect ( testComponent . lastEvent ) . toBeFalsy ( ) ;
397
393
398
394
groupInstance . value = 'green' ;
399
395
fixture . detectChanges ( ) ;
400
396
397
+ expect ( ! ! testComponent . lastEvent ) . toBe ( false ) ;
401
398
expect ( groupInstance . value ) . toBe ( 'green' ) ;
402
- expect ( testComponent . lastEvent ) . toBeFalsy ( ) ;
403
399
} ) ;
404
400
405
401
} ) ;
@@ -411,20 +407,19 @@ describe('MatButtonToggle without forms', () => {
411
407
let buttonToggleDebugElements : DebugElement [ ] ;
412
408
let buttonToggleNativeElements : HTMLElement [ ] ;
413
409
let buttonToggleLabelElements : HTMLLabelElement [ ] ;
414
- let groupInstance : MatButtonToggleGroupMultiple ;
410
+ let groupInstance : MatButtonToggleGroup ;
415
411
let buttonToggleInstances : MatButtonToggle [ ] ;
416
412
let testComponent : ButtonTogglesInsideButtonToggleGroupMultiple ;
417
413
418
- beforeEach ( async ( ( ) => {
414
+ beforeEach ( fakeAsync ( ( ) => {
419
415
fixture = TestBed . createComponent ( ButtonTogglesInsideButtonToggleGroupMultiple ) ;
420
416
fixture . detectChanges ( ) ;
421
417
422
418
testComponent = fixture . debugElement . componentInstance ;
423
419
424
- groupDebugElement = fixture . debugElement . query ( By . directive ( MatButtonToggleGroupMultiple ) ) ;
420
+ groupDebugElement = fixture . debugElement . query ( By . directive ( MatButtonToggleGroup ) ) ;
425
421
groupNativeElement = groupDebugElement . nativeElement ;
426
- groupInstance = groupDebugElement . injector . get < MatButtonToggleGroupMultiple > (
427
- MatButtonToggleGroupMultiple ) ;
422
+ groupInstance = groupDebugElement . injector . get < MatButtonToggleGroup > ( MatButtonToggleGroup ) ;
428
423
429
424
buttonToggleDebugElements = fixture . debugElement . queryAll ( By . directive ( MatButtonToggle ) ) ;
430
425
buttonToggleNativeElements = buttonToggleDebugElements
@@ -448,16 +443,22 @@ describe('MatButtonToggle without forms', () => {
448
443
let nativeCheckboxLabel = buttonToggleDebugElements [ 0 ] . query ( By . css ( 'label' ) ) . nativeElement ;
449
444
450
445
nativeCheckboxLabel . click ( ) ;
446
+
447
+ expect ( groupInstance . value ) . toEqual ( [ 'eggs' ] ) ;
451
448
expect ( buttonToggleInstances [ 0 ] . checked ) . toBe ( true ) ;
452
449
} ) ;
453
450
454
451
it ( 'should allow for multiple toggles to be selected' , ( ) => {
455
452
buttonToggleInstances [ 0 ] . checked = true ;
456
453
fixture . detectChanges ( ) ;
454
+
455
+ expect ( groupInstance . value ) . toEqual ( [ 'eggs' ] ) ;
457
456
expect ( buttonToggleInstances [ 0 ] . checked ) . toBe ( true ) ;
458
457
459
458
buttonToggleInstances [ 1 ] . checked = true ;
460
459
fixture . detectChanges ( ) ;
460
+
461
+ expect ( groupInstance . value ) . toEqual ( [ 'eggs' , 'flour' ] ) ;
461
462
expect ( buttonToggleInstances [ 1 ] . checked ) . toBe ( true ) ;
462
463
expect ( buttonToggleInstances [ 0 ] . checked ) . toBe ( true ) ;
463
464
} ) ;
@@ -468,6 +469,7 @@ describe('MatButtonToggle without forms', () => {
468
469
nativeCheckboxInput . click ( ) ;
469
470
fixture . detectChanges ( ) ;
470
471
472
+ expect ( groupInstance . value ) . toEqual ( [ 'eggs' ] ) ;
471
473
expect ( buttonToggleInstances [ 0 ] . checked ) . toBe ( true ) ;
472
474
} ) ;
473
475
@@ -480,18 +482,23 @@ describe('MatButtonToggle without forms', () => {
480
482
expect ( groupNativeElement . classList ) . toContain ( 'mat-button-toggle-vertical' ) ;
481
483
} ) ;
482
484
483
- it ( 'should deselect a button toggle when selected twice' , ( ) => {
484
- buttonToggleNativeElements [ 0 ] . click ( ) ;
485
+ it ( 'should deselect a button toggle when selected twice' , fakeAsync ( ( ) => {
486
+ buttonToggleLabelElements [ 0 ] . click ( ) ;
485
487
fixture . detectChanges ( ) ;
488
+ tick ( ) ;
486
489
487
- buttonToggleNativeElements [ 0 ] . click ( ) ;
490
+ expect ( buttonToggleInstances [ 0 ] . checked ) . toBe ( true ) ;
491
+ expect ( groupInstance . value ) . toEqual ( [ 'eggs' ] ) ;
492
+
493
+ buttonToggleLabelElements [ 0 ] . click ( ) ;
488
494
fixture . detectChanges ( ) ;
495
+ tick ( ) ;
489
496
497
+ expect ( groupInstance . value ) . toEqual ( [ ] ) ;
490
498
expect ( buttonToggleInstances [ 0 ] . checked ) . toBe ( false ) ;
491
- } ) ;
499
+ } ) ) ;
492
500
493
501
it ( 'should emit a change event for state changes' , fakeAsync ( ( ) => {
494
-
495
502
expect ( buttonToggleInstances [ 0 ] . checked ) . toBe ( false ) ;
496
503
497
504
let changeSpy = jasmine . createSpy ( 'button-toggle change listener' ) ;
@@ -501,17 +508,25 @@ describe('MatButtonToggle without forms', () => {
501
508
fixture . detectChanges ( ) ;
502
509
tick ( ) ;
503
510
expect ( changeSpy ) . toHaveBeenCalled ( ) ;
511
+ expect ( groupInstance . value ) . toEqual ( [ 'eggs' ] ) ;
504
512
505
513
buttonToggleLabelElements [ 0 ] . click ( ) ;
506
514
fixture . detectChanges ( ) ;
507
515
tick ( ) ;
516
+ expect ( groupInstance . value ) . toEqual ( [ ] ) ;
508
517
509
518
// The default browser behavior is to emit an event, when the value was set
510
519
// to false. That's because the current input type is set to `checkbox` when
511
520
// using the multiple mode.
512
521
expect ( changeSpy ) . toHaveBeenCalledTimes ( 2 ) ;
513
522
} ) ) ;
514
523
524
+ it ( 'should throw when attempting to assign a non-array value' , ( ) => {
525
+ expect ( ( ) => {
526
+ groupInstance . value = 'not-an-array' ;
527
+ } ) . toThrowError ( / V a l u e m u s t b e a n a r r a y / ) ;
528
+ } ) ;
529
+
515
530
} ) ;
516
531
517
532
describe ( 'as standalone' , ( ) => {
@@ -522,19 +537,18 @@ describe('MatButtonToggle without forms', () => {
522
537
let buttonToggleInstance : MatButtonToggle ;
523
538
let testComponent : StandaloneButtonToggle ;
524
539
525
- beforeEach ( async ( ( ) => {
540
+ beforeEach ( fakeAsync ( ( ) => {
526
541
fixture = TestBed . createComponent ( StandaloneButtonToggle ) ;
527
542
fixture . detectChanges ( ) ;
528
543
529
- testComponent = fixture . debugElement . componentInstance ;
530
-
544
+ testComponent = fixture . componentInstance ;
531
545
buttonToggleDebugElement = fixture . debugElement . query ( By . directive ( MatButtonToggle ) ) ;
532
546
buttonToggleNativeElement = buttonToggleDebugElement . nativeElement ;
533
547
buttonToggleLabelElement = fixture . debugElement . query ( By . css ( 'label' ) ) . nativeElement ;
534
548
buttonToggleInstance = buttonToggleDebugElement . componentInstance ;
535
549
} ) ) ;
536
550
537
- it ( 'should toggle when clicked' , ( ) => {
551
+ it ( 'should toggle when clicked' , fakeAsync ( ( ) => {
538
552
buttonToggleLabelElement . click ( ) ;
539
553
540
554
fixture . detectChanges ( ) ;
@@ -545,7 +559,7 @@ describe('MatButtonToggle without forms', () => {
545
559
fixture . detectChanges ( ) ;
546
560
547
561
expect ( buttonToggleInstance . checked ) . toBe ( false ) ;
548
- } ) ;
562
+ } ) ) ;
549
563
550
564
it ( 'should emit a change event for state changes' , fakeAsync ( ( ) => {
551
565
0 commit comments