From d716b002eff4f884977094d2fc045ef850a73adf Mon Sep 17 00:00:00 2001 From: Paul Gschwendtner Date: Sun, 9 Jul 2017 03:56:29 +0200 Subject: [PATCH] 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) --- src/lib/slide-toggle/index.ts | 3 +- src/lib/slide-toggle/slide-toggle.spec.ts | 54 +++++++++++++++++++++++ 2 files changed, 55 insertions(+), 2 deletions(-) diff --git a/src/lib/slide-toggle/index.ts b/src/lib/slide-toggle/index.ts index a7454d797f8..51412f905a5 100644 --- a/src/lib/slide-toggle/index.ts +++ b/src/lib/slide-toggle/index.ts @@ -7,7 +7,6 @@ */ import {NgModule} from '@angular/core'; -import {FormsModule} from '@angular/forms'; import {HAMMER_GESTURE_CONFIG} from '@angular/platform-browser'; import {MdSlideToggle} from './slide-toggle'; import { @@ -19,7 +18,7 @@ import { } from '../core'; @NgModule({ - imports: [FormsModule, MdRippleModule, MdCommonModule, PlatformModule], + imports: [MdRippleModule, MdCommonModule, PlatformModule], exports: [MdSlideToggle, MdCommonModule], declarations: [MdSlideToggle], providers: [ diff --git a/src/lib/slide-toggle/slide-toggle.spec.ts b/src/lib/slide-toggle/slide-toggle.spec.ts index c0d52461ca6..ef67755d5a1 100644 --- a/src/lib/slide-toggle/slide-toggle.spec.ts +++ b/src/lib/slide-toggle/slide-toggle.spec.ts @@ -26,6 +26,53 @@ describe('MdSlideToggle', () => { TestBed.compileComponents(); })); + describe('without form modules', () => { + let fixture: ComponentFixture; + let slideToggleInstance: MdSlideToggle; + let labelElement: HTMLLabelElement; + + beforeEach(async(() => { + TestBed.resetTestingModule(); + TestBed.configureTestingModule({ + imports: [MdSlideToggleModule], + declarations: [SlideToggleWithoutForms] + }); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(SlideToggleWithoutForms); + fixture.detectChanges(); + + const slideToggleDebug = fixture.debugElement.query(By.directive(MdSlideToggle)); + + slideToggleInstance = slideToggleDebug.componentInstance; + labelElement = fixture.debugElement.query(By.css('label')).nativeElement; + }); + + it('should update the checked state on click', () => { + expect(slideToggleInstance.checked) + .toBe(false, 'Expected the slide-toggle not to be checked initially.'); + + labelElement.click(); + fixture.detectChanges(); + + expect(slideToggleInstance.checked) + .toBe(true, 'Expected the slide-toggle to be checked after click.'); + }); + + it('should update the checked state from binding', () => { + expect(slideToggleInstance.checked) + .toBe(false, 'Expected the slide-toggle not to be checked initially.'); + + fixture.componentInstance.isChecked = true; + fixture.detectChanges(); + + expect(slideToggleInstance.checked) + .toBe(true, 'Expected the slide-toggle to be checked after click.'); + }); + + }); + describe('basic behavior', () => { let fixture: ComponentFixture; @@ -720,3 +767,10 @@ class SlideToggleFormsTestApp { class SlideToggleWithFormControl { formControl = new FormControl(); } + +@Component({ + template: `` +}) +class SlideToggleWithoutForms { + isChecked = false; +}