.. _module-pw_console-testing:

=====================
Manual Test Procedure
=====================

``pw_console`` is a Terminal based user interface which is difficult to
completely test in an automated fashion. Unit tests that don't depend on the
user interface are preferred but not always possible. For those situations
manual tests should be added here to validate expected behavior.

Run in Test Mode
================

Begin each section below by running the console in test mode:

.. code-block:: shell

  touch /tmp/empty.yaml
  env PW_CONSOLE_CONFIG_FILE='/tmp/empty.yaml' pw console --test-mode

Test Sections
=============

Log Pane: Basic Actions
^^^^^^^^^^^^^^^^^^^^^^^

.. list-table::
   :widths: 5 45 45 5
   :header-rows: 1

   * - #
     - Test Action
     - Expected Result
     - ✅

   * - 1
     - Click the :guilabel:`Fake Device` window title
     - Log pane is focused
     - |checkbox|

   * - 2
     - In the main menu enable :guilabel:`[File] > Log Table View > Hide Date`
     - The time column shows only the time. E.g. ``09:34:53``.
     - |checkbox|

   * - 3
     - In the main menu turn off :guilabel:`[File] > Log Table View > Hide Date`
     - The time column shows the date and time. E.g. ``20220208 09:34:53``.
     - |checkbox|

   * - 4
     - Click :guilabel:`Search` on the log toolbar
     - | The search bar appears
       | The cursor should appear after the ``/``
     - |checkbox|

   * - 5
     - Press :kbd:`Ctrl-c`
     - The search bar disappears
     - |checkbox|

   * - 6
     - Click :guilabel:`Follow` on the log toolbar
     - Logs stop following
     - |checkbox|

   * - 7
     - Click :guilabel:`Table` on the log toolbar
     - Table mode is disabled
     - |checkbox|

   * - 8
     - Click :guilabel:`Wrap` on the log toolbar
     - Line wrapping is enabled
     - |checkbox|

   * - 9
     - Click :guilabel:`Clear` on the log toolbar
     - | All log lines are erased
       | Follow mode is on
       | New lines start appearing
     - |checkbox|

   * - 10
     - | Mouse drag across a few log messages
     - | Entire logs are highlighted and a dialog
       | box appears in the upper right
     - |checkbox|

   * - 11
     - | Without scrolling mouse drag across a set
       | of different log messages.
     - | The old selection disappears leaving only the new selection.
     - |checkbox|

   * - 12
     - | Click the :guilabel:`Cancel` button
       | in the selection dialog box.
     - | The selection and the dialog box disappears.
     - |checkbox|

   * - 13
     - | Mouse drag across a few log messages and
       | click the :guilabel:`Save as File` button.
     - | The save as file dialog appears with the
       | :guilabel:`[x] Selected Lines Only` opion checked.
     - |checkbox|

   * - 14
     - | Press :kbd:`Cancel`
     - | The save dialog closes
     - |checkbox|

   * - 15
     - | Click the :guilabel:`Save` button on the log toolbar.
       | A dialog appears prompting for a file.
     - | The current working directory should be pre-filled.
     - |checkbox|

   * - 16
     - | Check :guilabel:`[x] Table Formatting`
       | Uncheck :guilabel:`[ ] Selected Lines Only`
       | Add ``/log.txt`` to the end and press :kbd:`Enter`
       | Click the menu :guilabel:`[File] > Exit`
     - | In the terminal run ``cat log.txt`` to verify logs
       | were saved correctly.
     - |checkbox|

Log Pane: Search and Filtering
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

