Files
angular__angular/packages/forms/test/ng_control_status_spec.ts
T
Andrew Scott 953c4b2580 feat(core): Move zoneless change detection to dev preview (#60748)
This commit moves zoneless from experimental to developer preview.

* Update tag on provider API
* Remove "experimental" from provider name
* Move documentation from "experimental features" to "Best practives ->
  Performance" (at least temporarily until there is a better place)

BREAKING CHANGE: `provideExperimentalZonelessChangeDetection` is
renamed to `provideZonelessChangeDetection` as it is now "Developer
Preview" rather than "Experimental".

PR Close #60748
2025-04-23 11:47:56 +02:00

50 lines
1.8 KiB
TypeScript

/**
* @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 {ChangeDetectionStrategy, Component} from '@angular/core';
import {FormControl, FormsModule, ReactiveFormsModule, Validators} from '../public_api';
import {TestBed} from '@angular/core/testing';
import {provideZonelessChangeDetection} from '@angular/core/src/change_detection/scheduling/zoneless_scheduling_impl';
describe('status host binding classes', () => {
beforeEach(() => {
TestBed.configureTestingModule({providers: [provideZonelessChangeDetection()]});
});
it('work in OnPush components', async () => {
@Component({
selector: 'test-cmp',
template: `<input type="text" [formControl]="control">`,
standalone: true,
imports: [FormsModule, ReactiveFormsModule],
changeDetection: ChangeDetectionStrategy.OnPush,
})
class App {
control = new FormControl('old value', [Validators.required]);
}
const fixture = TestBed.createComponent(App);
await fixture.whenStable();
expect(fixture.nativeElement.innerHTML).toContain('ng-valid');
expect(fixture.nativeElement.innerHTML).toContain('ng-untouched');
expect(fixture.nativeElement.innerHTML).toContain('ng-pristine');
fixture.componentInstance.control.setValue(null);
await fixture.whenStable();
expect(fixture.nativeElement.innerHTML).toContain('ng-invalid');
fixture.debugElement.query((x) => x.name === 'input').triggerEventHandler('blur');
await fixture.whenStable();
expect(fixture.nativeElement.innerHTML).toContain('ng-touched');
fixture.componentInstance.control.reset();
await fixture.whenStable();
expect(fixture.nativeElement.innerHTML).toContain('ng-untouched');
});
});