.. _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 Repl` window title
     - Python Repl 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 Repl`
       | 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 Repl` 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 Repl` window title
     - Python Repl 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 Repl` window title
     - Python Repl 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 Repl & 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 Repl`` window
     - Python Repl 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 Results,
       | 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|

   * - 7
     - Click empty whitespace in the ``Python Repl`` window
     - Python Repl pane is focused
     - |checkbox|

   * - 8
     - | Enter the following text and press :kbd:`Enter` to run
       | ``!ls``
     - | 1. Shell output of running the ``ls`` command should appear in the
       | results window.
       | 2. A new log window pane should appear titled ``Shell Output``.
       | 3. The Shell Output window should show the command that was run and the
       | output:
       | ``$ ls``
       | ``activate.bat``
       | ``activate.sh``
     - |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 Repl is in focus.
     - |checkbox|

   * - 10
     - | Type some text into the Python Repl.
       | 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 Repl 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">
