160 lines
4.8 KiB
Python
160 lines
4.8 KiB
Python
# Copyright 2021 The Pigweed Authors
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License"); you may not
|
|
# use this file except in compliance with the License. You may obtain a copy of
|
|
# the License at
|
|
#
|
|
# https://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
# License for the specific language governing permissions and limitations under
|
|
# the License.
|
|
"""Tests for pw_console.console_app"""
|
|
|
|
import inspect
|
|
import logging
|
|
import unittest
|
|
from unittest.mock import MagicMock
|
|
|
|
from jinja2 import Environment, PackageLoader, make_logging_undefined
|
|
from prompt_toolkit.key_binding import KeyBindings
|
|
|
|
from pw_console.help_window import HelpWindow
|
|
|
|
_jinja_env = Environment(
|
|
loader=PackageLoader('pw_console'),
|
|
undefined=make_logging_undefined(logger=logging.getLogger('pw_console')),
|
|
trim_blocks=True,
|
|
lstrip_blocks=True,
|
|
)
|
|
|
|
|
|
def _create_app_mock():
|
|
template = _jinja_env.get_template('keybind_list.jinja')
|
|
mock_app = MagicMock()
|
|
mock_app.get_template = MagicMock(return_value=template)
|
|
return mock_app
|
|
|
|
|
|
class TestHelpWindow(unittest.TestCase):
|
|
"""Tests for HelpWindow text and keybind lists."""
|
|
def setUp(self):
|
|
self.maxDiff = None # pylint: disable=invalid-name
|
|
|
|
def test_instantiate(self) -> None:
|
|
app = _create_app_mock()
|
|
help_window = HelpWindow(app)
|
|
self.assertIsNotNone(help_window)
|
|
|
|
# pylint: disable=unused-variable,unused-argument
|
|
def test_add_keybind_help_text(self) -> None:
|
|
key_bindings = KeyBindings()
|
|
|
|
@key_bindings.add('f1')
|
|
def show_help(event):
|
|
"""Toggle help window."""
|
|
|
|
@key_bindings.add('c-w')
|
|
@key_bindings.add('c-q')
|
|
def exit_(event):
|
|
"""Quit the application."""
|
|
|
|
app = _create_app_mock()
|
|
|
|
help_window = HelpWindow(app)
|
|
help_window.add_keybind_help_text('Global', key_bindings)
|
|
|
|
self.assertEqual(
|
|
help_window.help_text_sections,
|
|
{
|
|
'Global': {
|
|
'Quit the application.': ['Ctrl-Q', 'Ctrl-W'],
|
|
'Toggle help window.': ['F1'],
|
|
}
|
|
},
|
|
)
|
|
|
|
def test_generate_help_text(self) -> None:
|
|
"""Test keybind list template generation."""
|
|
global_bindings = KeyBindings()
|
|
|
|
@global_bindings.add('f1')
|
|
def show_help(event):
|
|
"""Toggle help window."""
|
|
|
|
@global_bindings.add('c-w')
|
|
@global_bindings.add('c-q')
|
|
def exit_(event):
|
|
"""Quit the application."""
|
|
|
|
focus_bindings = KeyBindings()
|
|
|
|
@focus_bindings.add('s-tab')
|
|
@focus_bindings.add('c-right')
|
|
@focus_bindings.add('c-down')
|
|
def app_focus_next(event):
|
|
"""Move focus to the next widget."""
|
|
|
|
@focus_bindings.add('c-left')
|
|
@focus_bindings.add('c-up')
|
|
def app_focus_previous(event):
|
|
"""Move focus to the previous widget."""
|
|
|
|
app = _create_app_mock()
|
|
|
|
help_window = HelpWindow(
|
|
app,
|
|
preamble='Pigweed CLI v0.1',
|
|
additional_help_text=inspect.cleandoc("""
|
|
Welcome to the Pigweed Console!
|
|
Please enjoy this extra help text.
|
|
"""),
|
|
)
|
|
help_window.add_keybind_help_text('Global', global_bindings)
|
|
help_window.add_keybind_help_text('Focus', focus_bindings)
|
|
help_window.generate_help_text()
|
|
|
|
self.assertIn(
|
|
inspect.cleandoc("""
|
|
Welcome to the Pigweed Console!
|
|
Please enjoy this extra help text.
|
|
"""),
|
|
help_window.help_text,
|
|
)
|
|
self.assertIn(
|
|
inspect.cleandoc("""
|
|
==== Global Keys ====
|
|
"""),
|
|
help_window.help_text,
|
|
)
|
|
self.assertIn(
|
|
inspect.cleandoc("""
|
|
Toggle help window. ----------------- F1
|
|
Quit the application. --------------- Ctrl-Q
|
|
Ctrl-W
|
|
"""),
|
|
help_window.help_text,
|
|
)
|
|
self.assertIn(
|
|
inspect.cleandoc("""
|
|
==== Focus Keys ====
|
|
"""),
|
|
help_window.help_text,
|
|
)
|
|
self.assertIn(
|
|
inspect.cleandoc("""
|
|
Move focus to the next widget. ------ Ctrl-Down
|
|
Ctrl-Right
|
|
Shift-Tab
|
|
Move focus to the previous widget. -- Ctrl-Left
|
|
Ctrl-Up
|
|
"""),
|
|
help_window.help_text,
|
|
)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
unittest.main()
|