Class: Plushie::Test::Case

Inherits:
Minitest::Test
  • Object
show all
Includes:
Helpers
Defined in:
lib/plushie/test/case.rb

Overview

Minitest test case base class for Plushie app testing.

Inherits from Minitest::Test. Includes all test helpers and manages session lifecycle automatically.

Examples:

class CounterTest < Plushie::Test::Case
  app Counter

  def test_clicking_increment_updates_counter
    click("#increment")
    assert_text "#count", "Count: 1"
  end

  def test_double_increment
    click("#increment")
    click("#increment")
    assert_text "#count", "Count: 2"
  end
end

Class Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Class Attribute Details

.plushie_app_classClass (readonly)

Returns the declared app class.

Returns:

  • (Class)

    the declared app class



38
39
40
# File 'lib/plushie/test/case.rb', line 38

def plushie_app_class
  @plushie_app_class
end

Class Method Details

.app(klass) ⇒ Object

Declare the app class for this test case.

Parameters:

  • klass (Class)

    app class (includes Plushie::App)



33
34
35
# File 'lib/plushie/test/case.rb', line 33

def app(klass)
  @plushie_app_class = klass
end

Instance Method Details

#advance_frame(timestamp) ⇒ Object Originally defined in module Helpers

Advance the renderer's animation clock to the given timestamp. Causes the renderer to evaluate all active animations at that point in time, potentially triggering transition_complete events.

Parameters:

  • timestamp (Integer)

    animation clock time in milliseconds

#assert_a11y(selector, expected) ⇒ Object Originally defined in module Helpers

Assert that a widget's resolved a11y matches expected values. Reads through #resolved_a11y so inferred defaults compose with the author's explicit overrides.

Parameters:

  • selector (String)
  • expected (Hash)

    expected key-value pairs

#assert_exists(selector) ⇒ Object Originally defined in module Helpers

Assert that a widget exists.

Parameters:

  • selector (String)

#assert_model(expected) ⇒ Object Originally defined in module Helpers

Assert model equals expected value.

Parameters:

  • expected (Object)

#assert_no_diagnosticsObject Originally defined in module Helpers

Assert that no diagnostics have been emitted by the renderer. Clears the diagnostic list after checking.

Raises:

  • (Minitest::Assertion)

    if diagnostics are pending

#assert_not_exists(selector) ⇒ Object Originally defined in module Helpers

Assert that a widget does NOT exist.

Parameters:

  • selector (String)

#assert_text(selector, expected) ⇒ Object Originally defined in module Helpers

Assert that a widget contains the expected text.

Parameters:

  • selector (String)
  • expected (String)

#await_async(tag, timeout = 5000) ⇒ :ok Originally defined in module Helpers

Wait for a tagged async task to complete. Async commands run synchronously on the mock backend, so this returns immediately after warning that there is nothing to wait for. Other test backends also currently complete async work before this method is needed, but do not warn.

Parameters:

  • tag (Symbol)

    the async command tag

  • timeout (Integer) (defaults to: 5000)

    max wait in milliseconds (unused)

Returns:

  • (:ok)

#click(selector) ⇒ Object Originally defined in module Helpers

Click a button widget.

Parameters:

  • selector (String)

    "#id" or "text content"

#click_element(canvas_id, element_id) ⇒ Object Originally defined in module Helpers

Click a canvas element by injecting a synthetic canvas_element_click event.

Parameters:

  • canvas_id (String)

    the canvas widget ID (e.g. "#chart")

  • element_id (String)

    the element ID within the canvas

#find(selector) ⇒ Hash? Originally defined in module Helpers

Find a widget by selector. Returns the node hash or nil.

Parameters:

  • selector (String)

Returns:

  • (Hash, nil)

#find!(selector) ⇒ Hash Originally defined in module Helpers

Find a widget by selector. Raises if not found.

Parameters:

  • selector (String)

Returns:

  • (Hash)

#find_by_label(label) ⇒ Hash? Originally defined in module Helpers

Find a widget by accessibility label.

Parameters:

  • label (String)

Returns:

  • (Hash, nil)

#find_by_role(role) ⇒ Hash? Originally defined in module Helpers

Find a widget by accessibility role.

Parameters:

  • role (Symbol, String)

    e.g. :button, "textbox"

Returns:

  • (Hash, nil)

#find_focusedHash? Originally defined in module Helpers

Find the currently focused widget.

Returns:

  • (Hash, nil)

#focus_element(canvas_id, element_id) ⇒ Object Originally defined in module Helpers

Focus a canvas element via scoped path. Use Command.focus("canvas/element") for the same effect.

Parameters:

  • canvas_id (String)

    the canvas widget ID

  • element_id (String)

    the element ID within the canvas

