[tor-commits] [nyx/master] Test _draw_selection_details()

atagar at torproject.org atagar at torproject.org
Tue Jul 12 17:06:11 UTC 2016


commit 83163bab300d097375296f3719b834a34bc00713
Author: Damian Johnson <atagar at torproject.org>
Date:   Tue Jul 12 09:52:37 2016 -0700

    Test _draw_selection_details()
---
 nyx/panel/config.py    | 44 +++++++++++++++++++++++---------------------
 test/panel/__init__.py |  1 +
 test/panel/config.py   | 37 +++++++++++++++++++++++++++++++++++++
 3 files changed, 61 insertions(+), 21 deletions(-)

diff --git a/nyx/panel/config.py b/nyx/panel/config.py
index 3b3d83b..eea135d 100644
--- a/nyx/panel/config.py
+++ b/nyx/panel/config.py
@@ -246,7 +246,7 @@ class ConfigPanel(nyx.panel.Panel):
     is_scrollbar_visible = len(contents) > subwindow.height - DETAILS_HEIGHT
 
     if selected is not None:
-      self._draw_selection_details(subwindow, selected)
+      _draw_selection_details(subwindow, selected)
 
     hidden_msg = "press 'a' to hide most options" if self._show_all else "press 'a' to show all options"
     subwindow.addstr(0, 0, 'Tor Configuration (%s):' % hidden_msg, HIGHLIGHT)
@@ -288,28 +288,30 @@ class ConfigPanel(nyx.panel.Panel):
   def _get_config_options(self):
     return self._contents if self._show_all else filter(lambda entry: stem.manual.is_important(entry.name) or entry.is_set(), self._contents)
 
-  def _draw_selection_details(self, subwindow, selected):
-    """
-    Shows details of the currently selected option.
-    """
 
-    description = 'Description: %s' % (selected.manual.description)
-    attr = ', '.join(('custom' if selected.is_set() else 'default', selected.value_type, 'usage: %s' % selected.manual.usage))
-    selected_color = CONFIG['attr.config.category_color'].get(selected.manual.category, WHITE)
-    subwindow.box(0, 0, subwindow.width, DETAILS_HEIGHT)
+def _draw_selection_details(subwindow, selected):
+  """
+  Shows details of the currently selected option.
+  """
 
-    subwindow.addstr(2, 1, '%s (%s Option)' % (selected.name, selected.manual.category), selected_color, BOLD)
-    subwindow.addstr(2, 2, 'Value: %s (%s)' % (selected.value(), str_tools.crop(attr, subwindow.width - len(selected.value()) - 13)), selected_color, BOLD)
+  attr = ', '.join(('custom' if selected.is_set() else 'default', selected.value_type, 'usage: %s' % selected.manual.usage))
+  selected_color = CONFIG['attr.config.category_color'].get(selected.manual.category, WHITE)
+  subwindow.box(0, 0, subwindow.width, DETAILS_HEIGHT)
 
-    for i in range(DETAILS_HEIGHT - 4):
-      if not description:
-        break  # done writing description
+  subwindow.addstr(2, 1, '%s (%s Option)' % (selected.name, selected.manual.category), selected_color, BOLD)
+  subwindow.addstr(2, 2, 'Value: %s (%s)' % (selected.value(), str_tools.crop(attr, subwindow.width - len(selected.value()) - 13)), selected_color, BOLD)
 
-      line, description = description.split('\n', 1) if '\n' in description else (description, '')
+  description = 'Description: %s' % selected.manual.description
 
-      if i < DETAILS_HEIGHT - 5:
-        line, remainder = str_tools.crop(line, subwindow.width - 3, 4, 4, str_tools.Ending.HYPHEN, True)
-        description = '  ' + remainder.strip() + description
-        subwindow.addstr(2, 3 + i, line, selected_color, BOLD)
-      else:
-        subwindow.addstr(2, 3 + i, str_tools.crop(line, subwindow.width - 3, 4, 4), selected_color, BOLD)
+  for i in range(DETAILS_HEIGHT - 4):
+    if not description:
+      break  # done writing description
+
+    line, description = description.split('\n', 1) if '\n' in description else (description, '')
+
+    if i < DETAILS_HEIGHT - 5:
+      line, remainder = str_tools.crop(line, subwindow.width - 3, 4, 4, str_tools.Ending.HYPHEN, True)
+      description = '  ' + remainder.strip() + description
+      subwindow.addstr(2, 3 + i, line, selected_color, BOLD)
+    else:
+      subwindow.addstr(2, 3 + i, str_tools.crop(line, subwindow.width - 3, 4, 4), selected_color, BOLD)
diff --git a/test/panel/__init__.py b/test/panel/__init__.py
index 9142e64..579da3f 100644
--- a/test/panel/__init__.py
+++ b/test/panel/__init__.py
@@ -7,5 +7,6 @@ __all__ = [
   'graph',
   'log',
   'connection',
+  'config',
   'torrc',
 ]
diff --git a/test/panel/config.py b/test/panel/config.py
new file mode 100644
index 0000000..19db206
--- /dev/null
+++ b/test/panel/config.py
@@ -0,0 +1,37 @@
+"""
+Unit tests for nyx.panel.config.
+"""
+
+import unittest
+
+import stem.manual
+import nyx.panel.config
+import test
+
+from test import require_curses
+from mock import patch
+
+EXPECTED_DETAIL_DIALOG = """
++------------------------------------------------------------------------------+
+| ControlPort (General Option)                                                 |
+| Value: 9051 (custom, LineList, usage: PORT|unix:path|auto [flags])           |
+| Description: If set, Tor will accept connections on this port and allow those|
+|   connections to control the Tor process using the Tor Control Protocol (des-|
+|   cribed in control-spec.txt in torspec). Note: unless you also specify one  |
+|   or more of HashedControlPassword or CookieAuthentication, setting this...  |
++------------------------------------------------------------------------------+
+""".strip()
+
+
+class TestConfigPanel(unittest.TestCase):
+  @require_curses
+  @patch('nyx.panel.config.tor_controller')
+  def test_draw_selection_details(self, tor_controller_mock):
+    tor_controller_mock().get_info.return_value = True
+    tor_controller_mock().get_conf.return_value = ['9051']
+
+    manual = stem.manual.Manual.from_cache()
+    selected = nyx.panel.config.ConfigEntry('ControlPort', 'LineList', manual)
+
+    rendered = test.render(nyx.panel.config._draw_selection_details, selected)
+    self.assertEqual(EXPECTED_DETAIL_DIALOG, rendered.content)





More information about the tor-commits mailing list