summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Dunai <andunai@gmail.com>2018-01-04 17:11:40 +0200
committerAndrew Dunai <andunai@gmail.com>2018-01-04 17:11:40 +0200
commit30d21738f6d083880338ce18379875cecf66962d (patch)
tree71e731e99ea24b847f0e29b041df8e5370fec352
parent3f3bff6607dfcffcdd1dee42f521287de9f8e3f7 (diff)
downloadurwid-unittests-1.tar.gz
Added tests for raw_display.Screen and treetools.Tree*unittests-1
-rw-r--r--urwid/raw_display.py44
-rw-r--r--urwid/tests/test_treetools.py98
2 files changed, 140 insertions, 2 deletions
diff --git a/urwid/raw_display.py b/urwid/raw_display.py
index 9eadc0e..94c8080 100644
--- a/urwid/raw_display.py
+++ b/urwid/raw_display.py
@@ -539,6 +539,20 @@ class Screen(BaseScreen, RealTerminal):
return ready
def _getch(self, timeout):
+ """
+ Wait for character on _term_input_file.
+
+ >>> import os
+ >>> r, w = os.pipe()
+ >>> r = os.fdopen(r)
+ >>> w = os.fdopen(w, 'w')
+ >>> s = Screen(input=r)
+ >>> _ = w.write('x')
+ >>> w.close()
+ >>> chr(s._getch(1))
+ 'x'
+
+ """
ready = self._wait_for_input_ready(timeout)
if self.gpm_mev is not None:
if self.gpm_mev.stdout.fileno() in ready:
@@ -1020,6 +1034,32 @@ class Screen(BaseScreen, RealTerminal):
0 <= index < 256 (some terminals will only have 16 or 88 colors)
0 <= red, green, blue < 256
+
+ >>> import os
+ >>> r, w = os.pipe()
+ >>> r = os.fdopen(r)
+ >>> w = os.fdopen(w, 'w')
+ >>> s = Screen(output=w)
+ >>> s.modify_terminal_palette([
+ ... (1, 10, 20, 30),
+ ... (2, 40, 50, 60)
+ ... ])
+
+ >>> import os
+ >>> r, w = os.pipe()
+ >>> r = os.fdopen(r)
+ >>> w = os.fdopen(w, 'w')
+ >>> os.environ['TERM'] = 'fbterm'
+ >>> s = Screen(output=w)
+ >>> s.modify_terminal_palette([
+ ... (1, 10, 20, 30),
+ ... (2, 40, 50, 60)
+ ... ])
+ >>> s.write('foo\\n')
+ >>> w.close()
+ >>> r.read(128)
+ '\\x1b[3;1;10;20;30;2;40;50;60}foo\\n'
+
"""
if self.term == 'fbterm':
@@ -1038,9 +1078,9 @@ class Screen(BaseScreen, RealTerminal):
AttrSpec = lambda self, fg, bg: AttrSpec(fg, bg, self.colors)
-def _test():
+def _test(): # pragma: no cover
import doctest
doctest.testmod()
-if __name__=='__main__':
+if __name__=='__main__': # pragma: no cover
_test()
diff --git a/urwid/tests/test_treetools.py b/urwid/tests/test_treetools.py
new file mode 100644
index 0000000..1defde8
--- /dev/null
+++ b/urwid/tests/test_treetools.py
@@ -0,0 +1,98 @@
+# -*- coding: utf-8 -*-
+import unittest
+from textwrap import dedent
+
+from urwid.compat import B
+import urwid
+
+
+class ExampleTreeWidget(urwid.TreeWidget):
+ """ Display widget for leaf nodes """
+ def get_display_text(self):
+ return self.get_node().get_value()['name']
+
+
+class ExampleNode(urwid.TreeNode):
+ """ Data storage object for leaf nodes """
+ def load_widget(self):
+ return ExampleTreeWidget(self)
+
+
+class ExampleParentNode(urwid.ParentNode):
+ """ Data storage object for interior/parent nodes """
+ def load_widget(self):
+ return ExampleTreeWidget(self)
+
+ def load_child_keys(self):
+ data = self.get_value()
+ return range(len(data['children']))
+
+ def load_child_node(self, key):
+ """Return either an ExampleNode or ExampleParentNode"""
+ childdata = self.get_value()['children'][key]
+ childdepth = self.get_depth() + 1
+ if 'children' in childdata:
+ childclass = ExampleParentNode
+ else:
+ childclass = ExampleNode
+ return childclass(childdata, parent=self, key=key, depth=childdepth)
+
+
+class TreeToolsTest(unittest.TestCase):
+ def setUp(self):
+ self.data = dict(
+ name='Countries',
+ children=[
+ dict(
+ name='Ukraine',
+ children=[
+ dict(
+ name='Lviv'
+ ),
+ dict(
+ name='Kyiv'
+ )
+ ]
+ ),
+ dict(
+ name='United States of America',
+ children=[
+ dict(
+ name='New York'
+ ),
+ dict(
+ name='Los Angeles'
+ )
+ ]
+ )
+ ]
+ )
+ self.node = ExampleParentNode(self.data)
+ # self.tree = ExampleTreeWidget(self.node)
+ # self.tree.expanded = True
+ self.listbox = urwid.TreeListBox(urwid.TreeWalker(self.node))
+
+ self.expected_tree = dedent('''\
+ - Countries
+ - Ukraine
+ Lviv
+ Kyiv
+ - United States of America
+ New York
+ Los Angeles
+ ''')
+
+ def test_render_listbox(self):
+ canvas = self.listbox.render((30, 8))
+ lines = [
+ ''.join([
+ (block[2] if isinstance(block, tuple) else block).decode('utf-8')
+ for block
+ in line
+ ]).rstrip()
+ for line
+ in canvas.content()
+ ]
+ result = '\n'.join(lines)
+ self.assertEqual(result, self.expected_tree)
+