[tor-commits] [nyx/master] Added tests

atagar at torproject.org atagar at torproject.org
Sun Jul 31 23:32:40 UTC 2016


commit f8171aa62dbf940fd1e3a24279a1c5e3fd8a3fb5
Author: Sambuddha Basu <sambuddhabasu1 at gmail.com>
Date:   Sun Jul 10 20:57:30 2016 -0700

    Added tests
---
 nyx/panel/interpreter.py  | 10 +++----
 test/panel/interpreter.py | 74 +++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 79 insertions(+), 5 deletions(-)

diff --git a/nyx/panel/interpreter.py b/nyx/panel/interpreter.py
index 88affb2..9839e90 100644
--- a/nyx/panel/interpreter.py
+++ b/nyx/panel/interpreter.py
@@ -23,7 +23,6 @@ import stem.interpreter.commands
 
 USAGE_INFO = 'to use this panel press enter'
 PROMPT = '>>> '
-PROMPT_LINE = [[(PROMPT, GREEN, BOLD), (USAGE_INFO, CYAN, BOLD)]]
 ANSI_RE = re.compile('\\x1b\[([0-9;]*)m')
 ATTRS = {'0': NORMAL, '1': BOLD, '30': BLACK, '31': RED, '32': GREEN, '33': YELLOW, '34': BLUE, '35': MAGENTA, '36': CYAN}
 BACKLOG_LIMIT = 100
@@ -82,6 +81,7 @@ class InterpreterPanel(panel.Panel):
     )
     self.autocompleter = stem.interpreter.autocomplete.Autocompleter(self.controller)
     self.interpreter = stem.interpreter.commands.ControlInterpretor(self.controller)
+    self.prompt_line = [[(PROMPT, GREEN, BOLD), (USAGE_INFO, CYAN, BOLD)]]
 
   def key_handlers(self):
     def _scroll(key):
@@ -98,7 +98,7 @@ class InterpreterPanel(panel.Panel):
         self.redraw(True)
         _scroll(nyx.curses.KeyInput(curses.KEY_END))
         page_height = self.get_preferred_size()[0] - 1
-        user_input = nyx.curses.str_input(len(PROMPT) + self._x_offset, self.top + len(PROMPT_LINE[-page_height:]), '', list(reversed(self._backlog)), self.autocompleter.matches)
+        user_input = nyx.curses.str_input(len(PROMPT) + self._x_offset, self.top + len(self.prompt_line[-page_height:]), '', list(reversed(self._backlog)), self.autocompleter.matches)
         user_input, is_done = user_input.strip(), False
 
         if not user_input:
@@ -126,11 +126,11 @@ class InterpreterPanel(panel.Panel):
               response = '\x1b[31;1m' + new_stderr.getvalue()
               sys.stderr = old_stderr
             if response:
-              PROMPT_LINE.insert(len(PROMPT_LINE) - 1, format_input(user_input))
+              self.prompt_line.insert(len(self.prompt_line) - 1, format_input(user_input))
               attrs = []
               for line in response.split('\n'):
                 line, attrs = ansi_to_output(line, attrs)
-                PROMPT_LINE.insert(len(PROMPT_LINE) - 1, line)
+                self.prompt_line.insert(len(self.prompt_line) - 1, line)
           except stem.SocketClosed:
             is_done = True
 
@@ -151,7 +151,7 @@ class InterpreterPanel(panel.Panel):
       subwindow.scrollbar(1, scroll, self._last_content_height - 1)
 
     y = 1 - scroll
-    for entry in PROMPT_LINE:
+    for entry in self.prompt_line:
       cursor = self._x_offset
 
       for line in entry:
diff --git a/test/panel/interpreter.py b/test/panel/interpreter.py
index 054aeff..a3ddd5e 100644
--- a/test/panel/interpreter.py
+++ b/test/panel/interpreter.py
@@ -4,7 +4,27 @@ Unit tests for nyx.panel.interpreter.
 
 import unittest
 