.. list-table::
   :widths: 5 45 45 5
   :header-rows: 1

   * - #
     - Test Action
     - Expected Result
     - ✅

   * - 1
     - Click the :guilabel:`Fake Device` window title
     - Log pane is focused
     - |checkbox|

   * - 2
     - Press :kbd:`/`
     - | The search bar appears
       | The cursor should appear after the ``/``
     - |checkbox|

   * - 3
     - | Type ``lorem``
       | Press :kbd:`Enter`
     - | Logs stop following
       | ``Lorem`` words are highlighted in cyan
       | The cursor on the first log message
       | The search toolbar is un-focused and displays:
       | ``Match 1 / 10`` where the second number (the total match count)
       | increases once every 10 seconds when new logs arrive.
     - |checkbox|

   * - 4
     - Press :kbd:`Ctrl-f`
     - | The search bar is focused
       | The cursor should appear after ``/Lorem``
     - |checkbox|

   * - 5
     - Press :kbd:`Ctrl-c`
     - | The search bar disappears
       | ``Lorem`` words are no longer highlighted
     - |checkbox|

   * - 6
     - Press :kbd:`/`
     - | The search bar appears and is empty
       | The cursor should appear after ``/``
     - |checkbox|

   * - 7
     - Click :guilabel:`Matcher:` once
     - ``Matcher:STRING`` is shown
     - |checkbox|

   * - 8
     - | Type ``[=``
       | Press :kbd:`Enter`
     - | All instances of ``[=`` should be highlighted
       | The cursor should be on log message 2
     - |checkbox|

   * - 7
     - Press :kbd:`/`
     - | The search bar is focused
       | The cursor should appear after the ``/[=``
     - |checkbox|

   * - 8
     - Press :kbd:`Ctrl-c`
     - | The search bar disappears
       | ``[=`` matches are no longer highlighted
     - |checkbox|

   * - 9
     - Press :kbd:`/`
     - | The search bar appears and is empty
       | The cursor should appear after ``/``
     - |checkbox|

   * - 10
     - Press :kbd:`Up`
     - The text ``[=`` should appear in the search input field
     - |checkbox|

   * - 11
     - Click :guilabel:`Search Enter`
     - | All instances of ``[=`` should be highlighted
       | The cursor should be on log message 12
     - |checkbox|

   * - 12
     - Click :guilabel:`Add Filter`
     - | A ``Filters`` toolbar will appear
       | showing the new filter: ``<\[= (X)>``.
       | Only log messages matching ``[=`` appear in the logs.
       | Follow mode is enabled
     - |checkbox|

   * - 13
     - | Press :kbd:`/`
     - | The search bar appears and is empty
       | The cursor should appear after ``/``
     - |checkbox|

   * - 14
     - | Type ``# 1`` and press :kbd:`Enter`
       | Click :guilabel:`Add Filter`
     - | The ``Filters`` toolbar shows a new filter: ``<\#\ 1 (X)>``.
       | Only log messages matching both filters will appear in the logs.
     - |checkbox|

   * - 15
     - | Click the first :guilabel:`(X)`
       | in the filter toolbar.
     - | The ``Filters`` toolbar shows only one filter: ``<\#\ 1 (X)>``.
       | More log messages will appear in the log window
       | Lines all end in: ``# 1.*``
     - |checkbox|

   * - 16
     - Click :guilabel:`Clear Filters`
     - | The ``Filters`` toolbar will disappear.
       | All log messages will be shown in the log window.
     - |checkbox|

   * - 17
     - | Press :kbd:`/`
       | Type ``BAT``
       | Click :guilabel:`Column` until ``Column:Module`` is shown
       | Press :kbd:`Enter`
     - | Logs stop following
       | ``BAT`` is highlighted in cyan
       | The cursor on the 3rd log message
       | The search toolbar is un-focused and displays:
       | ``Match 1 / 10`` where the second number (the total match count)
     - |checkbox|

   * - 18
     - Press :kbd:`n`
     - | ``BAT`` is highlighted in cyan
       | The cursor on the 7th log message and is in the center of the
       | log window (not the bottom).
     - |checkbox|

   * - 19
     - Click :guilabel:`Jump to new matches`
     - | :guilabel:`Jump to new matches` is checked and every 5 seconds
       | the cursor jumps to the latest matching log message.
     - |checkbox|

   * - 20
     - Click :guilabel:`Follow`
     - | :guilabel:`Jump to new matches` is unchecked
       | The cursor jumps to every new log message once a second.
     - |checkbox|

   * - 21
     - | Click :guilabel:`Add Filter`
     - | The Filters toolbar appears with one filter: ``<module BAT (X)>``
       | Only logs with Module matching ``BAT`` appear.
     - |checkbox|

   * - 22
     - Click :guilabel:`Clear Filters`
     - | The ``Filters`` toolbar will disappear.
       | All log messages will be shown in the log window.
     - |checkbox|

   * - 23
     - | Press :kbd:`/`
       | Type ``BAT``
       | Click :guilabel:`Invert`
     - ``[x] Invert`` setting is shown
     - |checkbox|

   * - 24
     - | Press :kbd:`Enter` then click :guilabel:`Add Filter`
     - | The Filters toolbar appears
       | One filter is shown: ``<NOT module BAT (X)>``
       | Only logs with Modules other than ``BAT`` appear.
     - |checkbox|

Help Windows
^^^^^^^^^^^^

.. list-table::
   :widths: 5 45 45 5
   :header-rows: 1

   * - #
     - Test Action
     - Expected Result
     - ✅

   * - 1
     - Click the :guilabel:`[Help] > User Guide`
     - | Window appears showing the user guide with
       | RST formatting and syntax highlighting
     - |checkbox|

   * - 2
     - Press :guilabel:`q`
     - Window is hidden
     - |checkbox|

   * - 3
     - Click the :guilabel:`[Help] > Keyboard Shortcuts`
     - Window appears showing the keybind list
     - |checkbox|

   * - 4
     - Press :kbd:`F1`
     - Window is hidden
     - |checkbox|

   * - 5
     - Click the :guilabel:`[Help] > Console Test Mode Help`
     - | Window appears showing help with content
       | ``Welcome to the Pigweed Console Test Mode!``
     - |checkbox|

   * - 6
     - Click the :guilabel:`Close q` button.
     - Window is hidden
     - |checkbox|

Floating Windows
^^^^^^^^^^^^^^^^

.. list-table::
   :widths: 5 45 45 5
   :header-rows: 1

   * - #
     - Test Action
     - Expected Result
     - ✅

   * - 1
     - Start ``pw-console --test-mode`` press ``Ctrl-p``
     - The :guilabel:`Menu Items` command runner dialog appears.
     - |checkbox|

   * - 2
     - Type :kbd:`exit` and press :kbd:`enter`.
     - The console exits.
     - |checkbox|

   * - 3
     - Restart ``pw-console`` but without the ``--test-mode`` option.
     - Console starts up with ONLY the Python Results and Repl windows.
     - |checkbox|

   * - 4
     - Press ``Ctrl-p``
     - The :guilabel:`Menu Items` command runner dialog appears.
     - |checkbox|


Window Management
^^^^^^^^^^^^^^^^^

.. list-table::
   :widths: 5 45 45 5
   :header-rows: 1

   * - #
     - Test Action
     - Expected Result
     - ✅

   * - 1
     - | Click the :guilabel:`Fake Device` window title
     - Log pane is focused
     - |checkbox|

   * - 2
     - | Click the menu :guilabel:`Windows > #: Fake Device...`
       | Click :guilabel:`Duplicate pane`
     - | 3 panes are visible:
       | Log pane on top
       | Repl pane in the middle
       | Log pane on the bottom
     - |checkbox|

   * - 3
     - | Click the :guilabel:`Python Input` window title
     - Python Input pane is focused
     - |checkbox|

   * - 4
     - Click the :guilabel:`View > Move Window Down`
     - | 3 panes are visible:
       | Log pane on top
       | Log pane in the middle
       | Repl pane on the bottom
     - |checkbox|

   * - 5
     - Click the :guilabel:`View > Move Window Down` again
     - | Nothing changes
       | Windows remain in the same order
     - |checkbox|

   * - 6
     - Click the :guilabel:`View > Move Window Up`
     - | 3 panes are visible:
       | Log pane on top
       | Repl pane in the middle
       | Log pane on the bottom
     - |checkbox|

   * - 7
     - | Click the menu :guilabel:`Windows > #: Fake Device...`
       | Click :guilabel:`Remove pane`
     - | 2 panes are visible:
       | Repl pane on the top
       | Log pane on bottom
     - |checkbox|

   * - 8
     - | Click the :guilabel:`Python Input`
       | window title
     - Repl pane is focused
     - |checkbox|

   * - 9
     - | Hold the keys :guilabel:`Alt- -`
       | `Alt` and `Minus`
     - Repl pane shrinks
     - |checkbox|

   * - 10
     - Hold the keys :guilabel:`Alt-=`
     - Repl pane enlarges
     - |checkbox|

   * - 11
     - | Click the menu :guilabel:`Windows > 1: Logs fake_device.1`
       | Click :guilabel:`Duplicate pane`
     - | 3 panes are visible:
       | 2 Log panes on the left
       | Repl pane on the right
     - |checkbox|

   * - 12
     - | Click the left top :guilabel:`Logs` window title
     - Log pane is focused
     - |checkbox|

   * - 13
     - Click the :guilabel:`View > Move Window Right`
     - | 3 panes are visible:
       | 1 Log panes on the left
       | 1 Log and Repl pane on the right
     - |checkbox|

   * - 14
     - | Click the menu :guilabel:`Windows > Column 2 View Modes`
       | Then click :guilabel:`[ ] Tabbed Windows`
     - | 2 panes are visible:
       | 1 Log panes on the left
       | 1 Log panes on the right
       | A tab bar on the top of the right side
       | `Logs fake_device.1` is highlighted
     - |checkbox|

   * - 15
     - | On the right side tab bar
       | Click :guilabel:`Python Repl`
     - | 2 panes are visible:
       | 1 Log pane on the left
       | 1 Repl pane on the right
       | `Python Repl` is highlighted
       | on the tab bar
     - |checkbox|

Mouse Window Resizing
^^^^^^^^^^^^^^^^^^^^^

.. list-table::
   :widths: 5 45 45 5
   :header-rows: 1

   * - #
     - Test Action
     - Expected Result
     - ✅

   * - 1
     - | Click the :guilabel:`Fake Device` window
     - Log pane is focused
     - |checkbox|

   * - 2
     - | Left click and hold the :guilabel:`-==-` of that window
       | Drag the mouse up and down
     - This log pane is resized
     - |checkbox|

   * - 3
     - | Left click and hold the :guilabel:`-==-`
       | of the :guilabel:`PwConsole Debug` window
       | Drag the mouse up and down
     - | The :guilabel:`PwConsole Debug` should NOT be focused
       | The window should be resized as expected
     - |checkbox|

   * - 4
     - Click the :guilabel:`View > Move Window Right`
     - :guilabel:`Fake Device` should appear in a right side split
     - |checkbox|

   * - 5
     - | Left click and hold anywhere on the vertical separator
       | Drag the mouse left and right
     - | The window splits should be resized as expected
     - |checkbox|

   * - 6
     - Click the :guilabel:`View > Balance Window Sizes`
     - Window split sizes should reset to equal widths
     - |checkbox|

   * - 7
     - | Focus on the :guilabel:`Python Repl` window
       | Click the :guilabel:`View > Move Window Left`
     - | :guilabel:`Python Repl` should appear in a left side split
       | There should be 3 vertical splits in total
     - |checkbox|

   * - 8
     - | Left click and hold anywhere on the vertical separator
       | between the first two splits (Python Repl and the middle split)
       | Drag the mouse left and right
     - | The first two window splits should be resized.
       | The 3rd split size should not change.
     - |checkbox|

Copy Paste
^^^^^^^^^^

.. list-table::
   :widths: 5 45 45 5
   :header-rows: 1

   * - #
     - Test Action
     - Expected Result
     - ✅

   * - 1
     - | Click the :guilabel:`Fake Device` window title
     - Log pane is focused
     - |checkbox|

   * - 2
     - | Mouse drag across a few log messages
     - | A dialog appears in the upper right showing
       | the number of lines selected and
       | buttons for :guilabel:`Cancel`, :guilabel:`Select All`,
       | :guilabel:`Save as File`, and :guilabel:`Copy`.
     - |checkbox|

   * - 3
     - | Click the :guilabel:`Copy` button
     - | Try pasting into a separate text editor
       | Log lines like this should be pasted:
       | ``20:07:25  INF  APP    Log message [    =     ] # 25``
       | ``20:07:25  INF  RADIO  Log message [     =    ] # 26``
     - |checkbox|

   * - 4
     - | Copy this text in your browser or
       | text editor to the system clipboard:
       | ``print('copy paste test!')``
     - | Click the :guilabel:`Python Input` window title
       | Press :kbd:`Ctrl-v`
       | ``print('copy paste test!')`` appears
       | after the prompt.
     - |checkbox|

   * - 5
     - Press :kbd:`Enter`
     - | This appears in Python Results:
       | ``In [1]: print('copy paste test!')``
       | ``copy paste test!``
     - |checkbox|

   * - 6
     - | Click :guilabel:`Ctrl-Alt-c -> Copy Output`
       | on the Python Results toolbar
       | Try pasting into a separate text editor
     - | The contents of the Python Results
       | are in the system clipboard.
     - |checkbox|

   * - 7
     - Click the :guilabel:`Python Results` window title
     - | Python Results is focused with cursor
       | appearing below the last line
     - |checkbox|

   * - 8
     - | Click and drag over ``copy paste text``
       | highlighting won't appear until
       | after the mouse button is released
     - | ``copy paste text`` is highlighted
     - |checkbox|

   * - 9
     - | Press :kbd:`Ctrl-c`
       | Try pasting into a separate text editor
     - | ``copy paste text`` should appear (and is
       | in the system clipboard)
     - |checkbox|

   * - 10
     - Click the :guilabel:`Python Input` window title
     - Python Input is focused
     - |checkbox|

   * - 11
     - | Type ``print('hello there')`` into the Python input.
       | Mouse drag select that text
       | Press :kbd:`Ctrl-c`
     - | The selection should disappear.
       | Try pasting into a separate text editor, the paste should
       | match the text you drag selected.
     - |checkbox|

Incremental Stdout
^^^^^^^^^^^^^^^^^^

.. list-table::
   :widths: 5 45 45 5
   :header-rows: 1

   * - #
     - Test Action
     - Expected Result
     - ✅

   * - 1
     - | Click the :guilabel:`Python Input` window title
     - Python Input pane is focused
     - |checkbox|

   * - 2
     - | Enter the following text and hit enter twice
       | ``import time``
       | ``for i in range(10):``
       | ``print(i); time.sleep(1)``
     - | ``Running...`` should appear in the python with
       | increasing integers incrementally appearing above
       | (not all at once after a delay).
     - |checkbox|

Python Input & Output
^^^^^^^^^^^^^^^^^^^^^

.. list-table::
   :widths: 5 45 45 5
   :header-rows: 1

   * - #
     - Test Action
     - Expected Result
     - ✅

   * - 1
     - Click the ``Logs`` window title
     - Log pane is focused
     - |checkbox|

   * - 2
     - Click empty whitespace in the ``Python Results`` window
     - Python Results pane is focused
     - |checkbox|

   * - 3
     - Click empty whitespace in the ``Python Input`` window
     - Python Input pane is focused
     - |checkbox|

   * - 4
     - | Enter the following text and press :kbd:`Enter` to run
       | ``[i for i in __builtins__ if not i.startswith('_')]``
     - | The results should appear pretty printed
       | with each list element on it's own line:
       |
       |   >>> [i for i in __builtins__ if not i.startswith('_')]
       |   [ 'abs',
       |     'all',
       |     'any',
       |     'ascii'
       |
     - |checkbox|

   * - 5
     - | Enter the following text and press :kbd:`Enter` to run
       | ``globals()``
     - | The results should appear pretty printed
     - |checkbox|

   * - 6
     - | With the cursor over the Python Output,
       | use the mouse wheel to scroll up and down.
     - | The output window should be able to scroll all
       | the way to the beginning and end of the buffer.
     - |checkbox|

Early Startup
^^^^^^^^^^^^^

.. list-table::
   :widths: 5 45 45 5
   :header-rows: 1

   * - #
     - Test Action
     - Expected Result
     - ✅

   * - 1
     - | Start the pw console test mode by
       | running ``pw console --test-mode``
     - | Console starts up showing an ``All Logs`` window.
     - |checkbox|

   * - 2
     - | Click the :guilabel:`All Logs` window title
       | Press :kbd:`g` to jump to the top of the log history
     - | These log messages should be at the top:
       | ``DBG Adding plugins...``
       | ``DBG Starting prompt_toolkit full-screen application...``
       | ``DBG pw_console test-mode starting...``
       | ``DBG pw_console.PwConsoleEmbed init complete``
     - |checkbox|

Quit Confirmation Dialog
^^^^^^^^^^^^^^^^^^^^^^^^

.. list-table::
   :widths: 5 45 45 5
   :header-rows: 1

   * - #
     - Test Action
     - Expected Result
     - ✅

   * - 1
     - | Press :kbd:`Ctrl-d`
     - | The quit dialog appears
     - |checkbox|

   * - 2
     - | Press :kbd:`n`
     - | The quit dialog disappears
     - |checkbox|

   * - 3
     - | Press :kbd:`Ctrl-d`
     - | The quit dialog appears
     - |checkbox|

   * - 4
     - | Press :kbd:`y`
     - | The console exits
     - |checkbox|

   * - 5
     - | Restart the console and
       | Press :kbd:`Ctrl-d` twice in quick succession.
     - | The console exits
     - |checkbox|

   * - 6
     - | Restart the console and Press :kbd:`F1`
     - | The help window appears
     - |checkbox|

   * - 7
     - | Press :kbd:`Ctrl-d`
     - | The quit dialog appears on top of the help window
     - |checkbox|

   * - 8
     - | Press :kbd:`n`
     - | The quit dialog disappears and the help window is
       | back in focus.
     - |checkbox|

   * - 9
     - | Press :kbd:`q`
     - | The help window disappears and the Python Input is in focus.
     - |checkbox|

   * - 10
     - | Type some text into the Python Input.
       | Press :kbd:`Home` or move the cursor to the
       | beginning of the text you just entered.
       | Press :kbd:`Ctrl-d`
     - | Each :kbd:`Ctrl-d` press deletes one character
     - |checkbox|

   * - 11
     - | Press :kbd:`Ctrl-c` to clear the Python Input text
       | Press :kbd:`Ctrl-d`
     - | The quit dialog appears.
     - |checkbox|

Add note to the commit message
==============================

Add a ``Testing:`` line to your commit message and mention the steps
executed. For example:

.. code-block:: text

   Testing: Log Pane Steps 1-6

.. |checkbox| raw:: html

    <input type="checkbox">
