Add shortcut help popup
This commit is contained in:
@@ -0,0 +1,55 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import argparse
|
||||
import curses
|
||||
import unittest
|
||||
from unittest.mock import Mock, patch
|
||||
|
||||
from herdr_hub.cli import build_parser, command_keys
|
||||
from herdr_hub.key_help import KEY_SECTIONS, KeyHelpPopup
|
||||
|
||||
|
||||
class KeyHelpTests(unittest.TestCase):
|
||||
def test_reference_contains_primary_hub_mappings(self) -> None:
|
||||
mappings = {
|
||||
mapping.keys: mapping.action
|
||||
for _, section in KEY_SECTIONS
|
||||
for mapping in section
|
||||
}
|
||||
for keys in (
|
||||
"Ctrl+A ?",
|
||||
"Ctrl+A g",
|
||||
"Ctrl+A h",
|
||||
"Ctrl+A r",
|
||||
"Ctrl+A R",
|
||||
"Ctrl+A q",
|
||||
"Ctrl+A d",
|
||||
):
|
||||
self.assertIn(keys, mappings)
|
||||
|
||||
def test_narrow_layout_stacks_keys_and_actions(self) -> None:
|
||||
wide = [value for value, _ in KeyHelpPopup.lines(70)]
|
||||
narrow = [value for value, _ in KeyHelpPopup.lines(36)]
|
||||
self.assertGreater(len(narrow), len(wide))
|
||||
self.assertIn(" Ctrl+A ?", narrow)
|
||||
self.assertIn(" 打开快捷键帮助", narrow)
|
||||
|
||||
def test_escape_closes_popup(self) -> None:
|
||||
screen = Mock()
|
||||
screen.getmaxyx.return_value = (24, 80)
|
||||
screen.get_wch.return_value = "\x1b"
|
||||
with patch("curses.set_escdelay"), patch("curses.curs_set"), patch(
|
||||
"curses.use_default_colors"
|
||||
), patch("curses.mousemask"):
|
||||
self.assertEqual(KeyHelpPopup().run(screen), 0)
|
||||
|
||||
def test_cli_entry_uses_curses_wrapper(self) -> None:
|
||||
arguments = build_parser().parse_args(["keys"])
|
||||
self.assertEqual(arguments.command, "keys")
|
||||
with patch("herdr_hub.cli.curses.wrapper", return_value=0) as wrapper:
|
||||
self.assertEqual(command_keys(argparse.Namespace()), 0)
|
||||
wrapper.assert_called_once()
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
Reference in New Issue
Block a user