[tor-commits] [nyx/master] mock_keybindings() test helper

atagar at torproject.org atagar at torproject.org
Fri Jun 3 17:12:55 UTC 2016


commit 78f67af6cd294c231541433b2e6679981b8f9b8c
Author: Damian Johnson <atagar at torproject.org>
Date:   Fri Jun 3 10:12:59 2016 -0700

    mock_keybindings() test helper
    
    Keybinding mocks were getting a bit verbose. Simple helper for mocking keyboard
    input.
---
 test/__init__.py | 15 ++++++++++++
 test/popups.py   | 70 +++++++-------------------------------------------------
 2 files changed, 23 insertions(+), 62 deletions(-)

diff --git a/test/__init__.py b/test/__init__.py
index 3730254..861e46c 100644
--- a/test/__init__.py
+++ b/test/__init__.py
@@ -51,6 +51,21 @@ def require_curses(func):
   return wrapped
 
 
+class mock_keybindings(object):
+  """
+  Mocks the given keyboard inputs.
+  """
+
+  def __init__(self, *keys):
+    self._mock = patch('nyx.curses.key_input', side_effect = [nyx.curses.KeyInput(key) for key in keys])
+
+  def __enter__(self, *args):
+    self._mock.__enter__(*args)
+
+  def __exit__(self, *args):
+    self._mock.__exit__(*args)
+
+
 def render(func, *args, **kwargs):
   """
   Runs the given curses function, providing content that's rendered on the
diff --git a/test/popups.py b/test/popups.py
index 19ff0e1..c87bddf 100644
--- a/test/popups.py
+++ b/test/popups.py
@@ -10,7 +10,7 @@ import nyx.panel
 import nyx.popups
 import test
 
-from test import require_curses
+from test import require_curses, mock_keybindings
 from mock import patch, Mock
 
 EXPECTED_HELP_POPUP = """
@@ -335,15 +335,8 @@ class TestPopups(unittest.TestCase):
     # being selected (rather than three) because the act of selecing the third
     # closed the popup.
 
-    keypresses = [
-      nyx.curses.KeyInput(curses.KEY_ENTER),
-      nyx.curses.KeyInput(curses.KEY_DOWN),
-      nyx.curses.KeyInput(curses.KEY_ENTER),
-      nyx.curses.KeyInput(curses.KEY_ENTER),
-    ]
-
     def draw_func():
-      with patch('nyx.curses.key_input', side_effect = keypresses):
+      with mock_keybindings(curses.KEY_ENTER, curses.KEY_DOWN, curses.KEY_ENTER, curses.KEY_ENTER):
         return nyx.popups.select_sort_order('Config Option Ordering:', options, previous_order, {})
 
     previous_order = ['Man Page Entry', 'Name', 'Is Set']
@@ -377,15 +370,8 @@ class TestPopups(unittest.TestCase):
     controller.get_info.return_value = 'DEBUG INFO NOTICE WARN ERR CIRC CIRC_MINOR'
     controller_mock.return_value = controller
 
-    keypresses = [
-      nyx.curses.KeyInput(curses.KEY_DOWN),
-      nyx.curses.KeyInput(curses.KEY_DOWN),
-      nyx.curses.KeyInput(curses.KEY_DOWN),
-      nyx.curses.KeyInput(curses.KEY_ENTER),
-    ]
-
     def draw_func():
-      with patch('nyx.curses.key_input', side_effect = keypresses):
+      with mock_keybindings(curses.KEY_DOWN, curses.KEY_DOWN, curses.KEY_DOWN, curses.KEY_ENTER):
         return nyx.popups.new_select_event_types([])
 
     rendered = test.render(draw_func)
@@ -400,18 +386,8 @@ class TestPopups(unittest.TestCase):
     controller.get_info.return_value = 'DEBUG INFO NOTICE WARN ERR CIRC CIRC_MINOR STREAM ORCONN BW'
     controller_mock.return_value = controller
 
-    keypresses = [
-      nyx.curses.KeyInput(curses.KEY_UP),
-      nyx.curses.KeyInput(curses.KEY_ENTER),
-      nyx.curses.KeyInput(curses.KEY_DOWN),
-      nyx.curses.KeyInput(curses.KEY_DOWN),
-      nyx.curses.KeyInput(curses.KEY_DOWN),
-      nyx.curses.KeyInput(curses.KEY_DOWN),
-      nyx.curses.KeyInput(curses.KEY_ENTER),
-    ]
-
     def draw_func():