#modelObject Originally defined in module Helpers

Returns current app model.

Returns:

  • (Object)

    current app model

#move_to(x, y) ⇒ Object Originally defined in module Helpers

Move cursor to coordinates.

Parameters:

  • x (Numeric)
  • y (Numeric)

#plushie_start(app_class, **opts) ⇒ Object Originally defined in module Helpers

Start a test session manually.

Parameters:

  • app_class (Class)

#plushie_stopObject Originally defined in module Helpers

Stop the current test session.

#press(key) ⇒ Object Originally defined in module Helpers

Press a key (key down).

Parameters:

  • key (String)

#register_effect_stub(kind, response) ⇒ Object Originally defined in module Helpers

Register an effect stub with the renderer. The renderer will return the given response immediately for any effect of the given kind.

Parameters:

  • kind (Symbol, String)

    effect kind (e.g. :clipboard_read)

  • response (Object)

    the canned response to return

#release(key) ⇒ Object Originally defined in module Helpers

Release a key (key up).

Parameters:

  • key (String)

#resetObject Originally defined in module Helpers

Reset the session to initial state.

#resolved_a11y(selector) ⇒ Hash Originally defined in module Helpers

Return the resolved a11y hash for a widget.

Layers render-pipeline inference (placeholder -> description for text-entry widgets, alt -> label for media widgets) on top of the normalized a11y prop so tests see what assistive technology will see. Normalizer-populated defaults (role, implicit radio_group, required/validation projections, tooltip described_by) are already carried on the tree.

Parameters:

  • selector (String)

Returns:

  • (Hash)

    symbol-keyed a11y map (empty if no state)

#save_screenshot(name, **opts) ⇒ Hash Originally defined in module Helpers

Capture a screenshot and save as PNG to test/screenshots/.

Parameters:

  • name (String)

    screenshot name

Returns:

  • (Hash)

    screenshot response

#screenshot(name, **opts) ⇒ Hash Originally defined in module Helpers

Capture a screenshot.

Parameters:

  • name (String)

Returns:

  • (Hash)

#select(selector, value) ⇒ Object Originally defined in module Helpers

Select a value from pick_list, combo_box, or radio.

Parameters:

  • selector (String)
  • value (String)

#sessionSession Originally defined in module Helpers

Returns the current test session.

Returns:

  • (Session)

    the current test session

#setupObject

Setup: start a test session with the declared app.



42
43
44
45
46
47
48
49
50
51
# File 'lib/plushie/test/case.rb', line 42

def setup
  super
  app_class = self.class.plushie_app_class
  raise "No app declared. Add `app MyApp` to your test class." unless app_class

  pool = Plushie::Test.pool
  session_id = pool.register
  @_plushie_session = Session.new(app_class, pool: pool, session_id: session_id)
  Thread.current[:_plushie_test_session] = @_plushie_session
end

#skip_transitionsObject Originally defined in module Helpers

Skip all active renderer-side transitions to completion.

Advances the animation clock far enough to complete any reasonable animation. Triggers transition_complete events for any animations with on_complete tags.

#slide(selector, value) ⇒ Object Originally defined in module Helpers

Slide a slider to a value.

Parameters:

  • selector (String)
  • value (Numeric)

#submit(selector) ⇒ Object Originally defined in module Helpers

Submit a text_input (press Enter).

Parameters:

  • selector (String)

#teardownObject

Teardown: assert no diagnostics, stop the session, and clean up.



54
55
56
57
58
59
# File 'lib/plushie/test/case.rb', line 54

def teardown
  assert_no_diagnostics if @_plushie_session
  @_plushie_session&.stop
  Thread.current[:_plushie_test_session] = nil
  super
end

#text(element) ⇒ String? Originally defined in module Helpers

Extract text content from an element hash.

Parameters:

  • element (Hash)

Returns:

  • (String, nil)

#toggle(selector) ⇒ Object Originally defined in module Helpers

Toggle a checkbox or toggler.

Parameters:

  • selector (String)

#treeHash Originally defined in module Helpers

Returns current tree from the renderer.

Returns:

  • (Hash)

    current tree from the renderer

#tree_hash(name) ⇒ Hash Originally defined in module Helpers

Capture a structural tree hash.

Parameters:

  • name (String)

Returns:

  • (Hash)

#type_key(key) ⇒ Object Originally defined in module Helpers

Type a key (press + release).

Parameters:

  • key (String)

#type_text(selector, text) ⇒ Object Originally defined in module Helpers

Type text into a text_input or text_editor.

Parameters:

  • selector (String)
  • text (String)

#unregister_effect_stub(kind) ⇒ Object Originally defined in module Helpers

Remove a previously registered effect stub.

Parameters:

  • kind (Symbol, String)

    effect kind