commit 4da373ca6994bf9954755ba5821fd4e39c507619
Author: Damian Johnson <atagar(a)torproject.org>
Date: Tue Sep 29 14:05:17 2020 -0700
Test event_listening example
---
docs/_static/example/event_listening.py | 42 ++++++++++++++++-----------------
test/unit/examples.py | 18 ++++++++++++--
2 files changed, 37 insertions(+), 23 deletions(-)
diff --git a/docs/_static/example/event_listening.py b/docs/_static/example/event_listening.py
index ff8c1469..b808a977 100644
--- a/docs/_static/example/event_listening.py
+++ b/docs/_static/example/event_listening.py
@@ -7,21 +7,21 @@ from stem.util import str_tools
# colors that curses can handle
COLOR_LIST = {
- "red": curses.COLOR_RED,
- "green": curses.COLOR_GREEN,
- "yellow": curses.COLOR_YELLOW,
- "blue": curses.COLOR_BLUE,
- "cyan": curses.COLOR_CYAN,
- "magenta": curses.COLOR_MAGENTA,
- "black": curses.COLOR_BLACK,
- "white": curses.COLOR_WHITE,
+ 'red': curses.COLOR_RED,
+ 'green': curses.COLOR_GREEN,
+ 'yellow': curses.COLOR_YELLOW,
+ 'blue': curses.COLOR_BLUE,
+ 'cyan': curses.COLOR_CYAN,
+ 'magenta': curses.COLOR_MAGENTA,
+ 'black': curses.COLOR_BLACK,
+ 'white': curses.COLOR_WHITE,
}
GRAPH_WIDTH = 40
GRAPH_HEIGHT = 8
-DOWNLOAD_COLOR = "green"
-UPLOAD_COLOR = "blue"
+DOWNLOAD_COLOR = 'green'
+UPLOAD_COLOR = 'blue'
def main():
with Controller.from_port(port = 9051) as controller:
@@ -74,10 +74,10 @@ def _render_graph(window, bandwidth_rates):
# show the latest values at the top
- label = "Downloaded (%s/s):" % str_tools.size_label(download_rates[0], 1)
+ label = 'Downloaded (%s/s):' % str_tools.size_label(download_rates[0], 1)
window.addstr(0, 1, label, DOWNLOAD_COLOR, curses.A_BOLD)
- label = "Uploaded (%s/s):" % str_tools.size_label(upload_rates[0], 1)
+ label = 'Uploaded (%s/s):' % str_tools.size_label(upload_rates[0], 1)
window.addstr(0, GRAPH_WIDTH + 7, label, UPLOAD_COLOR, curses.A_BOLD)
# draw the graph bounds in KB
@@ -85,24 +85,24 @@ def _render_graph(window, bandwidth_rates):
max_download_rate = max(download_rates)
max_upload_rate = max(upload_rates)
- window.addstr(1, 1, "%4i" % (max_download_rate / 1024), DOWNLOAD_COLOR)
- window.addstr(GRAPH_HEIGHT, 1, " 0", DOWNLOAD_COLOR)
+ window.addstr(1, 1, '%4i' % (max_download_rate / 1024), DOWNLOAD_COLOR)
+ window.addstr(GRAPH_HEIGHT, 1, ' 0', DOWNLOAD_COLOR)
- window.addstr(1, GRAPH_WIDTH + 7, "%4i" % (max_upload_rate / 1024), UPLOAD_COLOR)
- window.addstr(GRAPH_HEIGHT, GRAPH_WIDTH + 7, " 0", UPLOAD_COLOR)
+ window.addstr(1, GRAPH_WIDTH + 7, '%4i' % (max_upload_rate / 1024), UPLOAD_COLOR)
+ window.addstr(GRAPH_HEIGHT, GRAPH_WIDTH + 7, ' 0', UPLOAD_COLOR)
# draw the graph
for col in range(GRAPH_WIDTH):
col_height = GRAPH_HEIGHT * download_rates[col] / max(max_download_rate, 1)
- for row in range(col_height):
- window.addstr(GRAPH_HEIGHT - row, col + 6, " ", DOWNLOAD_COLOR, curses.A_STANDOUT)
+ for row in range(int(col_height)):
+ window.addstr(GRAPH_HEIGHT - row, col + 6, ' ', DOWNLOAD_COLOR, curses.A_STANDOUT)
col_height = GRAPH_HEIGHT * upload_rates[col] / max(max_upload_rate, 1)
- for row in range(col_height):
- window.addstr(GRAPH_HEIGHT - row, col + GRAPH_WIDTH + 12, " ", UPLOAD_COLOR, curses.A_STANDOUT)
+ for row in range(int(col_height)):
+ window.addstr(GRAPH_HEIGHT - row, col + GRAPH_WIDTH + 12, ' ', UPLOAD_COLOR, curses.A_STANDOUT)
window.refresh()
@@ -154,7 +154,7 @@ class Window(object):
if color is not None:
if color not in self._colors:
- recognized_colors = ", ".join(self._colors.keys())
+ recognized_colors = ', '.join(self._colors.keys())
raise ValueError("The '%s' color isn't recognized: %s" % (color, recognized_colors))
attr |= self._colors[color]
diff --git a/test/unit/examples.py b/test/unit/examples.py
index 35aa80bb..d9a3f6fa 100644
--- a/test/unit/examples.py
+++ b/test/unit/examples.py
@@ -539,8 +539,22 @@ class TestExamples(unittest.TestCase):
finally:
sys.modules = original_modules
- def test_event_listening(self):
- pass
+ @patch('stem.control.Controller.from_port', spec = Controller)
+ def test_event_listening(self, from_port_mock):
+ # This is a lengthy example that's mostly curses. This is just a surface
+ # level test to check for syntax issues and such.
+
+ original_modules = dict(sys.modules)
+
+ try:
+ sys.modules['curses'] = Mock()
+
+ import event_listening
+
+ event_listening.main()
+ event_listening._render_graph(Mock(), [(0, 0)] * event_listening.GRAPH_WIDTH)
+ finally:
+ sys.modules = original_modules
@patch('stem.control.Controller.from_port', spec = Controller)
@patch('sys.stdout', new_callable = io.StringIO)