.. _module-pw_console-testing:

=====================
Manual Test Procedure
=====================
.. pigweed-module-subpage::
   :name: pw_console

``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
       | ``locals()``
     - | The results should appear pretty printed
     - |checkbox|

   * - 6
     - | Enter the following text and press :kbd:`Enter` to run
       | ``zzzz = 'test'``
     - | No new results are shown
       | The previous ``locals()`` output does not show ``'zzzz': 'test'``
     - |checkbox|

   * - 7
     - | Enter the following text and press :kbd:`Enter` to run
       | ``locals()``
     - | The output ends with ``'zzzz': 'test'}``
     - |checkbox|

   * - 8
     - | 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|

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

   * - 10
     - | 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|

Web Log Viewer
^^^^^^^^^^^^^^

.. 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 ``Fake Device`` window.
     - |checkbox|

   * - 2
     - | Focus on ``Fake Device`` panel and press :kbd:`Shift-o` to enable web log viewer
     - | This should hide log stream in the console and automatically copy the
       | URL to log viewer to the clipboard
     - |checkbox|
   * - 3
     - | Focus on the ``Fake Keys`` panel with a filter applied. Then press
       | :kbd:`Shift-o` to enable another web log viewer for that new pane. Open the
       | new URL in Chrome
     - | This log viewer should have filters pre-applied
     - |checkbox|
   * - 4
     - | Press :kbd:`Shift-o` again on both log panes to disable web log view
     - | This should re-enable log stream in console and stop streaming logs to
       | web view
     - |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">
