Skip to main content

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.md for the architecture and roadmap. The previous implementation lives under legacy/ 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

caldarium-0.1.0.tar.gz (38.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

caldarium-0.1.0-py3-none-any.whl (41.2 kB view details)

Uploaded Python 3

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

Hashes for caldarium-0.1.0.tar.gz
Algorithm Hash digest
SHA256 dc7ee20cb1917d5473acd63f55d29237ed4b92478a6d9f596e795cea44b74e47
MD5 60b86873538d8c01449356c26852232b
BLAKE2b-256 47be6ab23c3c211eb807f8e58f66dacca2e78666abc5ca29af003b1a7323fe2f

See more details on using hashes here.

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

Hashes for caldarium-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 74a730c1f82b1aaa59e8e543dec3f8ad2874788408627d3bc1d85ddecbc3218f
MD5 c41b3baaefc86105b5a75ece09155c15
BLAKE2b-256 6f7aba7f4737d054e81f6daaacb1f4ee27706a391e910aabc2f14ec410c081fa

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page