plushie/testing
Test facade for plushie applications.
Provides a unified test API that works across all backends: mock (pure Gleam), pooled_mock (shared renderer), headless (software rendering), and windowed (GPU + display).
Backend selection
Set PLUSHIE_TEST_BACKEND to choose the backend:
PLUSHIE_TEST_BACKEND=pooled_mock gleam test
PLUSHIE_TEST_BACKEND=headless gleam test
Default: mock (pure Gleam, no renderer binary needed).
Usage
let session = testing.start(my_app())
let session = testing.click(session, "increment")
let assert option.Some(el) = testing.find(session, "count")
should.equal(element.text(el), option.Some("Count: 1"))
testing.stop(session)
Values
pub fn click(
session: session.TestSession(model, event.Event),
id: String,
) -> session.TestSession(model, event.Event)
Simulate a click on a widget by ID.
pub fn element_children(
el: element.Element,
) -> List(element.Element)
Get an element’s children.
pub fn element_prop(
el: element.Element,
key: String,
) -> option.Option(node.PropValue)
Get a prop value from an element.
pub fn element_text(el: element.Element) -> option.Option(String)
Extract text content from an element.
pub fn find(
session: session.TestSession(model, event.Event),
id: String,
) -> option.Option(element.Element)
Find an element by ID in the session’s current tree.
pub fn model(
session: session.TestSession(model, event.Event),
) -> model
Return the current model from the session.
pub fn select(
session: session.TestSession(model, event.Event),
id: String,
value: String,
) -> session.TestSession(model, event.Event)
Simulate selection on a widget by ID.
pub fn send_event(
session: session.TestSession(model, event.Event),
event: event.Event,
) -> session.TestSession(model, event.Event)
Dispatch a raw event through the update cycle.
pub fn slide(
session: session.TestSession(model, event.Event),
id: String,
value: Float,
) -> session.TestSession(model, event.Event)
Simulate a slider change by ID.
pub fn start(
app: app.App(model, event.Event),
) -> session.TestSession(model, event.Event)
Start a test session for a simple app (msg = Event).
The backend is selected via PLUSHIE_TEST_BACKEND:
- (unset/
mock): pure Gleam, no renderer binary pooled_mock: sharedplushie --mockprocessheadless:plushie --headlesswith software rendering
pub fn stop(
session: session.TestSession(model, event.Event),
) -> Nil
Stop the test session and release resources.
No-op for mock backend. Releases the renderer session for pooled and headless backends.
pub fn submit(
session: session.TestSession(model, event.Event),
id: String,
) -> session.TestSession(model, event.Event)
Simulate form submission on a widget by ID.
pub fn toggle(
session: session.TestSession(model, event.Event),
id: String,
) -> session.TestSession(model, event.Event)
Simulate a checkbox/toggler toggle by ID.
pub fn tree(
session: session.TestSession(model, event.Event),
) -> node.Node
Return the current normalized tree from the session.
pub fn type_text(
session: session.TestSession(model, event.Event),
id: String,
text: String,
) -> session.TestSession(model, event.Event)
Simulate text input on a widget by ID.