dotnet / dotnet/maui

Hot Reload Test Gauntlet

Open
#35,404 0 comments 0 reactions 0 assignees View on GitHub
s/triaged
Dominant language
C#
Stars
23.3k
Forks
2k
Avg merge
1d 15h
Merged PRs (30d)
290

Description

## Summary

A comprehensive test matrix for Hot Reload scenarios across all tooling surfaces. Every scenario should do something reasonable and present status/errors clearly to the user — both in the tool/IDE **and** in the app.

## Context

Part of the Hot Reload DX epic: https://github.com/dotnet/maui/issues/35229

## Scenarios

| # | Scenario | Description |
|---|----------|-------------|
| 1 | **MUH is called at all** | Confirm a valid edit invokes registered `MetadataUpdateHandler.UpdateApplication` |
| 2 | **MUH is called repeatedly** | Confirm multiple sequential valid edits invoke MUH each time |
| 3 | **Label text literal change** | Change `` and verify live update on the current page |
| 4 | **CollectionView DataTemplate text change** | Update text inside a `DataTemplate` and verify visible items update |
| 5 | **CollectionView DataTemplate structure change** | Add/remove a template child element and verify UI updates correctly |
| 6 | **ResourceDictionary value change** | Update a `StaticResource` (for example color/font size) and verify live update |
| 7 | **Style setter change** | Change implicit/explicit style setter and verify existing controls update |
| 8 | **No navigation required** | Verify changes are visible without navigating away and back |
| 9 | **C# syntax error** | Introduce a compile error in C# code during a hot reload session |
| 10 | **XAML syntax error** | Introduce malformed XAML during a hot reload session |
| 11 | **Rude edit (unsupported change)** | Make a change that [EnC does not support](https://learn.microsoft.com/en-us/visualstudio/debugger/supported-code-changes-csharp?view=visualstudio) (for example, change method signature, add/remove base class) |
| 12 | **MetadataUpdateHandler throws unhandled exception** | A registered `MetadataUpdateHandler` throws during `UpdateApplication` |
| 13 | **Connection to tool/IDE lost** | Ctrl+C `dotnet watch`, or close IDE while app is running |
| 14 | **Device disconnected / emulator closed** | Physical device unplugged or emulator process killed mid-session |

## Tooling Matrix

Each scenario above should be tested in:

| Tool | Error/status in tool/IDE | Error/status in app |
|------|--------------------------|---------------------|
| **Visual Studio** | ☐ | ☐ |
| **Visual Studio Code** | ☐ | ☐ |
| **`dotnet watch`** | ☐ | ☐ |

## Full Matrix

| Scenario | VS — Tool | VS — App | VS Code — Tool | VS Code — App | dotnet watch — CLI | dotnet watch — App |
|----------|-----------|----------|----------------|---------------|--------------------|--------------------|
| 1. MUH is called at all | ☐ | ☐ | ☐ | ☐ | ☐ | ☐ |
| 2. MUH is called repeatedly | ☐ | ☐ | ☐ | ☐ | ☐ | ☐ |
| 3. Label text literal change | ☐ | ☐ | ☐ | ☐ | ☐ | ☐ |
| 4. CollectionView DataTemplate text change | ☐ | ☐ | ☐ | ☐ | ☐ | ☐ |
| 5. CollectionView DataTemplate structure change | ☐ | ☐ | ☐ | ☐ | ☐ | ☐ |
| 6. ResourceDictionary value change | ☐ | ☐ | ☐ | ☐ | ☐ | ☐ |
| 7. Style setter change | ☐ | ☐ | ☐ | ☐ | ☐ | ☐ |
| 8. No navigation required | ☐ | ☐ | ☐ | ☐ | ☐ | ☐ |
| 9. C# syntax error | ☐ | ☐ | ☐ | ☐ | ☐ | ☐ |
| 10. XAML syntax error | ☐ | ☐ | ☐ | ☐ | ☐ | ☐ |
| 11. Rude edit | ☐ | ☐ | ☐ | ☐ | ☐ | ☐ |
| 12. Handler throws exception | ☐ | ☐ | ☐ | ☐ | ☐ | ☐ |
| 13. Connection lost | ☐ | ☐ | ☐ | ☐ | ☐ | ☐ |
| 14. Device disconnected | ☐ | ☐ | ☐ | ☐ | ☐ | ☐ |

## Expectations

For every cell in the matrix:
- The result should be **surfaced clearly** to the user (not silently swallowed)
- The tool/IDE should show diagnostics or status (error list, terminal output, notification)
- The app should show a visible indicator (for example, hot reload status badge or error overlay)
- The app should **remain stable** — no crash, no hang
- Recovery should be possible (fix the error and reload again, or restart)

Contributor guide

Open the contributing guide

Research direction

Start by reading the linked Hot Reload DX epic and use the 14 listed scenarios as the test plan. Exercise each scenario across Visual Studio, Visual Studio Code, and dotnet watch, recording tool and app status. Done means every matrix cell has a clear result, visible diagnostics or status, app stability, and a documented recovery path.

Written by the indexing model from the issue text.

Assessment

Tech stack
csharp, vscode
Domain
developer-experience, testing, tooling
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.