TermUI.Test.EventSimulator (TermUI v0.2.0)

View Source

Event simulation for testing TUI components.

Provides functions to create synthetic events for testing without actual terminal input. Events can be injected into components or test harnesses.

Usage

# Simulate key press
event = EventSimulator.simulate_key(:enter)
event = EventSimulator.simulate_key(:a, char: "a")
event = EventSimulator.simulate_key(:c, modifiers: [:ctrl])

# Simulate mouse click
event = EventSimulator.simulate_click(10, 20)
event = EventSimulator.simulate_click(10, 20, :right)

# Simulate typing a string
events = EventSimulator.simulate_type("Hello")

# Simulate sequence of keys
events = EventSimulator.simulate_sequence([:tab, :tab, :enter])

Summary

Functions

Simulates a mouse click event.

Simulates a mouse double-click event.

Simulates a mouse drag event.

Simulates a focus gained event.

Simulates a focus lost event.

Simulates pressing a function key.

Simulates a key press event.

Simulates a mouse move event.

Simulates navigation keys.

Simulates a paste event.

Simulates a terminal resize event.

Simulates a scroll down event.

Simulates a scroll up event.

Simulates a sequence of key presses.

Simulates common keyboard shortcuts.

Simulates typing a string.

Functions

simulate_click(x, y, button \\ :left, opts \\ [])

@spec simulate_click(integer(), integer(), TermUI.Event.Mouse.button(), keyword()) ::
  TermUI.Event.Mouse.t()

Simulates a mouse click event.

Examples

EventSimulator.simulate_click(10, 20)
EventSimulator.simulate_click(10, 20, :right)
EventSimulator.simulate_click(10, 20, :left, modifiers: [:ctrl])

simulate_double_click(x, y, button \\ :left, opts \\ [])

@spec simulate_double_click(
  integer(),
  integer(),
  TermUI.Event.Mouse.button(),
  keyword()
) ::
  TermUI.Event.Mouse.t()

Simulates a mouse double-click event.

simulate_drag(x, y, button \\ :left, opts \\ [])

Simulates a mouse drag event.

simulate_focus_gained(opts \\ [])

@spec simulate_focus_gained(keyword()) :: TermUI.Event.Focus.t()

Simulates a focus gained event.

simulate_focus_lost(opts \\ [])

@spec simulate_focus_lost(keyword()) :: TermUI.Event.Focus.t()

Simulates a focus lost event.

simulate_function_key(n)

@spec simulate_function_key(1..12) :: TermUI.Event.Key.t()

Simulates pressing a function key.

Examples

EventSimulator.simulate_function_key(1)  # F1
EventSimulator.simulate_function_key(12) # F12

simulate_key(key, opts \\ [])

@spec simulate_key(
  atom(),
  keyword()
) :: TermUI.Event.Key.t()

Simulates a key press event.

Options

  • :char - Character produced by key (e.g., "a" for :a key)
  • :modifiers - List of modifiers ([:ctrl], [:shift], [:alt], etc.)
  • :timestamp - Event timestamp (defaults to current time)

Examples

EventSimulator.simulate_key(:enter)
EventSimulator.simulate_key(:a, char: "a")
EventSimulator.simulate_key(:c, modifiers: [:ctrl])

simulate_move(x, y, opts \\ [])

@spec simulate_move(integer(), integer(), keyword()) :: TermUI.Event.Mouse.t()

Simulates a mouse move event.

Examples

EventSimulator.simulate_move(15, 25)

simulate_navigation(direction, opts \\ [])

@spec simulate_navigation(
  atom(),
  keyword()
) :: TermUI.Event.Key.t()

Simulates navigation keys.

Examples

EventSimulator.simulate_navigation(:up)
EventSimulator.simulate_navigation(:page_down)
EventSimulator.simulate_navigation(:home)

simulate_paste(content, opts \\ [])

@spec simulate_paste(
  String.t(),
  keyword()
) :: TermUI.Event.Paste.t()

Simulates a paste event.

simulate_resize(width, height, opts \\ [])

@spec simulate_resize(pos_integer(), pos_integer(), keyword()) ::
  TermUI.Event.Resize.t()

Simulates a terminal resize event.

simulate_scroll_down(x, y, opts \\ [])

@spec simulate_scroll_down(integer(), integer(), keyword()) :: TermUI.Event.Mouse.t()

Simulates a scroll down event.

simulate_scroll_up(x, y, opts \\ [])

@spec simulate_scroll_up(integer(), integer(), keyword()) :: TermUI.Event.Mouse.t()

Simulates a scroll up event.

simulate_sequence(keys)

@spec simulate_sequence([atom() | {atom(), keyword()}]) :: [TermUI.Event.Key.t()]

Simulates a sequence of key presses.

Each element can be an atom (key name) or {key, opts} tuple.

Examples

events = EventSimulator.simulate_sequence([:tab, :tab, :enter])
events = EventSimulator.simulate_sequence([
  {:a, char: "a"},
  :tab,
  :enter
])

simulate_shortcut(atom)

@spec simulate_shortcut(atom()) :: TermUI.Event.Key.t()

Simulates common keyboard shortcuts.

Examples

EventSimulator.simulate_shortcut(:copy)   # Ctrl+C
EventSimulator.simulate_shortcut(:paste)  # Ctrl+V
EventSimulator.simulate_shortcut(:save)   # Ctrl+S
EventSimulator.simulate_shortcut(:quit)   # Ctrl+Q

simulate_type(string, opts \\ [])

@spec simulate_type(
  String.t(),
  keyword()
) :: [TermUI.Event.Key.t()]

Simulates typing a string.

Returns a list of key events, one for each character.

Examples

events = EventSimulator.simulate_type("Hello")
length(events)
# => 5