Testing
The Mythetech.Hermes.Testing package provides comprehensive testing infrastructure for Hermes desktop applications. It includes mock backends, recording capabilities, and fluent assertions for verifying window behavior without requiring a real native window.
Installation
bash
dotnet add package Mythetech.Hermes.TestingQuick Start
csharp
using Hermes.Testing;
using Hermes.Testing.Assertions;
using Xunit;
public class MyWindowTests
{
[Fact]
public void Window_ConfiguresCorrectly()
{
using var testWindow = new TestableHermesWindow()
.SetTitle("My App")
.SetSize(800, 600);
testWindow.Show();
HermesAssert.HasTitle(testWindow.Backend, "My App");
HermesAssert.HasSize(testWindow.Backend, 800, 600);
}
}Key Components
| Component | Purpose |
|---|---|
TestableHermesWindow | Test-friendly wrapper with fluent configuration |
RecordingWindowBackend | Mock backend that records all interactions |
WindowBackendRecording | Query interface for recorded data |
HermesAssert | Fluent assertion library |
What You Can Test
Window Configuration
csharp
using var testWindow = new TestableHermesWindow()
.SetTitle("Test Window")
.SetSize(1024, 768)
.SetPosition(100, 100)
.SetResizable(true)
.SetChromeless(false);
testWindow.Show();
HermesAssert.WasShown(testWindow.Backend);Event Handlers
csharp
var maximizedCalled = false;
using var testWindow = new TestableHermesWindow()
.OnMaximized(() => maximizedCalled = true);
testWindow.Show();
testWindow.SimulateMaximize();
Assert.True(maximizedCalled);
HermesAssert.WasMaximized(testWindow.Recording);WebView Communication
csharp
string? receivedMessage = null;
using var testWindow = new TestableHermesWindow()
.OnWebMessage(msg => receivedMessage = msg);
testWindow.Show();
testWindow.SimulateWebMessage("""{"type":"test","data":"hello"}""");
Assert.Equal("""{"type":"test","data":"hello"}""", receivedMessage);
HermesAssert.ReceivedWebMessageMatching(testWindow.Recording, "hello");Custom Titlebar Drag Regions
csharp
using var testWindow = new TestableHermesWindow()
.SetCustomTitleBar(true);
testWindow.Show();
testWindow.SimulateDragRegionClick();
HermesAssert.DetectedDragRegionClick(testWindow.Recording);Navigation
csharp
using var testWindow = new TestableHermesWindow()
.Load("https://example.com");
testWindow.Show();
HermesAssert.NavigatedTo(testWindow.Recording, "https://example.com");Event Simulation
The testing framework allows you to simulate various window events:
| Method | Description |
|---|---|
SimulateWebMessage(message) | Simulate receiving a message from JavaScript |
SimulateResize(width, height) | Simulate window resize |
SimulateMove(x, y) | Simulate window move |
SimulateMaximize() | Simulate window maximize |
SimulateRestore() | Simulate restore from maximized |
SimulateFocusIn() | Simulate window gaining focus |
SimulateFocusOut() | Simulate window losing focus |
SimulateDragRegionClick() | Simulate click on drag region |
SimulateDragRegionDoubleClick() | Simulate double-click on drag region |
SimulateNonDragRegionClick() | Simulate click on non-drag region |
Topics
- TestableHermesWindow — Fluent test wrapper API
- Recording Backend — Mock backend and simulation
- Assertions — HermesAssert reference
- Examples — Common testing patterns
