diff options
Diffstat (limited to 'test/test_shellutils.py')
-rw-r--r-- | test/test_shellutils.py | 244 |
1 files changed, 146 insertions, 98 deletions
diff --git a/test/test_shellutils.py b/test/test_shellutils.py index 49b06c7..8cb06ca 100644 --- a/test/test_shellutils.py +++ b/test/test_shellutils.py @@ -24,54 +24,96 @@ from unittest.mock import patch from logilab.common.testlib import TestCase, unittest_main -from logilab.common.shellutils import (globfind, find, ProgressBar, - RawInput) +from logilab.common.shellutils import globfind, find, ProgressBar, RawInput from logilab.common.compat import StringIO -DATA_DIR = join(dirname(abspath(__file__)), 'data', 'find_test') +DATA_DIR = join(dirname(abspath(__file__)), "data", "find_test") class FindTC(TestCase): def test_include(self): - files = set(find(DATA_DIR, '.py')) - self.assertSetEqual(files, - set([join(DATA_DIR, f) for f in ['__init__.py', 'module.py', - 'module2.py', 'noendingnewline.py', - 'nonregr.py', join('sub', 'momo.py')]])) - files = set(find(DATA_DIR, ('.py',), blacklist=('sub',))) - self.assertSetEqual(files, - set([join(DATA_DIR, f) for f in ['__init__.py', 'module.py', - 'module2.py', 'noendingnewline.py', - 'nonregr.py']])) + files = set(find(DATA_DIR, ".py")) + self.assertSetEqual( + files, + set( + [ + join(DATA_DIR, f) + for f in [ + "__init__.py", + "module.py", + "module2.py", + "noendingnewline.py", + "nonregr.py", + join("sub", "momo.py"), + ] + ] + ), + ) + files = set(find(DATA_DIR, (".py",), blacklist=("sub",))) + self.assertSetEqual( + files, + set( + [ + join(DATA_DIR, f) + for f in [ + "__init__.py", + "module.py", + "module2.py", + "noendingnewline.py", + "nonregr.py", + ] + ] + ), + ) def test_exclude(self): - files = set(find(DATA_DIR, ('.py', '.pyc'), exclude=True)) - self.assertSetEqual(files, - set([join(DATA_DIR, f) for f in ['foo.txt', - 'newlines.txt', - 'normal_file.txt', - 'test.ini', - 'test1.msg', - 'test2.msg', - 'spam.txt', - join('sub', 'doc.txt'), - 'write_protected_file.txt', - ]])) + files = set(find(DATA_DIR, (".py", ".pyc"), exclude=True)) + self.assertSetEqual( + files, + set( + [ + join(DATA_DIR, f) + for f in [ + "foo.txt", + "newlines.txt", + "normal_file.txt", + "test.ini", + "test1.msg", + "test2.msg", + "spam.txt", + join("sub", "doc.txt"), + "write_protected_file.txt", + ] + ] + ), + ) def test_globfind(self): - files = set(globfind(DATA_DIR, '*.py')) - self.assertSetEqual(files, - set([join(DATA_DIR, f) for f in ['__init__.py', 'module.py', - 'module2.py', 'noendingnewline.py', - 'nonregr.py', join('sub', 'momo.py')]])) - files = set(globfind(DATA_DIR, 'mo*.py')) - self.assertSetEqual(files, - set([join(DATA_DIR, f) for f in ['module.py', 'module2.py', - join('sub', 'momo.py')]])) - files = set(globfind(DATA_DIR, 'mo*.py', blacklist=('sub',))) - self.assertSetEqual(files, - set([join(DATA_DIR, f) for f in ['module.py', 'module2.py']])) + files = set(globfind(DATA_DIR, "*.py")) + self.assertSetEqual( + files, + set( + [ + join(DATA_DIR, f) + for f in [ + "__init__.py", + "module.py", + "module2.py", + "noendingnewline.py", + "nonregr.py", + join("sub", "momo.py"), + ] + ] + ), + ) + files = set(globfind(DATA_DIR, "mo*.py")) + self.assertSetEqual( + files, + set([join(DATA_DIR, f) for f in ["module.py", "module2.py", join("sub", "momo.py")]]), + ) + files = set(globfind(DATA_DIR, "mo*.py", blacklist=("sub",))) + self.assertSetEqual(files, set([join(DATA_DIR, f) for f in ["module.py", "module2.py"]])) class ProgressBarTC(TestCase): @@ -79,9 +121,11 @@ class ProgressBarTC(TestCase): pgb_stream = StringIO() expected_stream = StringIO() pgb = ProgressBar(20, stream=pgb_stream) - self.assertEqual(pgb_stream.getvalue(), expected_stream.getvalue()) # nothing print before refresh + self.assertEqual( + pgb_stream.getvalue(), expected_stream.getvalue() + ) # nothing print before refresh pgb.refresh() - expected_stream.write("\r["+' '*20+"]") + expected_stream.write("\r[" + " " * 20 + "]") self.assertEqual(pgb_stream.getvalue(), expected_stream.getvalue()) def test_refresh_g_size(self): @@ -89,7 +133,7 @@ class ProgressBarTC(TestCase): expected_stream = StringIO() pgb = ProgressBar(20, 35, stream=pgb_stream) pgb.refresh() - expected_stream.write("\r["+' '*35+"]") + expected_stream.write("\r[" + " " * 35 + "]") self.assertEqual(pgb_stream.getvalue(), expected_stream.getvalue()) def test_refresh_l_size(self): @@ -97,27 +141,27 @@ class ProgressBarTC(TestCase): expected_stream = StringIO() pgb = ProgressBar(20, 3, stream=pgb_stream) pgb.refresh() - expected_stream.write("\r["+' '*3+"]") + expected_stream.write("\r[" + " " * 3 + "]") self.assertEqual(pgb_stream.getvalue(), expected_stream.getvalue()) - def _update_test(self, nbops, expected, size = None): + 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 + size = 20 else: pgb = ProgressBar(nbops, size, stream=pgb_stream) last = 0 for round in expected: - if not hasattr(round, '__int__'): + 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))+"]") + expected_stream.write("\r[" + ("=" * dots) + (" " * (size - dots)) + "]") self.assertEqual(pgb_stream.getvalue(), expected_stream.getvalue()) def test_default(self): @@ -125,16 +169,20 @@ class ProgressBarTC(TestCase): def test_nbops_gt_size(self): """Test the progress bar for nbops > size""" + def half(total): - for counter in range(1, total+1): + 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): + for counter in range(1, total + 1): yield counter * 2 + self._update_test(10, double(10)) def test_nbops_nomul_size(self): @@ -147,30 +195,29 @@ class ProgressBarTC(TestCase): def test_update_exact(self): pgb_stream = StringIO() expected_stream = StringIO() - size=20 + size = 20 pgb = ProgressBar(100, size, stream=pgb_stream) last = 0 for dots in range(10, 105, 15): pgb.update(dots, exact=True) dots //= 5 - expected_stream.write("\r["+('='*dots)+(' '*(size-dots))+"]") + expected_stream.write("\r[" + ("=" * dots) + (" " * (size - dots)) + "]") self.assertEqual(pgb_stream.getvalue(), expected_stream.getvalue()) def test_update_relative(self): pgb_stream = StringIO() expected_stream = StringIO() - size=20 + size = 20 pgb = ProgressBar(100, size, stream=pgb_stream) last = 0 for dots in range(5, 105, 5): pgb.update(5, exact=False) dots //= 5 - expected_stream.write("\r["+('='*dots)+(' '*(size-dots))+"]") + expected_stream.write("\r[" + ("=" * dots) + (" " * (size - dots)) + "]") self.assertEqual(pgb_stream.getvalue(), expected_stream.getvalue()) class RawInputTC(TestCase): - def auto_input(self, *args): self.input_args = args return self.input_answer @@ -180,61 +227,62 @@ class RawInputTC(TestCase): self.qa = RawInput(self.auto_input, null_printer) def test_ask_using_builtin_input(self): - with patch('builtins.input', return_value='no'): + with patch("builtins.input", return_value="no"): qa = RawInput() - answer = qa.ask('text', ('yes', 'no'), 'yes') - self.assertEqual(answer, 'no') + answer = qa.ask("text", ("yes", "no"), "yes") + self.assertEqual(answer, "no") def test_ask_default(self): - self.input_answer = '' - answer = self.qa.ask('text', ('yes', 'no'), 'yes') - self.assertEqual(answer, 'yes') - self.input_answer = ' ' - answer = self.qa.ask('text', ('yes', 'no'), 'yes') - self.assertEqual(answer, 'yes') + self.input_answer = "" + answer = self.qa.ask("text", ("yes", "no"), "yes") + self.assertEqual(answer, "yes") + self.input_answer = " " + answer = self.qa.ask("text", ("yes", "no"), "yes") + self.assertEqual(answer, "yes") def test_ask_case(self): - self.input_answer = 'no' - answer = self.qa.ask('text', ('yes', 'no'), 'yes') - self.assertEqual(answer, 'no') - self.input_answer = 'No' - answer = self.qa.ask('text', ('yes', 'no'), 'yes') - self.assertEqual(answer, 'no') - self.input_answer = 'NO' - answer = self.qa.ask('text', ('yes', 'no'), 'yes') - self.assertEqual(answer, 'no') - self.input_answer = 'nO' - answer = self.qa.ask('text', ('yes', 'no'), 'yes') - self.assertEqual(answer, 'no') - self.input_answer = 'YES' - answer = self.qa.ask('text', ('yes', 'no'), 'yes') - self.assertEqual(answer, 'yes') + self.input_answer = "no" + answer = self.qa.ask("text", ("yes", "no"), "yes") + self.assertEqual(answer, "no") + self.input_answer = "No" + answer = self.qa.ask("text", ("yes", "no"), "yes") + self.assertEqual(answer, "no") + self.input_answer = "NO" + answer = self.qa.ask("text", ("yes", "no"), "yes") + self.assertEqual(answer, "no") + self.input_answer = "nO" + answer = self.qa.ask("text", ("yes", "no"), "yes") + self.assertEqual(answer, "no") + self.input_answer = "YES" + answer = self.qa.ask("text", ("yes", "no"), "yes") + self.assertEqual(answer, "yes") def test_ask_prompt(self): - self.input_answer = '' - answer = self.qa.ask('text', ('yes', 'no'), 'yes') - self.assertEqual(self.input_args[0], 'text [Y(es)/n(o)]: ') - answer = self.qa.ask('text', ('y', 'n'), 'y') - self.assertEqual(self.input_args[0], 'text [Y/n]: ') - answer = self.qa.ask('text', ('n', 'y'), 'y') - self.assertEqual(self.input_args[0], 'text [n/Y]: ') - answer = self.qa.ask('text', ('yes', 'no', 'maybe', '1'), 'yes') - self.assertEqual(self.input_args[0], 'text [Y(es)/n(o)/m(aybe)/1]: ') + self.input_answer = "" + answer = self.qa.ask("text", ("yes", "no"), "yes") + self.assertEqual(self.input_args[0], "text [Y(es)/n(o)]: ") + answer = self.qa.ask("text", ("y", "n"), "y") + self.assertEqual(self.input_args[0], "text [Y/n]: ") + answer = self.qa.ask("text", ("n", "y"), "y") + self.assertEqual(self.input_args[0], "text [n/Y]: ") + answer = self.qa.ask("text", ("yes", "no", "maybe", "1"), "yes") + self.assertEqual(self.input_args[0], "text [Y(es)/n(o)/m(aybe)/1]: ") def test_ask_ambiguous(self): - self.input_answer = 'y' - self.assertRaises(Exception, self.qa.ask, 'text', ('yes', 'yep'), 'yes') + self.input_answer = "y" + self.assertRaises(Exception, self.qa.ask, "text", ("yes", "yep"), "yes") def test_confirm(self): - self.input_answer = 'y' - self.assertEqual(self.qa.confirm('Say yes'), True) - self.assertEqual(self.qa.confirm('Say yes', default_is_yes=False), True) - self.input_answer = 'n' - self.assertEqual(self.qa.confirm('Say yes'), False) - self.assertEqual(self.qa.confirm('Say yes', default_is_yes=False), False) - self.input_answer = '' - self.assertEqual(self.qa.confirm('Say default'), True) - self.assertEqual(self.qa.confirm('Say default', default_is_yes=False), False) - -if __name__ == '__main__': + self.input_answer = "y" + self.assertEqual(self.qa.confirm("Say yes"), True) + self.assertEqual(self.qa.confirm("Say yes", default_is_yes=False), True) + self.input_answer = "n" + self.assertEqual(self.qa.confirm("Say yes"), False) + self.assertEqual(self.qa.confirm("Say yes", default_is_yes=False), False) + self.input_answer = "" + self.assertEqual(self.qa.confirm("Say default"), True) + self.assertEqual(self.qa.confirm("Say default", default_is_yes=False), False) + + +if __name__ == "__main__": unittest_main() |