diff --git a/pubs/plugs/alias/alias.py b/pubs/plugs/alias/alias.py index 131b716..1543717 100644 --- a/pubs/plugs/alias/alias.py +++ b/pubs/plugs/alias/alias.py @@ -2,7 +2,6 @@ import subprocess import shlex from ...plugins import PapersPlugin -from ...configs import config from ...pubs_cmd import execute @@ -16,7 +15,7 @@ class Alias(object): self.parser = parser p = parser.add_parser(self.name, help='user defined command') p.add_argument('arguments', nargs='*', - help="arguments to be passed to the user defined command") + help="arguments to be passed to the user defined command") def command(self, conf, args): raise NotImplementedError @@ -61,8 +60,9 @@ class AliasPlugin(PapersPlugin): def __init__(self, conf): self.aliases = [] - for name, definition in conf['alias'].items(): - self.aliases.append(Alias.create_alias(name, definition)) + if 'alias' in conf['plugins']: + for name, definition in conf['plugins']['alias'].items(): + self.aliases.append(Alias.create_alias(name, definition)) def update_parser(self, subparsers): """Add subcommand to the provided subparser""" diff --git a/tests/test_plug_alias.py b/tests/test_plug_alias.py new file mode 100644 index 0000000..c15b986 --- /dev/null +++ b/tests/test_plug_alias.py @@ -0,0 +1,84 @@ +import unittest + +import dotdot + +import pubs +from pubs import config +from pubs.plugs.alias.alias import (Alias, AliasPlugin, CommandAlias, + ShellAlias) + + +def to_args(arg_str): + o = lambda: None # Dirty hack + o.prog = 'pubs' + o.arguments = arg_str.split(' ') + return o + + +class FakeExecuter(object): + + called = None + executed = None + + def call(self, obj, shell=None): + self.called = obj + + def execute(self, obj): + self.executed = obj + + +class AliasTestCase(unittest.TestCase): + + def setUp(self): + self.subprocess = FakeExecuter() + pubs.plugs.alias.alias.subprocess = self.subprocess + self.cmd_execute = FakeExecuter() + pubs.plugs.alias.alias.execute = self.cmd_execute.execute + + def testAlias(self): + alias = Alias.create_alias('print', 'open -w lpppp') + alias.command(None, to_args('CiteKey')) + self.assertIsNone(self.subprocess.called) + self.assertEqual(self.cmd_execute.executed, + ['pubs', 'open', '-w', 'lpppp', 'CiteKey']) + + def testShellAlias(self): + """This actually just test that subprocess.call is called. + """ + alias = Alias.create_alias('count', '!pubs list -k | wc -l') + alias.command(None, to_args('')) + self.assertIsNone(self.cmd_execute.executed) + self.assertIsNotNone(self.subprocess.called) + + +class AliasPluginTestCase(unittest.TestCase): + + def setUp(self): + self.conf = config.load_default_conf() + self.conf['plugins']['active'] = ['alias'] + + def testAliasPluginCreated(self): + self.plugin = AliasPlugin(self.conf) + + def testAliasPluginOneCommnand(self): + self.conf['plugins']['alias'] = {'print': 'open -w lpppp'} + self.plugin = AliasPlugin(self.conf) + self.assertEqual(len(self.plugin.aliases), 1) + self.assertEqual(type(self.plugin.aliases[0]), CommandAlias) + self.assertEqual(self.plugin.aliases[0].name, 'print') + self.assertEqual(self.plugin.aliases[0].definition, 'open -w lpppp') + + def testAliasPluginOneShell(self): + self.conf['plugins']['alias'] = {'count': '!pubs list -k | wc -l'} + self.plugin = AliasPlugin(self.conf) + self.assertEqual(len(self.plugin.aliases), 1) + self.assertEqual(type(self.plugin.aliases[0]), ShellAlias) + self.assertEqual(self.plugin.aliases[0].name, 'count') + self.assertEqual(self.plugin.aliases[0].definition, + 'pubs list -k | wc -l') + + def testAliasPluginTwoCommnands(self): + self.conf['plugins']['alias'] = {'print': 'open -w lpppp', + 'count': '!pubs list -k | wc -l'} + self.plugin = AliasPlugin(self.conf) + self.assertEqual(len(self.plugin.aliases), 2)