Skip to content

Commit d716b00

Browse files
devversionmmalerba
authored andcommitted
fix(slide-toggle): slide-toggle module depends on forms module (#5523)
* Currently the slide-toggle module always imports the `FormsModule` and therefore when treeshaking the `FormsModule` would be always included (even if FormsModule is not used at all)
1 parent 173cddd commit d716b00

File tree

2 files changed

+55
-2
lines changed

2 files changed

+55
-2
lines changed

src/lib/slide-toggle/index.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
*/
88

99
import {NgModule} from '@angular/core';
10-
import {FormsModule} from '@angular/forms';
1110
import {HAMMER_GESTURE_CONFIG} from '@angular/platform-browser';
1211
import {MdSlideToggle} from './slide-toggle';
1312
import {
@@ -19,7 +18,7 @@ import {
1918
} from '../core';
2019

2120
@NgModule({
22-
imports: [FormsModule, MdRippleModule, MdCommonModule, PlatformModule],
21+
imports: [MdRippleModule, MdCommonModule, PlatformModule],
2322
exports: [MdSlideToggle, MdCommonModule],
2423
declarations: [MdSlideToggle],
2524
providers: [

src/lib/slide-toggle/slide-toggle.spec.ts

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,53 @@ describe('MdSlideToggle', () => {
2626
TestBed.compileComponents();
2727
}));
2828

29+
describe('without form modules', () => {
30+
let fixture: ComponentFixture<SlideToggleWithoutForms>;
31+
let slideToggleInstance: MdSlideToggle;
32+
let labelElement: HTMLLabelElement;
33+
34+
beforeEach(async(() => {
35+
TestBed.resetTestingModule();
36+
TestBed.configureTestingModule({
37+
imports: [MdSlideToggleModule],
38+
declarations: [SlideToggleWithoutForms]
39+
});
40+
}));
41+
42+
beforeEach(() => {
43+
fixture = TestBed.createComponent(SlideToggleWithoutForms);
44+
fixture.detectChanges();
45+
46+
const slideToggleDebug = fixture.debugElement.query(By.directive(MdSlideToggle));
47+
48+
slideToggleInstance = slideToggleDebug.componentInstance;
49+
labelElement = fixture.debugElement.query(By.css('label')).nativeElement;
50+
});
51+
52+
it('should update the checked state on click', () => {
53+
expect(slideToggleInstance.checked)
54+
.toBe(false, 'Expected the slide-toggle not to be checked initially.');
55+
56+
labelElement.click();
57+
fixture.detectChanges();
58+
59+
expect(slideToggleInstance.checked)
60+
.toBe(true, 'Expected the slide-toggle to be checked after click.');
61+
});
62+
63+
it('should update the checked state from binding', () => {
64+
expect(slideToggleInstance.checked)
65+
.toBe(false, 'Expected the slide-toggle not to be checked initially.');
66+
67+
fixture.componentInstance.isChecked = true;
68+
fixture.detectChanges();
69+
70+
expect(slideToggleInstance.checked)
71+
.toBe(true, 'Expected the slide-toggle to be checked after click.');
72+
});
73+
74+
});
75+
2976
describe('basic behavior', () => {
3077
let fixture: ComponentFixture<any>;
3178

@@ -720,3 +767,10 @@ class SlideToggleFormsTestApp {
720767
class SlideToggleWithFormControl {
721768
formControl = new FormControl();
722769
}
770+
771+
@Component({
772+
template: `<md-slide-toggle [checked]="isChecked"></md-slide-toggle>`
773+
})
774+
class SlideToggleWithoutForms {
775+
isChecked = false;
776+
}

0 commit comments

Comments
 (0)