summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorpierre-yves david <pierre-yves.david@insa-lyon.fr>2008-06-29 13:13:36 +0200
committerpierre-yves david <pierre-yves.david@insa-lyon.fr>2008-06-29 13:13:36 +0200
commit1fafea83345699ead8c03a8b2b4a9f50de1574d1 (patch)
tree4ff6a7b2e179586105c9b1a045ee75fd732af21a
parent3daf637c8ad412afe43c683b74d714f30185388f (diff)
downloadlogilab-common-1fafea83345699ead8c03a8b2b4a9f50de1574d1.tar.gz
add test for ProgressBar
-rw-r--r--test/unittest_shellutils.py74
1 files changed, 73 insertions, 1 deletions
diff --git a/test/unittest_shellutils.py b/test/unittest_shellutils.py
index 0298ca2..5e63170 100644
--- a/test/unittest_shellutils.py
+++ b/test/unittest_shellutils.py
@@ -5,7 +5,8 @@ from os.path import join
from logilab.common.testlib import TestCase, unittest_main
-from logilab.common.fileutils import *
+from logilab.common.shellutils import find, ProgressBar
+from StringIO import StringIO
DATA_DIR = join('data','find_test')
@@ -40,5 +41,76 @@ class FindTC(TestCase):
# self.assertEquals(files_by_ext(DATA_DIR, include_exts=('.py',), exclude_dirs=(DATA_DIR,)),
# [])
+class ProgressBarTC(TestCase):
+ def test_refresh(self):
+ pgb_stream = StringIO()
+ expected_stream = StringIO()
+ pgb = ProgressBar(20,stream=pgb_stream)
+ self.assertEquals(pgb_stream.getvalue(), expected_stream.getvalue()) # nothing print before refresh
+ pgb.refresh()
+ expected_stream.write("\r["+' '*20+"]")
+ self.assertEquals(pgb_stream.getvalue(), expected_stream.getvalue())
+
+ def test_refresh_g_size(self):
+ pgb_stream = StringIO()
+ expected_stream = StringIO()
+ pgb = ProgressBar(20,35,stream=pgb_stream)
+ pgb.refresh()
+ expected_stream.write("\r["+' '*35+"]")
+ self.assertEquals(pgb_stream.getvalue(), expected_stream.getvalue())
+
+ def test_refresh_l_size(self):
+ pgb_stream = StringIO()
+ expected_stream = StringIO()
+ pgb = ProgressBar(20,3,stream=pgb_stream)
+ pgb.refresh()
+ expected_stream.write("\r["+' '*3+"]")
+ self.assertEquals(pgb_stream.getvalue(), expected_stream.getvalue())
+
+ def _update_test(self, nbops, expected, size = None):
+ pgb_stream = StringIO()
+ expected_stream = StringIO()
+ if size is None:
+ pgb = ProgressBar(nbops, stream=pgb_stream)
+ size=20
+ else:
+ pgb = ProgressBar(nbops, size, stream=pgb_stream)
+ last = 0
+ for round in expected:
+ if not hasattr(round, '__int__'):
+ dots, update = round
+ else:
+ dots, update = round, None
+ pgb.update()
+ if update or (update is None and dots != last):
+ last = dots
+ expected_stream.write("\r["+('.'*dots)+(' '*(size-dots))+"]")
+ self.assertEquals(pgb_stream.getvalue(), expected_stream.getvalue())
+
+ def test_default(self):
+ self._update_test(20, xrange(1,21))
+
+ def test_nbops_gt_size(self):
+ """Test the progress bar for nbops > size"""
+ def half(total):
+ for counter in range(1,total+1):
+ yield counter / 2
+ self._update_test(40, half(40))
+
+ def test_nbops_lt_size(self):
+ """Test the progress bar for nbops < size"""
+ def double(total):
+ for counter in range(1,total+1):
+ yield counter * 2
+ self._update_test(10, double(10))
+
+ def test_nbops_nomul_size(self):
+ """Test the progress bar for size % nbops !=0 (non int number of dots per update)"""
+ self._update_test(3, (6,13,20))
+
+ def test_overflow(self):
+ self._update_test(5, (8, 16, 25, 33, 42, (42, True)), size=42)
+
+
if __name__ == '__main__':
unittest_main()