Skip to content

Commit

Permalink
Fixing pilot times argument
Browse files Browse the repository at this point in the history
  • Loading branch information
darrenburns committed Dec 16, 2024
1 parent 5cb6cd0 commit 43654de
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 1 deletion.
3 changes: 2 additions & 1 deletion src/textual/pilot.py
Original file line number Diff line number Diff line change
Expand Up @@ -442,7 +442,8 @@ async def _post_mouse_events(
# the driver works and emits a click event.
kwargs = message_arguments
if mouse_event_cls is Click:
kwargs["chain"] = chain
kwargs = {**kwargs, "chain": chain}

widget_at, _ = app.get_widget_at(*offset)
event = mouse_event_cls(**kwargs)
# Bypass event processing in App.on_event. Because App.on_event
Expand Down
26 changes: 26 additions & 0 deletions tests/test_pilot.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
from string import punctuation
from typing import Type

import pytest

from textual import events, work
from textual._on import on
from textual.app import App, ComposeResult
from textual.binding import Binding
from textual.containers import Center, Middle
Expand Down Expand Up @@ -424,3 +426,27 @@ def on_button_pressed(self):
assert not pressed
await pilot.click(button)
assert pressed


@pytest.mark.parametrize("times", [1, 2, 3])
async def test_click_times(times: int):
"""Test that Pilot.click() can be called with a `times` argument."""

events_received: list[Type[events.Event]] = []

class TestApp(App[None]):
def compose(self) -> ComposeResult:
yield Label("Click counter")

@on(events.Click)
@on(events.MouseDown)
@on(events.MouseUp)
def on_label_clicked(self, event: events.Event):
events_received.append(event.__class__)

app = TestApp()
async with app.run_test() as pilot:
await pilot.click(Label, times=times)
assert (
events_received == [events.MouseDown, events.MouseUp, events.Click] * times
)

0 comments on commit 43654de

Please sign in to comment.