Assertions
Hone provides a rich set of assertions for verifying command output, exit codes, timing, and file contents.
Output Assertions
stdout
Assert on the standard output of the most recent (or named) command:
# Contains - check if output includes text
ASSERT stdout contains "success"
ASSERT stdout contains "Hello, World!"
# Equals - exact match
ASSERT stdout == "exact output"
ASSERT stdout != "not this"
# Regex - pattern matching
ASSERT stdout matches /version \d+\.\d+\.\d+/
ASSERT stdout matches /hello world/i # case insensitive
stderr
Assert on the standard error output:
# Same operators work for stderr
ASSERT stderr contains "warning"
ASSERT stderr == ""
ASSERT stderr matches /error: .*/
Raw Output
By default, ANSI escape codes are stripped from output. Use .raw to preserve them:
# Access raw output with ANSI codes preserved
ASSERT stdout.raw contains "\x1b[32m"
Exit Code Assertions
Verify the exit status of commands:
# Check exit status
ASSERT exit_code == 0
ASSERT exit_code != 0
ASSERT exit_code == 42
Duration Assertions
Check how long a command took to execute. Supports ms, s, m, and h units:
# Time constraints
ASSERT duration < 500ms
ASSERT duration <= 2s
ASSERT duration < 1m
File Assertions
Existence
Check if a file exists:
# Check file existence
ASSERT file "output.txt" exists
ASSERT file "/tmp/cache.json" exists
Content
Assert on file contents using the same operators as stdout:
# Check file contents
ASSERT file "config.yaml" contains "enabled: true"
ASSERT file "output.json" == '{"status": "ok"}'
ASSERT file "version.txt" matches /v\d+\.\d+/
Named Run Targets
When you have multiple RUN commands, use named runs to assert on specific ones:
RUN compile: gcc main.c -o main
RUN test: ./main --test
# Reference specific commands
ASSERT compile.exit_code == 0
ASSERT compile.stdout contains "compiled"
ASSERT compile.duration < 30s
ASSERT test.exit_code == 0
ASSERT test.stdout contains "PASSED"
Assertion Operators
| Operator | Description | Example |
|---|---|---|
contains | Substring match | stdout contains "ok" |
== | Exact equality | exit_code == 0 |
!= | Not equal | stderr != "" |
matches | Regex pattern | stdout matches /v\d+/ |
exists | File exists | file "x.txt" exists |
< | Less than | duration < 5s |
<= | Less than or equal | duration <= 10s |
Next Steps: Learn about configuration options in the Configuration guide.