From bdb033c20bcb316d9b61c72282ad62fa8c576070 Mon Sep 17 00:00:00 2001 From: Louis Date: Sun, 17 Jan 2016 19:21:35 +0100 Subject: [PATCH] `patatools cache` improvements - Better handling of arguments - Tests --- patacrep/songbook/__main__.py | 7 ++--- patacrep/tools/__main__.py | 9 +++--- patacrep/tools/cache/__main__.py | 18 +++++------ test/test_patatools/test_cache.py | 52 +++++++++++++++++++++++-------- 4 files changed, 55 insertions(+), 31 deletions(-) diff --git a/patacrep/songbook/__main__.py b/patacrep/songbook/__main__.py index daafc9f5..bac1c5ea 100644 --- a/patacrep/songbook/__main__.py +++ b/patacrep/songbook/__main__.py @@ -113,9 +113,8 @@ def argument_parser(args): return options -def main(): +def main(args): """Main function:""" - # set script locale to match user's try: locale.setlocale(locale.LC_ALL, '') @@ -123,7 +122,7 @@ def main(): # Locale is not installed on user's system, or wrongly configured. LOGGER.error("Locale error: {}\n".format(str(error))) - options = argument_parser(sys.argv[1:]) + options = argument_parser(args[1:]) try: songbook = patacrep.songbook.open_songbook(options.book[-1]) @@ -152,4 +151,4 @@ def main(): sys.exit(0) if __name__ == '__main__': - main() + main(sys.argv) diff --git a/patacrep/tools/__main__.py b/patacrep/tools/__main__.py index d9202633..669dcec7 100644 --- a/patacrep/tools/__main__.py +++ b/patacrep/tools/__main__.py @@ -104,12 +104,11 @@ def commandline_parser(): return parser -def main(): +def main(args): """Main function""" - parser = commandline_parser() - args = parser.parse_args() - args.function(args.remainder) + args = parser.parse_args(args[1:]) + args.function(["patatools-{}".format(args.subcommand)] + args.remainder) if __name__ == "__main__": - main() + main(sys.argv) diff --git a/patacrep/tools/cache/__main__.py b/patacrep/tools/cache/__main__.py index 8dc2ee07..4aa8b2ec 100644 --- a/patacrep/tools/cache/__main__.py +++ b/patacrep/tools/cache/__main__.py @@ -37,32 +37,32 @@ def commandline_parser(): ) subparsers.required = True - clear = subparsers.add_parser( - "clear", + clean = subparsers.add_parser( + "clean", description="Delete cache.", help="Delete cache.", ) - clear.add_argument( + clean.add_argument( 'songbook', metavar="SONGBOOK", help=textwrap.dedent("""Songbook file to be used to look for cache path."""), type=filename, ) - clear.set_defaults(command=do_clear) + clean.set_defaults(command=do_clean) return parser -def do_clear(namespace): - """Execute the `patatools cache clear` command.""" +def do_clean(namespace): + """Execute the `patatools cache clean` command.""" for datadir in songbook.open_songbook(namespace.songbook)['datadir']: cachedir = os.path.join(datadir, ".cache") LOGGER.info("Deleting cache directory '{}'...".format(cachedir)) if os.path.isdir(cachedir): shutil.rmtree(cachedir) -def main(args=None): +def main(args): """Main function: run from command line.""" - options = commandline_parser().parse_args(args) + options = commandline_parser().parse_args(args[1:]) try: options.command(options) except errors.SongbookError as error: @@ -70,4 +70,4 @@ def main(args=None): sys.exit(1) if __name__ == "__main__": - main() + main(sys.argv) diff --git a/test/test_patatools/test_cache.py b/test/test_patatools/test_cache.py index daa47af1..6b22a74d 100644 --- a/test/test_patatools/test_cache.py +++ b/test/test_patatools/test_cache.py @@ -6,9 +6,12 @@ import os import shutil import unittest -from patacrep.tools import convert +from patacrep.files import chdir +from patacrep.tools.__main__ import main as tools_main +from patacrep.tools.cache.__main__ import main as cache_main +from patacrep.songbook.__main__ import main as songbook_main -CACHEDIR = os.path.join(os.path.dirname(__file__), "test_cache_datadir", "songs", ".cache") +CACHEDIR = os.path.join(os.path.dirname(__file__), "test_cache_datadir", ".cache") class TestCache(unittest.TestCase): """Test of the "patatools cache" subcommand""" @@ -16,26 +19,49 @@ class TestCache(unittest.TestCase): def setUp(self): """Remove cache.""" self._remove_cache() + self.assertFalse(os.path.exists(CACHEDIR)) def tearDown(self): """Remove cache.""" self._remove_cache() + self.assertFalse(os.path.exists(CACHEDIR)) - def _remove_cache(self): + @staticmethod + def _remove_cache(): """Delete cache.""" shutil.rmtree(CACHEDIR, ignore_errors=True) - def test_clean(self): + def _system(self, main, args): + with chdir(os.path.dirname(__file__)): + try: + main(args) + except SystemExit as systemexit: + self.assertEqual(systemexit.code, 0) + + def test_clean_exists(self): """Test of the "patatools cache clean" subcommand""" - # Cache does not exist - self.assertFalse(os.path.exists(CACHEDIR)) + for main, args in [ + (tools_main, ["patatools", "cache", "clean", "test_cache.sb"]), + (cache_main, ["patatools-cache", "clean", "test_cache.sb"]), + ]: + with self.subTest(main=main, args=args): + # First compilation. Ensure that cache exists afterwards + self._system(songbook_main, ["songbook", "test_cache.sb"]) + self.assertTrue(os.path.exists(CACHEDIR)) - # First compilation. Ensure that cache exists afterwards - TODO - self.assertTrue(os.path.exists(CACHEDIR)) + # Clean cache + self._system(main, args) - # Clean cache - TODO + # Ensure that cache does not exist + self.assertFalse(os.path.exists(CACHEDIR)) - # Ensure that cache does not exist - self.assertFalse(os.path.exists(CACHEDIR)) + def test_clean_not_exists(self): + """Test of the "patatools cache clean" subcommand""" + # Clean non-existent cache + for main, args in [ + (tools_main, ["patatools", "cache", "clean", "test_cache.sb"]), + (cache_main, ["patatools-cache", "clean", "test_cache.sb"]), + ]: + with self.subTest(main=main, args=args): + # Clean cache + self._system(main, args)