xref: /aosp_15_r20/external/pigweed/pw_console/testing.rst (revision 61c4878ac05f98d0ceed94b57d316916de578985)
1.. _module-pw_console-testing:
2
3=====================
4Manual Test Procedure
5=====================
6.. pigweed-module-subpage::
7   :name: pw_console
8
9``pw_console`` is a Terminal based user interface which is difficult to
10completely test in an automated fashion. Unit tests that don't depend on the
11user interface are preferred but not always possible. For those situations
12manual tests should be added here to validate expected behavior.
13
14Run in Test Mode
15================
16
17Begin each section below by running the console in test mode:
18
19.. code-block:: shell
20
21   touch /tmp/empty.yaml
22   env PW_CONSOLE_CONFIG_FILE='/tmp/empty.yaml' pw console --test-mode
23
24Test Sections
25=============
26
27Log Pane: Basic Actions
28^^^^^^^^^^^^^^^^^^^^^^^
29
30.. list-table::
31   :widths: 5 45 45 5
32   :header-rows: 1
33
34   * - #
35     - Test Action
36     - Expected Result
37     - ✅
38
39   * - 1
40     - Click the :guilabel:`Fake Device` window title
41     - Log pane is focused
42     - |checkbox|
43
44   * - 2
45     - In the main menu enable :guilabel:`[File] > Log Table View > Hide Date`
46     - The time column shows only the time. E.g. ``09:34:53``.
47     - |checkbox|
48
49   * - 3
50     - In the main menu turn off :guilabel:`[File] > Log Table View > Hide Date`
51     - The time column shows the date and time. E.g. ``20220208 09:34:53``.
52     - |checkbox|
53
54   * - 4
55     - Click :guilabel:`Search` on the log toolbar
56     - | The search bar appears
57       | The cursor should appear after the ``/``
58     - |checkbox|
59
60   * - 5
61     - Press :kbd:`Ctrl-c`
62     - The search bar disappears
63     - |checkbox|
64
65   * - 6
66     - Click :guilabel:`Follow` on the log toolbar
67     - Logs stop following
68     - |checkbox|
69
70   * - 7
71     - Click :guilabel:`Table` on the log toolbar
72     - Table mode is disabled
73     - |checkbox|
74
75   * - 8
76     - Click :guilabel:`Wrap` on the log toolbar
77     - Line wrapping is enabled
78     - |checkbox|
79
80   * - 9
81     - Click :guilabel:`Clear` on the log toolbar
82     - | All log lines are erased
83       | Follow mode is on
84       | New lines start appearing
85     - |checkbox|
86
87   * - 10
88     - | Mouse drag across a few log messages
89     - | Entire logs are highlighted and a dialog
90       | box appears in the upper right
91     - |checkbox|
92
93   * - 11
94     - | Without scrolling mouse drag across a set
95       | of different log messages.
96     - | The old selection disappears leaving only the new selection.
97     - |checkbox|
98
99   * - 12
100     - | Click the :guilabel:`Cancel` button
101       | in the selection dialog box.
102     - | The selection and the dialog box disappears.
103     - |checkbox|
104
105   * - 13
106     - | Mouse drag across a few log messages and
107       | click the :guilabel:`Save as File` button.
108     - | The save as file dialog appears with the
109       | :guilabel:`[x] Selected Lines Only` opion checked.
110     - |checkbox|
111
112   * - 14
113     - | Press :kbd:`Cancel`
114     - | The save dialog closes
115     - |checkbox|
116
117   * - 15
118     - | Click the :guilabel:`Save` button on the log toolbar.
119       | A dialog appears prompting for a file.
120     - | The current working directory should be pre-filled.
121     - |checkbox|
122
123   * - 16
124     - | Check :guilabel:`[x] Table Formatting`
125       | Uncheck :guilabel:`[ ] Selected Lines Only`
126       | Add ``/log.txt`` to the end and press :kbd:`Enter`
127       | Click the menu :guilabel:`[File] > Exit`
128     - | In the terminal run ``cat log.txt`` to verify logs
129       | were saved correctly.
130     - |checkbox|
131
132Log Pane: Search and Filtering
133^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
134
135.. list-table::
136   :widths: 5 45 45 5
137   :header-rows: 1
138
139   * - #
140     - Test Action
141     - Expected Result
142     - ✅
143
144   * - 1
145     - Click the :guilabel:`Fake Device` window title
146     - Log pane is focused
147     - |checkbox|
148
149   * - 2
150     - Press :kbd:`/`
151     - | The search bar appears
152       | The cursor should appear after the ``/``
153     - |checkbox|
154
155   * - 3
156     - | Type ``lorem``
157       | Press :kbd:`Enter`
158     - | Logs stop following
159       | ``Lorem`` words are highlighted in cyan
160       | The cursor on the first log message
161       | The search toolbar is un-focused and displays:
162       | ``Match 1 / 10`` where the second number (the total match count)
163       | increases once every 10 seconds when new logs arrive.
164     - |checkbox|
165
166   * - 4
167     - Press :kbd:`Ctrl-f`
168     - | The search bar is focused
169       | The cursor should appear after ``/Lorem``
170     - |checkbox|
171
172   * - 5
173     - Press :kbd:`Ctrl-c`
174     - | The search bar disappears
175       | ``Lorem`` words are no longer highlighted
176     - |checkbox|
177
178   * - 6
179     - Press :kbd:`/`
180     - | The search bar appears and is empty
181       | The cursor should appear after ``/``
182     - |checkbox|
183
184   * - 7
185     - Click :guilabel:`Matcher:` once
186     - ``Matcher:STRING`` is shown
187     - |checkbox|
188
189   * - 8
190     - | Type ``[=``
191       | Press :kbd:`Enter`
192     - | All instances of ``[=`` should be highlighted
193       | The cursor should be on log message 2
194     - |checkbox|
195
196   * - 7
197     - Press :kbd:`/`
198     - | The search bar is focused
199       | The cursor should appear after the ``/[=``
200     - |checkbox|
201
202   * - 8
203     - Press :kbd:`Ctrl-c`
204     - | The search bar disappears
205       | ``[=`` matches are no longer highlighted
206     - |checkbox|
207
208   * - 9
209     - Press :kbd:`/`
210     - | The search bar appears and is empty
211       | The cursor should appear after ``/``
212     - |checkbox|
213
214   * - 10
215     - Press :kbd:`Up`
216     - The text ``[=`` should appear in the search input field
217     - |checkbox|
218
219   * - 11
220     - Click :guilabel:`Search Enter`
221     - | All instances of ``[=`` should be highlighted
222       | The cursor should be on log message 12
223     - |checkbox|
224
225   * - 12
226     - Click :guilabel:`Add Filter`
227     - | A ``Filters`` toolbar will appear
228       | showing the new filter: ``<\[= (X)>``.
229       | Only log messages matching ``[=`` appear in the logs.
230       | Follow mode is enabled
231     - |checkbox|
232
233   * - 13
234     - | Press :kbd:`/`
235     - | The search bar appears and is empty
236       | The cursor should appear after ``/``
237     - |checkbox|
238
239   * - 14
240     - | Type ``# 1`` and press :kbd:`Enter`
241       | Click :guilabel:`Add Filter`
242     - | The ``Filters`` toolbar shows a new filter: ``<\#\ 1 (X)>``.
243       | Only log messages matching both filters will appear in the logs.
244     - |checkbox|
245
246   * - 15
247     - | Click the first :guilabel:`(X)`
248       | in the filter toolbar.
249     - | The ``Filters`` toolbar shows only one filter: ``<\#\ 1 (X)>``.
250       | More log messages will appear in the log window
251       | Lines all end in: ``# 1.*``
252     - |checkbox|
253
254   * - 16
255     - Click :guilabel:`Clear Filters`
256     - | The ``Filters`` toolbar will disappear.
257       | All log messages will be shown in the log window.
258     - |checkbox|
259
260   * - 17
261     - | Press :kbd:`/`
262       | Type ``BAT``
263       | Click :guilabel:`Column` until ``Column:Module`` is shown
264       | Press :kbd:`Enter`
265     - | Logs stop following
266       | ``BAT`` is highlighted in cyan
267       | The cursor on the 3rd log message
268       | The search toolbar is un-focused and displays:
269       | ``Match 1 / 10`` where the second number (the total match count)
270     - |checkbox|
271
272   * - 18
273     - Press :kbd:`n`
274     - | ``BAT`` is highlighted in cyan
275       | The cursor on the 7th log message and is in the center of the
276       | log window (not the bottom).
277     - |checkbox|
278
279   * - 19
280     - Click :guilabel:`Jump to new matches`
281     - | :guilabel:`Jump to new matches` is checked and every 5 seconds
282       | the cursor jumps to the latest matching log message.
283     - |checkbox|
284
285   * - 20
286     - Click :guilabel:`Follow`
287     - | :guilabel:`Jump to new matches` is unchecked
288       | The cursor jumps to every new log message once a second.
289     - |checkbox|
290
291   * - 21
292     - | Click :guilabel:`Add Filter`
293     - | The Filters toolbar appears with one filter: ``<module BAT (X)>``
294       | Only logs with Module matching ``BAT`` appear.
295     - |checkbox|
296
297   * - 22
298     - Click :guilabel:`Clear Filters`
299     - | The ``Filters`` toolbar will disappear.
300       | All log messages will be shown in the log window.
301     - |checkbox|
302
303   * - 23
304     - | Press :kbd:`/`
305       | Type ``BAT``
306       | Click :guilabel:`Invert`
307     - ``[x] Invert`` setting is shown
308     - |checkbox|
309
310   * - 24
311     - | Press :kbd:`Enter` then click :guilabel:`Add Filter`
312     - | The Filters toolbar appears
313       | One filter is shown: ``<NOT module BAT (X)>``
314       | Only logs with Modules other than ``BAT`` appear.
315     - |checkbox|
316
317Help Windows
318^^^^^^^^^^^^
319
320.. list-table::
321   :widths: 5 45 45 5
322   :header-rows: 1
323
324   * - #
325     - Test Action
326     - Expected Result
327     - ✅
328
329   * - 1
330     - Click the :guilabel:`[Help] > User Guide`
331     - | Window appears showing the user guide with
332       | RST formatting and syntax highlighting
333     - |checkbox|
334
335   * - 2
336     - Press :guilabel:`q`
337     - Window is hidden
338     - |checkbox|
339
340   * - 3
341     - Click the :guilabel:`[Help] > Keyboard Shortcuts`
342     - Window appears showing the keybind list
343     - |checkbox|
344
345   * - 4
346     - Press :kbd:`F1`
347     - Window is hidden
348     - |checkbox|
349
350   * - 5
351     - Click the :guilabel:`[Help] > Console Test Mode Help`
352     - | Window appears showing help with content
353       | ``Welcome to the Pigweed Console Test Mode!``
354     - |checkbox|
355
356   * - 6
357     - Click the :guilabel:`Close q` button.
358     - Window is hidden
359     - |checkbox|
360
361Floating Windows
362^^^^^^^^^^^^^^^^
363
364.. list-table::
365   :widths: 5 45 45 5
366   :header-rows: 1
367
368   * - #
369     - Test Action
370     - Expected Result
371     - ✅
372
373   * - 1
374     - Start ``pw-console --test-mode`` press ``Ctrl-p``
375     - The :guilabel:`Menu Items` command runner dialog appears.
376     - |checkbox|
377
378   * - 2
379     - Type :kbd:`exit` and press :kbd:`enter`.
380     - The console exits.
381     - |checkbox|
382
383   * - 3
384     - Restart ``pw-console`` but without the ``--test-mode`` option.
385     - Console starts up with ONLY the Python Results and Repl windows.
386     - |checkbox|
387
388   * - 4
389     - Press ``Ctrl-p``
390     - The :guilabel:`Menu Items` command runner dialog appears.
391     - |checkbox|
392
393
394Window Management
395^^^^^^^^^^^^^^^^^
396
397.. list-table::
398   :widths: 5 45 45 5
399   :header-rows: 1
400
401   * - #
402     - Test Action
403     - Expected Result
404     - ✅
405
406   * - 1
407     - | Click the :guilabel:`Fake Device` window title
408     - Log pane is focused
409     - |checkbox|
410
411   * - 2
412     - | Click the menu :guilabel:`Windows > #: Fake Device...`
413       | Click :guilabel:`Duplicate pane`
414     - | 3 panes are visible:
415       | Log pane on top
416       | Repl pane in the middle
417       | Log pane on the bottom
418     - |checkbox|
419
420   * - 3
421     - | Click the :guilabel:`Python Repl` window title
422     - Python Repl pane is focused
423     - |checkbox|
424
425   * - 4
426     - Click the :guilabel:`View > Move Window Down`
427     - | 3 panes are visible:
428       | Log pane on top
429       | Log pane in the middle
430       | Repl pane on the bottom
431     - |checkbox|
432
433   * - 5
434     - Click the :guilabel:`View > Move Window Down` again
435     - | Nothing changes
436       | Windows remain in the same order
437     - |checkbox|
438
439   * - 6
440     - Click the :guilabel:`View > Move Window Up`
441     - | 3 panes are visible:
442       | Log pane on top
443       | Repl pane in the middle
444       | Log pane on the bottom
445     - |checkbox|
446
447   * - 7
448     - | Click the menu :guilabel:`Windows > #: Fake Device...`
449       | Click :guilabel:`Remove pane`
450     - | 2 panes are visible:
451       | Repl pane on the top
452       | Log pane on bottom
453     - |checkbox|
454
455   * - 8
456     - | Click the :guilabel:`Python Repl`
457       | window title
458     - Repl pane is focused
459     - |checkbox|
460
461   * - 9
462     - | Hold the keys :guilabel:`Alt- -`
463       | `Alt` and `Minus`
464     - Repl pane shrinks
465     - |checkbox|
466
467   * - 10
468     - Hold the keys :guilabel:`Alt-=`
469     - Repl pane enlarges
470     - |checkbox|
471
472   * - 11
473     - | Click the menu :guilabel:`Windows > 1: Logs fake_device.1`
474       | Click :guilabel:`Duplicate pane`
475     - | 3 panes are visible:
476       | 2 Log panes on the left
477       | Repl pane on the right
478     - |checkbox|
479
480   * - 12
481     - | Click the left top :guilabel:`Logs` window title
482     - Log pane is focused
483     - |checkbox|
484
485   * - 13
486     - Click the :guilabel:`View > Move Window Right`
487     - | 3 panes are visible:
488       | 1 Log panes on the left
489       | 1 Log and Repl pane on the right
490     - |checkbox|
491
492   * - 14
493     - | Click the menu :guilabel:`Windows > Column 2 View Modes`
494       | Then click :guilabel:`[ ] Tabbed Windows`
495     - | 2 panes are visible:
496       | 1 Log panes on the left
497       | 1 Log panes on the right
498       | A tab bar on the top of the right side
499       | `Logs fake_device.1` is highlighted
500     - |checkbox|
501
502   * - 15
503     - | On the right side tab bar
504       | Click :guilabel:`Python Repl`
505     - | 2 panes are visible:
506       | 1 Log pane on the left
507       | 1 Repl pane on the right
508       | `Python Repl` is highlighted
509       | on the tab bar
510     - |checkbox|
511
512Mouse Window Resizing
513^^^^^^^^^^^^^^^^^^^^^
514
515.. list-table::
516   :widths: 5 45 45 5
517   :header-rows: 1
518
519   * - #
520     - Test Action
521     - Expected Result
522     - ✅
523
524   * - 1
525     - | Click the :guilabel:`Fake Device` window
526     - Log pane is focused
527     - |checkbox|
528
529   * - 2
530     - | Left click and hold the :guilabel:`-==-` of that window
531       | Drag the mouse up and down
532     - This log pane is resized
533     - |checkbox|
534
535   * - 3
536     - | Left click and hold the :guilabel:`-==-`
537       | of the :guilabel:`PwConsole Debug` window
538       | Drag the mouse up and down
539     - | The :guilabel:`PwConsole Debug` should NOT be focused
540       | The window should be resized as expected
541     - |checkbox|
542
543   * - 4
544     - Click the :guilabel:`View > Move Window Right`
545     - :guilabel:`Fake Device` should appear in a right side split
546     - |checkbox|
547
548   * - 5
549     - | Left click and hold anywhere on the vertical separator
550       | Drag the mouse left and right
551     - | The window splits should be resized as expected
552     - |checkbox|
553
554   * - 6
555     - Click the :guilabel:`View > Balance Window Sizes`
556     - Window split sizes should reset to equal widths
557     - |checkbox|
558
559   * - 7
560     - | Focus on the :guilabel:`Python Repl` window
561       | Click the :guilabel:`View > Move Window Left`
562     - | :guilabel:`Python Repl` should appear in a left side split
563       | There should be 3 vertical splits in total
564     - |checkbox|
565
566   * - 8
567     - | Left click and hold anywhere on the vertical separator
568       | between the first two splits (Python Repl and the middle split)
569       | Drag the mouse left and right
570     - | The first two window splits should be resized.
571       | The 3rd split size should not change.
572     - |checkbox|
573
574Copy Paste
575^^^^^^^^^^
576
577.. list-table::
578   :widths: 5 45 45 5
579   :header-rows: 1
580
581   * - #
582     - Test Action
583     - Expected Result
584     - ✅
585
586   * - 1
587     - | Click the :guilabel:`Fake Device` window title
588     - Log pane is focused
589     - |checkbox|
590
591   * - 2
592     - | Mouse drag across a few log messages
593     - | A dialog appears in the upper right showing
594       | the number of lines selected and
595       | buttons for :guilabel:`Cancel`, :guilabel:`Select All`,
596       | :guilabel:`Save as File`, and :guilabel:`Copy`.
597     - |checkbox|
598
599   * - 3
600     - | Click the :guilabel:`Copy` button
601     - | Try pasting into a separate text editor
602       | Log lines like this should be pasted:
603       | ``20:07:25  INF  APP    Log message [    =     ] # 25``
604       | ``20:07:25  INF  RADIO  Log message [     =    ] # 26``
605     - |checkbox|
606
607   * - 4
608     - | Copy this text in your browser or
609       | text editor to the system clipboard:
610       | ``print('copy paste test!')``
611     - | Click the :guilabel:`Python Repl` window title
612       | Press :kbd:`Ctrl-v`
613       | ``print('copy paste test!')`` appears
614       | after the prompt.
615     - |checkbox|
616
617   * - 5
618     - Press :kbd:`Enter`
619     - | This appears in Python Results:
620       | ``In [1]: print('copy paste test!')``
621       | ``copy paste test!``
622     - |checkbox|
623
624   * - 6
625     - | Click :guilabel:`Ctrl-Alt-c -> Copy Output`
626       | on the Python Results toolbar
627       | Try pasting into a separate text editor
628     - | The contents of the Python Results
629       | are in the system clipboard.
630     - |checkbox|
631
632   * - 7
633     - Click the :guilabel:`Python Results` window title
634     - | Python Results is focused with cursor
635       | appearing below the last line
636     - |checkbox|
637
638   * - 8
639     - | Click and drag over ``copy paste text``
640       | highlighting won't appear until
641       | after the mouse button is released
642     - | ``copy paste text`` is highlighted
643     - |checkbox|
644
645   * - 9
646     - | Press :kbd:`Ctrl-c`
647       | Try pasting into a separate text editor
648     - | ``copy paste text`` should appear (and is
649       | in the system clipboard)
650     - |checkbox|
651
652   * - 10
653     - Click the :guilabel:`Python Repl` window title
654     - Python Repl is focused
655     - |checkbox|
656
657   * - 11
658     - | Type ``print('hello there')`` into the Python input.
659       | Mouse drag select that text
660       | Press :kbd:`Ctrl-c`
661     - | The selection should disappear.
662       | Try pasting into a separate text editor, the paste should
663       | match the text you drag selected.
664     - |checkbox|
665
666Incremental Stdout
667^^^^^^^^^^^^^^^^^^
668
669.. list-table::
670   :widths: 5 45 45 5
671   :header-rows: 1
672
673   * - #
674     - Test Action
675     - Expected Result
676     - ✅
677
678   * - 1
679     - | Click the :guilabel:`Python Repl` window title
680     - Python Repl pane is focused
681     - |checkbox|
682
683   * - 2
684     - | Enter the following text and hit enter twice
685       | ``import time``
686       | ``for i in range(10):``
687       | ``print(i); time.sleep(1)``
688     - | ``Running...`` should appear in the python with
689       | increasing integers incrementally appearing above
690       | (not all at once after a delay).
691     - |checkbox|
692
693Python Repl & Output
694^^^^^^^^^^^^^^^^^^^^^
695
696.. list-table::
697   :widths: 5 45 45 5
698   :header-rows: 1
699
700   * - #
701     - Test Action
702     - Expected Result
703     - ✅
704
705   * - 1
706     - Click the ``Logs`` window title
707     - Log pane is focused
708     - |checkbox|
709
710   * - 2
711     - Click empty whitespace in the ``Python Results`` window
712     - Python Results pane is focused
713     - |checkbox|
714
715   * - 3
716     - Click empty whitespace in the ``Python Repl`` window
717     - Python Repl pane is focused
718     - |checkbox|
719
720   * - 4
721     - | Enter the following text and press :kbd:`Enter` to run
722       | ``[i for i in __builtins__ if not i.startswith('_')]``
723     - | The results should appear pretty printed
724       | with each list element on it's own line:
725       |
726       |   >>> [i for i in __builtins__ if not i.startswith('_')]
727       |   [ 'abs',
728       |     'all',
729       |     'any',
730       |     'ascii'
731       |
732     - |checkbox|
733
734   * - 5
735     - | Enter the following text and press :kbd:`Enter` to run
736       | ``locals()``
737     - | The results should appear pretty printed
738     - |checkbox|
739
740   * - 6
741     - | Enter the following text and press :kbd:`Enter` to run
742       | ``zzzz = 'test'``
743     - | No new results are shown
744       | The previous ``locals()`` output does not show ``'zzzz': 'test'``
745     - |checkbox|
746
747   * - 7
748     - | Enter the following text and press :kbd:`Enter` to run
749       | ``locals()``
750     - | The output ends with ``'zzzz': 'test'}``
751     - |checkbox|
752
753   * - 8
754     - | With the cursor over the Python Results,
755       | use the mouse wheel to scroll up and down.
756     - | The output window should be able to scroll all
757       | the way to the beginning and end of the buffer.
758     - |checkbox|
759
760   * - 9
761     - Click empty whitespace in the ``Python Repl`` window
762     - Python Repl pane is focused
763     - |checkbox|
764
765   * - 10
766     - | Enter the following text and press :kbd:`Enter` to run
767       | ``!ls``
768     - | 1. Shell output of running the ``ls`` command should appear in the
769       | results window.
770       | 2. A new log window pane should appear titled ``Shell Output``.
771       | 3. The Shell Output window should show the command that was run and the
772       | output:
773       | ``$ ls``
774       | ``activate.bat``
775       | ``activate.sh``
776     - |checkbox|
777
778Web Log Viewer
779^^^^^^^^^^^^^^
780
781.. list-table::
782   :widths: 5 45 45 5
783   :header-rows: 1
784
785   * - #
786     - Test Action
787     - Expected Result
788     - ✅
789
790   * - 1
791     - | Start the pw console test mode by
792       | running ``pw console --test-mode``
793     - | Console starts up showing an ``Fake Device`` window.
794     - |checkbox|
795
796   * - 2
797     - | Focus on ``Fake Device`` panel and press :kbd:`Shift-o` to enable web log viewer
798     - | This should hide log stream in the console and automatically copy the
799       | URL to log viewer to the clipboard
800     - |checkbox|
801   * - 3
802     - | Focus on the ``Fake Keys`` panel with a filter applied. Then press
803       | :kbd:`Shift-o` to enable another web log viewer for that new pane. Open the
804       | new URL in Chrome
805     - | This log viewer should have filters pre-applied
806     - |checkbox|
807   * - 4
808     - | Press :kbd:`Shift-o` again on both log panes to disable web log view
809     - | This should re-enable log stream in console and stop streaming logs to
810       | web view
811     - |checkbox|
812
813
814
815Early Startup
816^^^^^^^^^^^^^
817
818.. list-table::
819   :widths: 5 45 45 5
820   :header-rows: 1
821
822   * - #
823     - Test Action
824     - Expected Result
825     - ✅
826
827   * - 1
828     - | Start the pw console test mode by
829       | running ``pw console --test-mode``
830     - | Console starts up showing an ``All Logs`` window.
831     - |checkbox|
832
833   * - 2
834     - | Click the :guilabel:`All Logs` window title
835       | Press :kbd:`g` to jump to the top of the log history
836     - | These log messages should be at the top:
837       | ``DBG Adding plugins...``
838       | ``DBG Starting prompt_toolkit full-screen application...``
839       | ``DBG pw_console test-mode starting...``
840       | ``DBG pw_console.PwConsoleEmbed init complete``
841     - |checkbox|
842
843Quit Confirmation Dialog
844^^^^^^^^^^^^^^^^^^^^^^^^
845
846.. list-table::
847   :widths: 5 45 45 5
848   :header-rows: 1
849
850   * - #
851     - Test Action
852     - Expected Result
853     - ✅
854
855   * - 1
856     - | Press :kbd:`Ctrl-d`
857     - | The quit dialog appears
858     - |checkbox|
859
860   * - 2
861     - | Press :kbd:`n`
862     - | The quit dialog disappears
863     - |checkbox|
864
865   * - 3
866     - | Press :kbd:`Ctrl-d`
867     - | The quit dialog appears
868     - |checkbox|
869
870   * - 4
871     - | Press :kbd:`y`
872     - | The console exits
873     - |checkbox|
874
875   * - 5
876     - | Restart the console and
877       | Press :kbd:`Ctrl-d` twice in quick succession.
878     - | The console exits
879     - |checkbox|
880
881   * - 6
882     - | Restart the console and Press :kbd:`F1`
883     - | The help window appears
884     - |checkbox|
885
886   * - 7
887     - | Press :kbd:`Ctrl-d`
888     - | The quit dialog appears on top of the help window
889     - |checkbox|
890
891   * - 8
892     - | Press :kbd:`n`
893     - | The quit dialog disappears and the help window is
894       | back in focus.
895     - |checkbox|
896
897   * - 9
898     - | Press :kbd:`q`
899     - | The help window disappears and the Python Repl is in focus.
900     - |checkbox|
901
902   * - 10
903     - | Type some text into the Python Repl.
904       | Press :kbd:`Home` or move the cursor to the
905       | beginning of the text you just entered.
906       | Press :kbd:`Ctrl-d`
907     - | Each :kbd:`Ctrl-d` press deletes one character
908     - |checkbox|
909
910   * - 11
911     - | Press :kbd:`Ctrl-c` to clear the Python Repl text
912       | Press :kbd:`Ctrl-d`
913     - | The quit dialog appears.
914     - |checkbox|
915
916Add note to the commit message
917==============================
918
919Add a ``Testing:`` line to your commit message and mention the steps
920executed. For example:
921
922.. code-block:: text
923
924   Testing: Log Pane Steps 1-6
925
926.. |checkbox| raw:: html
927
928    <input type="checkbox">
929