+import nyx.curses
 import nyx.panel.interpreter
+import test
+
+EXPECTED_PANEL = """
+Control Interpreter:
+>>> to use this panel press enter
+""".strip()
+
+EXPECTED_PANEL_INPUT_MODE = """
+Control Interpreter (enter "/help" for usage or a blank line to stop):
+>>> to use this panel press enter
+""".strip()
+
+EXPECTED_MULTILINE_PANEL = """
+Control Interpreter:
+>>> GETINFO version
+250-version=0.2.4.27 (git-412e3f7dc9c6c01a)
+""".strip()
+
+EXPECTED_SCROLLBAR_PANEL = ' |>>> to use this panel press enter'
 
 
 class TestInterpreter(unittest.TestCase):
@@ -16,3 +36,57 @@ class TestInterpreter(unittest.TestCase):
     self.assertEqual('Green', output_line[0][1])
     self.assertEqual('Bold', output_line[0][2])
     self.assertEqual(['Green', 'Bold'], attrs)
+
+  def test_format_input(self):
+    user_input = 'getinfo'
+    output = nyx.panel.interpreter.format_input(user_input)
+    self.assertEqual(2, len(output))
+    self.assertEqual(('>>> ', 'Green', 'Bold'), output[0])
+    self.assertEqual(('getinfo ', 'Green', 'Bold'), output[1])
+
+    user_input = 'getinfo version'
+    output = nyx.panel.interpreter.format_input(user_input)
+    self.assertEqual(3, len(output))
+    self.assertEqual(('>>> ', 'Green', 'Bold'), output[0])
+    self.assertEqual(('getinfo ', 'Green', 'Bold'), output[1])
+    self.assertEqual(('version', 'Cyan', 'Bold'), output[2])
+
+    user_input = '/help'
+    output = nyx.panel.interpreter.format_input(user_input)
+    self.assertEqual(2, len(output))
+    self.assertEqual(('>>> ', 'Green', 'Bold'), output[0])
+    self.assertEqual(('/help', 'Magenta', 'Bold'), output[1])
+
+  def test_panel_name(self):
+    panel = nyx.panel.interpreter.InterpreterPanel()
+    self.assertEqual(panel.get_name(), 'interpreter')
+
+  def test_rendering_panel(self):
+    panel = nyx.panel.interpreter.InterpreterPanel()
+    self.assertEqual(EXPECTED_PANEL, test.render(panel.draw).content)
+
+    panel._is_input_mode = True
+    self.assertEqual(EXPECTED_PANEL_INPUT_MODE, test.render(panel.draw).content)
+
+  def test_rendering_multiline_panel(self):
+    panel = nyx.panel.interpreter.InterpreterPanel()
+    panel.prompt_line = [[('>>> ', 'Green', 'Bold'), ('GETINFO', 'Green', 'Bold'), (' version', 'Cyan')]]
+    panel.prompt_line.append([('250-version=0.2.4.27 (git-412e3f7dc9c6c01a)', 'Blue')])
+    self.assertEqual(EXPECTED_MULTILINE_PANEL, test.render(panel.draw).content)
+
+  def test_scrollbar(self):
+    panel = nyx.panel.interpreter.InterpreterPanel()
+    self.assertIsInstance(panel._scroller, nyx.curses.Scroller)
+
+    height = panel.get_preferred_size()[0]
+    panel._last_content_height = height
+    output_lines = test.render(panel.draw).content.split('\n')
+    self.assertEqual(height, len(output_lines))
+    self.assertEqual(EXPECTED_SCROLLBAR_PANEL, output_lines[1])
+
+  def test_key_handlers(self):
+    panel = nyx.panel.interpreter.InterpreterPanel()
+    output = panel.key_handlers()
+    self.assertEqual(2, len(output))
+    self.assertEqual('enter', output[0].key)
+    self.assertEqual('arrows', output[1].key)





More information about the tor-commits mailing list