Caldarium
End-to-end GUI testing for Toga applications.
Inspired by Detox, but built on a key insight: a Toga app under test is already running CPython, so the test client is a pure-Python agent running on the app's own event loop — not a foreign native client. This makes ~80% of the framework platform-independent; only the per-platform driver (native interaction) and launch orchestration differ.
Status: pre-alpha, under active rebuild. See
caldarium-replan-2026.mdfor the architecture and roadmap. The previous implementation lives underlegacy/and is superseded.
Architecture (MVP)
Two components: the pytest host (runs a WebSocket server + the test API) and an in-app
agent (asyncio tasks injected into the app). The host resolves elements against Toga's
interface layer (app.widgets), and a per-platform driver performs real interactions
(modelled on Toga's own backend test probes).
pytest host ──WebSocket(JSON)──► in-app agent (on the app's RubiconEventLoop)
By/element/expect resolver (app.widgets) + cocoa driver
Develop & test (macOS)
python3 -m venv .venv && source .venv/bin/activate
pip install -e ".[dev]"
pytest -v # launches the sample Toga app and drives it
The sample app lives in samples/calsample/. Tests target it via the caldarium
fixture:
from caldarium import By, expect
async def test_counter(caldarium):
app = await caldarium("calsample.app:main")
await app.element(By.id("increment")).tap()
await expect(app.element(By.id("count"))).to_have_text("Count: 1")
License
BSD 3-Clause.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file caldarium-0.1.0.tar.gz.
File metadata
- Download URL: caldarium-0.1.0.tar.gz
- Upload date:
- Size: 38.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/7.0.0 CPython/3.13.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
dc7ee20cb1917d5473acd63f55d29237ed4b92478a6d9f596e795cea44b74e47
|
|
| MD5 |
60b86873538d8c01449356c26852232b
|
|
| BLAKE2b-256 |
47be6ab23c3c211eb807f8e58f66dacca2e78666abc5ca29af003b1a7323fe2f
|
File details
Details for the file caldarium-0.1.0-py3-none-any.whl.
File metadata
- Download URL: caldarium-0.1.0-py3-none-any.whl
- Upload date:
- Size: 41.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/7.0.0 CPython/3.13.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
74a730c1f82b1aaa59e8e543dec3f8ad2874788408627d3bc1d85ddecbc3218f
|
|
| MD5 |
c41b3baaefc86105b5a75ece09155c15
|
|
| BLAKE2b-256 |
6f7aba7f4737d054e81f6daaacb1f4ee27706a391e910aabc2f14ec410c081fa
|