2024-07-23 16:50:12 +00:00
|
|
|
/*!
|
|
|
|
|
* @license
|
|
|
|
|
* Copyright Google LLC All Rights Reserved.
|
|
|
|
|
*
|
|
|
|
|
* Use of this source code is governed by an MIT-style license that can be
|
|
|
|
|
* found in the LICENSE file at https://angular.dev/license
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
import {ComponentFixture, TestBed} from '@angular/core/testing';
|
|
|
|
|
|
|
|
|
|
import {SlideToggle} from './slide-toggle.component';
|
2025-04-04 17:43:36 +00:00
|
|
|
import {provideZonelessChangeDetection} from '@angular/core';
|
2024-07-23 16:50:12 +00:00
|
|
|
|
|
|
|
|
describe('SlideToggle', () => {
|
|
|
|
|
let component: SlideToggle;
|
|
|
|
|
let fixture: ComponentFixture<SlideToggle>;
|
|
|
|
|
|
|
|
|
|
beforeEach(() => {
|
|
|
|
|
TestBed.configureTestingModule({
|
|
|
|
|
imports: [SlideToggle],
|
2025-04-04 17:43:36 +00:00
|
|
|
providers: [provideZonelessChangeDetection()],
|
2024-07-23 16:50:12 +00:00
|
|
|
});
|
|
|
|
|
fixture = TestBed.createComponent(SlideToggle);
|
2024-11-11 15:36:23 +00:00
|
|
|
fixture.componentRef.setInput('buttonId', 'id');
|
|
|
|
|
fixture.componentRef.setInput('label', 'foo');
|
2024-07-23 16:50:12 +00:00
|
|
|
component = fixture.componentInstance;
|
|
|
|
|
fixture.detectChanges();
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
it('should toggle the value when clicked', () => {
|
|
|
|
|
expect(component['checked']()).toBeFalse();
|
|
|
|
|
|
|
|
|
|
const buttonElement = fixture.nativeElement.querySelector('input');
|
|
|
|
|
buttonElement.click();
|
|
|
|
|
|
|
|
|
|
expect(component['checked']()).toBeTrue();
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
it('should call onChange and onTouched when toggled', () => {
|
|
|
|
|
const onChangeSpy = jasmine.createSpy('onChangeSpy');
|
|
|
|
|
const onTouchedSpy = jasmine.createSpy('onTouchedSpy');
|
|
|
|
|
component.registerOnChange(onChangeSpy);
|
|
|
|
|
component.registerOnTouched(onTouchedSpy);
|
|
|
|
|
|
|
|
|
|
component.toggle();
|
|
|
|
|
|
|
|
|
|
expect(onChangeSpy).toHaveBeenCalled();
|
|
|
|
|
expect(onChangeSpy).toHaveBeenCalledWith(true);
|
|
|
|
|
expect(onTouchedSpy).toHaveBeenCalled();
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
it('should set active class for button when is checked', () => {
|
|
|
|
|
component.writeValue(true);
|
|
|
|
|
fixture.detectChanges();
|
|
|
|
|
const buttonElement: HTMLButtonElement = fixture.nativeElement.querySelector('input');
|
|
|
|
|
expect(buttonElement.classList.contains('docs-toggle-active')).toBeTrue();
|
|
|
|
|
|
|
|
|
|
component.writeValue(false);
|
|
|
|
|
fixture.detectChanges();
|
|
|
|
|
expect(buttonElement.classList.contains('docs-toggle-active')).toBeFalse();
|
|
|
|
|
});
|
|
|
|
|
});
|