angular/packages/core/test
Andrew Scott 314112de99 fix(core): Prevent markForCheck during change detection from causing infinite loops (#54900)
This change updates the approach to the loop in `ApplicationRef.tick`
for allowing state updates in `afterRender` hooks. It is valid to update
state in render hooks and we need to ensure we refresh views that may be
marked for check in these hooks (this can happen simply as a result of
focusing an element). This change ensures that the behavior of `markForCheck`
with respect to this loop does not change while we are actively running
change detection on a view tree.

This approach also has the benefit of preventing a regression for #18917,
where updating state in animation listeners can cause `ExpressionChanged...Error`
This should be allowed - there is nothing wrong with respect to unidirectional
data flow in this case.

There may be other cases in the future where it is valid to update
state. Rather than wrapping the render hooks and the animation flushing
in something which flips a global state flag, the idea here is that
`markForCheck` is safe and valid in all cases whenever change detection
is not actively running.

PR Close #54900
2024-03-18 16:54:01 -07:00
..
acceptance fix(compiler): capture data bindings for content projection purposes in blocks (#54876) 2024-03-15 15:11:19 -07:00
animation refactor(animations): deprecation of AnimationDriver.NOOP (#51843) 2023-09-22 12:15:45 -07:00
authoring fix(core): ensure all initializer functions run in an injection context (#54761) 2024-03-12 09:08:06 -07:00
bundling fix(core): Prevent markForCheck during change detection from causing infinite loops (#54900) 2024-03-18 16:54:01 -07:00
change_detection test(core): clean up unnecessary nesting in old tests (#52239) 2023-10-19 09:26:15 -07:00
compiler build: ensure bootstrap transitive runfiles are made available (#48521) 2022-12-19 19:50:41 +00:00
debug test(core): clean up unnecessary nesting in old tests (#52239) 2023-10-19 09:26:15 -07:00
di test(core): clean up unnecessary nesting in old tests (#52239) 2023-10-19 09:26:15 -07:00
dom test(core): clean up unnecessary nesting in old tests (#52239) 2023-10-19 09:26:15 -07:00
hydration refactor(core): adding hydration for content projection (#49454) 2023-03-21 17:42:53 +01:00
i18n test(core): clean up unnecessary nesting in old tests (#52239) 2023-10-19 09:26:15 -07:00
linker fix(core): Ensure views marked for check are refreshed during change detection (#54735) 2024-03-06 15:44:09 -08:00
metadata test(core): clean up unnecessary nesting in old tests (#52239) 2023-10-19 09:26:15 -07:00
playground/zone-signal-input refactor: standardize doctype declaration to <!DOCTYPE html> (#51052) 2024-02-01 19:29:46 +00:00
reflection refactor(core): remove unused logic from reflection capabilities (#45335) 2022-03-24 11:02:39 -07:00
render3 refactor(core): add i18n AST to prepare for hydration (#54724) 2024-03-07 11:00:36 -08:00
sanitization fix(core): prevent infinite loops in clobbered elements check (#54425) 2024-03-11 12:46:16 -07:00
signals refactor(core): signals toString improvements (#54079) 2024-01-25 20:45:02 +00:00
strict_types refactor(core): rename ...WithMeta types to ...Declaration and alias to unknown (#41119) 2021-03-22 08:57:18 -07:00
testability refactor(core): Remove internal-only testability features (#53767) 2024-01-09 14:46:46 -08:00
util test(core): clean up unnecessary nesting in old tests (#52239) 2023-10-19 09:26:15 -07:00
zone fix(core): ensure change detection runs in a reasonable timeframe with zone coalescing (#54578) 2024-03-13 11:09:55 -07:00
application_config_spec.ts feat(core): add mergeApplicationConfig method (#49253) 2023-03-01 11:20:31 -08:00
application_init_spec.ts test(core): fix test with false-negative risk (#54025) 2024-01-23 16:58:56 +01:00
application_module_spec.ts test(core): clean up unnecessary nesting in old tests (#52239) 2023-10-19 09:26:15 -07:00
application_ref_integration_spec.ts refactor(platform-browser): update renderer to be able to remove ServerRendererFactory2 and EmulatedEncapsulationServerRenderer2 (#49630) 2023-04-05 11:42:57 -07:00
application_ref_spec.ts fix(core): ApplicationRef.tick should respect OnPush for host bindings (#53718) (#53718) 2024-03-11 13:46:11 -07:00
BUILD.bazel test(core): Add scheduler in tests to tie into ApplicationRef.isStable (#53579) 2024-01-09 16:05:31 -08:00
change_detection_scheduler_spec.ts refactor(core): render hooks should always run on node attach or detach (#54083) 2024-03-07 12:59:10 -08:00
component_fixture_spec.ts test(core): clean up unnecessary nesting in old tests (#52239) 2023-10-19 09:26:15 -07:00
defer_fixture_spec.ts fix(core): change defer block fixture default behavior to playthrough (#54088) 2024-01-26 15:44:40 +00:00
dev_mode_spec.ts test(core): clean up unnecessary nesting in old tests (#52239) 2023-10-19 09:26:15 -07:00
directive_lifecycle_integration_spec.ts refactor(core): cleanup type any (#48623) 2023-01-04 12:15:16 -08:00
error_handler_spec.ts refactor(core): remove unused error handler logic (#46216) 2022-06-02 13:40:16 -07:00
event_emitter_spec.ts test(core): clean up unnecessary nesting in old tests (#52239) 2023-10-19 09:26:15 -07:00
fake_async_spec.ts test(core): clean up unnecessary nesting in old tests (#52239) 2023-10-19 09:26:15 -07:00
forward_ref_integration_spec.ts refactor(core): handle #24571 todos. (#49221) 2023-06-14 12:33:44 +02:00
runtime_error_spec.ts refactor(core): improve error message when dom node is not found (#49977) 2023-04-25 09:29:47 -07:00
test_bed_effect_spec.ts fix(core): TestBed should still use the microtask queue to schedule effects (#53843) 2024-01-11 12:05:57 -08:00
test_bed_spec.ts fix(core): apply TestBed provider overrides to @defer dependencies (#54667) 2024-03-05 09:21:22 +01:00
transfer_state_spec.ts refactor(core): simplify state transfer escaping (#50201) 2023-05-10 11:31:34 -07:00
util_spec.ts test(core): clean up unnecessary nesting in old tests (#52239) 2023-10-19 09:26:15 -07:00