Arlecchino.Testing
2026.8.5
dotnet add package Arlecchino.Testing --version 2026.8.5
NuGet\Install-Package Arlecchino.Testing -Version 2026.8.5
<PackageReference Include="Arlecchino.Testing" Version="2026.8.5" />
<PackageVersion Include="Arlecchino.Testing" Version="2026.8.5" />
<PackageReference Include="Arlecchino.Testing" />
paket add Arlecchino.Testing --version 2026.8.5
#r "nuget: Arlecchino.Testing, 2026.8.5"
#:package Arlecchino.Testing@2026.8.5
#addin nuget:?package=Arlecchino.Testing&version=2026.8.5
#tool nuget:?package=Arlecchino.Testing&version=2026.8.5

The headless host for applications built on the Arlecchino terminal UI framework. It builds the whole application — container, views, navigation, modals, commands — against a terminal in memory, and draws a frame when a test asks for one. There is nothing to wait for and nothing to race against.
Quick start
dotnet add package Arlecchino.Testing
using var app = new ArlecchinoTestHost(configure: arlecchino =>
arlecchino.AddGeneratedViews().StartAt(ViewKind.Default));
Assert.Contains("hello", app.Frame(), StringComparison.Ordinal);
app.Press(ConsoleKey.A);
Assert.Equal(ViewKind.About, app.Navigator.CurrentRoute);
The configure delegate is the same ArlecchinoBuilder the real application configures, so a test
starts at any route, registers a fake in place of a service, or takes the application's own
registration wholesale. The size of the terminal is new ArlecchinoTestHost(width: 120, height: 40),
and every test framework works — the host is a plain disposable class.
What a test can reach
- The frame as text.
Frame()is the screen as a string;FrameLines(),FrameContainsandFrameLineContainingask about it without picking the string apart, andStyles()lists the ANSI sequences the frame carried, so a test can assert on colour without matching escape codes. - Input.
Presswithshift,altandcontrol,Typefor text,ClickandScrollfor the mouse, andReadFromTerminalto feed a raw escape sequence the way a terminal would. - Time that does not pass on its own.
Advance(TimeSpan.FromSeconds(1))moves the clock rather than sleeping, and the next frame shows what fell due — timeouts, notification lifetimes and work on a timer are tested in microseconds. - The application itself.
Services,Navigator,State,HistoryandOptionsare the live objects, so a test can undo, inspect a store or drive navigation directly. - The terminal.
Terminalis aFakeTerminal:Writtenis everything sent to it,Copiedis what the application put on the clipboard, and its size can be changed mid-test to check a resize. FrameText—WithoutStyles,Lines,BoxWidthand the regexes behind them, for assertions written against the plain text of a frame.
Packages
| Package | Contents |
|---|---|
Arlecchino.Core |
Surface, Theme, TermColor, KeyText, IArlecchinoTerminal — the renderer, no DI — and atoms with their undo history |
Arlecchino |
views, navigation, modals, commands, hosting, DI, async stores, and the generator |
Arlecchino.Pictures |
PNG, JPEG, BMP, Netpbm, QOI and Targa read into pixels |
Arlecchino.Testing |
this one — the headless host applications write their tests against |
They ship together and always carry the same version. This package belongs in the test project only.
Links
Documentation · Testing · Changelog · Source and issues
MIT.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net10.0
- Arlecchino (>= 2026.8.5)
- Microsoft.Extensions.DependencyInjection (>= 10.0.11)
-
net8.0
- Arlecchino (>= 2026.8.5)
- Microsoft.Extensions.DependencyInjection (>= 10.0.11)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 2026.8.5 | 50 | 8/19/2026 |
| 2026.8.4 | 93 | 8/16/2026 |
| 2026.8.3 | 85 | 8/16/2026 |
| 2026.8.2 | 85 | 8/16/2026 |
| 2026.8.1 | 98 | 8/14/2026 |
| 5.0.0 | 118 | 8/8/2026 |
| 4.0.0 | 148 | 8/3/2026 |
| 3.1.0 | 110 | 8/2/2026 |
| 3.0.0 | 119 | 8/1/2026 |
| 2.13.0 | 100 | 7/29/2026 |
| 2.12.0 | 94 | 7/29/2026 |
| 2.11.0 | 97 | 7/29/2026 |
| 2.10.0 | 100 | 7/29/2026 |
| 2.9.0 | 98 | 7/29/2026 |
| 2.8.0 | 101 | 7/29/2026 |
| 2.7.0 | 91 | 7/29/2026 |
| 2.6.1 | 93 | 7/29/2026 |
| 2.6.0 | 92 | 7/28/2026 |
| 2.5.0 | 99 | 7/28/2026 |
| 2.4.1 | 95 | 7/28/2026 |
What changed in this version: https://github.com/The1fEst/Arlecchino/blob/master/CHANGELOG.md#202685