You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
test(aot): skip selftest fixtures for documented AOT-broken subsystems
After PR #352 the AOT selftest run completed end-to-end but still had 22
assertion failures + 20 fixture-init crashes (89 sub-assertion failures
total). Investigating each cluster against docs/aot-support.md showed
every remaining failure is a fixture that exercises a subsystem already
documented as not-yet-AOT-clean:
- Localization with anonymous-type args (22 sub-assertions in 1 fixture)
- PropertyGrid auto-discovery (25 sub-assertions across 9 fixtures)
- Devtools / MCP server (~24 fixtures, mix of init crashes + asserts)
- UseObservable on POCOs (CoreCov2_UseObservableTreeHook)
- Theme resource lookup via XamlControlsResources (CovBoost theme tests)
- XAML-metadata-dependent controls (NavigationView, TabView,
TemplateBinding) — adds NavigationViewContentUpdate,
IdentityPreserve_TabView, both Issue142 reproductions
Adds 44 new patterns to DefaultAotSkipPatterns (explicit names where the
family has passing members; no over-wildcarding). Verified against the
pre-built AOT host via REACTOR_AOT_SKIP=... — full suite exits 0 with 0
failures and 193 skips (up from 149). JIT path is unaffected: 2614
assertions pass with 0 failures and 0 skips.
Also extends docs/aot-support.md with two newly-identified broken rows:
`Theme.X / ThemeRef.Resolve` (XamlControlsResources merged-dict
lookup) and `XAML-metadata-dependent controls` (NavigationView /
TabView / {TemplateBinding}). Updates CONTRIBUTING.md's expected
pass-count summary.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copy file name to clipboardExpand all lines: CONTRIBUTING.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -175,7 +175,7 @@ Output is the same TAP stream as a normal selftest run. The runner detects AOT a
175
175
176
176
A native crash terminates the AOT process — the per-fixture managed watchdog can't fire. Iterate by tailing the TAP output for the *last*`# Running: <name>` line before exit, add that name to the skip list, and re-run. Be conservative when wildcarding a family: many `Family_*` fixtures pass even when one member crashes.
177
177
178
-
**4. Expected pass count.** As of 2026-05-20, an AOT run of the suite produces roughly: 735 fixtures total → 149 skipped, 544 passed, ~42 failed (assertion failures + initialization crashes for fixtures already past the skip filter). The non-AOT run on the same commit is 735/735 pass.
178
+
**4. Expected pass count.** As of 2026-05-20, an AOT run of the suite produces roughly: 735 fixtures total → 193 skipped, ~542 passed, 0 failed. The skip list covers fixtures that exercise subsystems documented as not-yet-AOT-clean in [`docs/aot-support.md`](docs/aot-support.md) (PropertyGrid auto-discovery, devtools/MCP, UseObservable on POCOs, anonymous-type localization args, theme resource lookup, XAML-metadata-dependent control hosting). When you fix one of those subsystems, drop the corresponding entries from `DefaultAotSkipPatterns`. The non-AOT run on the same commit is 735/735 pass.
Copy file name to clipboardExpand all lines: docs/aot-support.md
+2Lines changed: 2 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -34,6 +34,8 @@ These subsystems compile cleanly with `IsAotCompatible=true` (the warnings are s
34
34
|**Localization with anonymous-type args**|`t.Message(Loc.X, new { count = 3 })` reflects over the anonymous type to build the ICU args dictionary. Use `t.Message(Loc.X, new Dictionary<string, object> { ["count"] = 3 })` under AOT. | Issue #70|
35
35
|**Navigation state JSON**|`NavigationHandle` serializes deep-link state via `JsonSerializer` without a source-generated context. Custom types that ride through navigation state will fail to serialize under AOT. | Issue #70|
36
36
|**Component discovery (`ReactorApp.Run<TApp>` reflection paths)**| The instantiation of `TApp` itself is annotated and works. The devtools-only `--list-components` enumeration scans `Assembly.GetTypes`; that path is gated to non-AOT builds. | Issue #70|
37
+
|**Theme resource lookup (`Theme.X`, `ThemeRef.Resolve`)**|`ThemeRef.Resolve` walks `Application.Current.Resources` + its merged/theme dictionaries. The token records (`Theme.Accent`, `Theme.PrimaryText`, …) construct fine, but at runtime the `XamlControlsResources` entries that `ReactorApplication.xaml` brings in aren't fully populated under AOT — `Resolve` returns `null` for keys that exist under the JIT. Brushes applied via `.Foreground(Theme.X)` will fall back to control defaults. | Issue #70|
38
+
|**XAML-metadata-dependent controls (`NavigationView`, `TabView`, `TemplateBinding`)**| A subset of WinUI controls and the XAML-template parser need richer `IXamlMetadataProvider` data than what's reachable through trimmed AOT publish. `NavigationView` / `TabView` won't even reach `Mount` in this state, and `{TemplateBinding}` against custom DPs can't resolve the DP descriptor (see issue #142 reproductions). Use simpler containers under AOT. | Issue #70|
0 commit comments