-      with patch('nyx.curses.key_input', side_effect = keypresses):
+      with mock_keybindings(curses.KEY_UP, curses.KEY_ENTER, curses.KEY_DOWN, curses.KEY_DOWN, curses.KEY_DOWN, curses.KEY_DOWN, curses.KEY_ENTER):
         return nyx.popups.new_select_event_types([])
 
     rendered = test.render(draw_func)
@@ -426,21 +402,8 @@ class TestPopups(unittest.TestCase):
     controller.get_info.return_value = 'DEBUG INFO NOTICE WARN ERR CIRC CIRC_MINOR STREAM ORCONN BW'
     controller_mock.return_value = controller
 
-    keypresses = [
-      nyx.curses.KeyInput(curses.KEY_LEFT),
-      nyx.curses.KeyInput(curses.KEY_DOWN),
-      nyx.curses.KeyInput(curses.KEY_ENTER),
-      nyx.curses.KeyInput(curses.KEY_DOWN),
-      nyx.curses.KeyInput(curses.KEY_DOWN),
-      nyx.curses.KeyInput(curses.KEY_DOWN),
-      nyx.curses.KeyInput(curses.KEY_RIGHT),
-      nyx.curses.KeyInput(curses.KEY_RIGHT),
-      nyx.curses.KeyInput(curses.KEY_LEFT),
-      nyx.curses.KeyInput(curses.KEY_ENTER),
-    ]
-
     def draw_func():
-      with patch('nyx.curses.key_input', side_effect = keypresses):
+      with mock_keybindings(curses.KEY_LEFT, curses.KEY_DOWN, curses.KEY_ENTER, curses.KEY_DOWN, curses.KEY_DOWN, curses.KEY_DOWN, curses.KEY_RIGHT, curses.KEY_RIGHT, curses.KEY_LEFT, curses.KEY_ENTER):
         return nyx.popups.new_select_event_types([])
 
     rendered = test.render(draw_func)
@@ -455,17 +418,8 @@ class TestPopups(unittest.TestCase):
     controller.get_info.return_value = 'DEBUG INFO NOTICE WARN ERR CIRC CIRC_MINOR STREAM ORCONN BW'
     controller_mock.return_value = controller
 
-    keypresses = [
-      nyx.curses.KeyInput(curses.KEY_DOWN),
-      nyx.curses.KeyInput(curses.KEY_DOWN),
-      nyx.curses.KeyInput(curses.KEY_DOWN),
-      nyx.curses.KeyInput(curses.KEY_DOWN),
-      nyx.curses.KeyInput(curses.KEY_RIGHT),
-      nyx.curses.KeyInput(curses.KEY_ENTER),
-    ]
-
     def draw_func():
-      with patch('nyx.curses.key_input', side_effect = keypresses):
+      with mock_keybindings(curses.KEY_DOWN, curses.KEY_DOWN, curses.KEY_DOWN, curses.KEY_DOWN, curses.KEY_RIGHT, curses.KEY_ENTER):
         return nyx.popups.new_select_event_types([])
 
     rendered = test.render(draw_func)
@@ -480,16 +434,8 @@ class TestPopups(unittest.TestCase):
     controller.get_info.return_value = 'DEBUG INFO NOTICE WARN ERR CIRC CIRC_MINOR STREAM ORCONN BW'
     controller_mock.return_value = controller
 
-    keypresses = [
-      nyx.curses.KeyInput(curses.KEY_DOWN),
-      nyx.curses.KeyInput(curses.KEY_DOWN),
-      nyx.curses.KeyInput(curses.KEY_DOWN),
-      nyx.curses.KeyInput(curses.KEY_DOWN),
-      nyx.curses.KeyInput(curses.KEY_ENTER),
-    ]
-
     def draw_func():
-      with patch('nyx.curses.key_input', side_effect = keypresses):
+      with mock_keybindings(curses.KEY_DOWN, curses.KEY_DOWN, curses.KEY_DOWN, curses.KEY_DOWN, curses.KEY_ENTER):
         return nyx.popups.new_select_event_types(['CIRC_MINOR'])
 
     rendered = test.render(draw_func)
@@ -504,7 +450,7 @@ class TestPopups(unittest.TestCase):
     self.assertEqual(False, rendered.return_value)
 
     def draw_func():
-      with patch('nyx.curses.key_input', side_effect = [nyx.curses.KeyInput(curses.KEY_LEFT), nyx.curses.KeyInput(curses.KEY_ENTER)]):
+      with mock_keybindings(curses.KEY_LEFT, curses.KEY_ENTER):
         return nyx.popups.confirm_save_torrc(TORRC)
 
     rendered = test.render(draw_func)



More information about the tor-commits mailing list