884 tests. CI is green.

5 min read
smalltalkvirtual-machinesmalltalk-from-scratch

All 884 tests pass on GitHub Actions.

The CI pipeline runs in three stages. First: build. Second: the test matrix — bytecodes, primitives, compiler, class hierarchy, display pipeline — running in parallel across eight test classes in headless mode with a virtual framebuffer. Third: a save/restore workflow that boots the image, runs a snapshot, restores from it, and verifies the display redraws correctly.

The four failures that were blocking CI all last week were in the Level 1 runtime tests: exception handling edge cases where on:do: wasn’t correctly unwinding the context stack when the handler block itself raised a signal. Fixed by tracking the handler context boundary explicitly and clearing it on normal exit.

The headless display was the other problem. GitHub Actions runners don’t have a display. The original WinForms display factory hard-required a Win32 window, which requires a message loop, which requires a display. Refactored the display factory to accept a null display target — the interpreter runs, the display primitives execute, but nothing actually paints. Tests that exercise display state verify the Canvas draw calls were made; tests that exercise the image verify object state. No window required.

884 is not a round number because the test suite grew organically: each new feature got its own test class and test methods got added as bugs were found. There are 884 of them now because that’s how many there are.

Test count: 884. CI time: 4m 12s. Failures: 0. Save/restore job: passing.