You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
168 lines
6.6 KiB
168 lines
6.6 KiB
import shlex
|
|
import unittest
|
|
import dotdot
|
|
import argparse
|
|
|
|
import pubs
|
|
from pubs import config
|
|
from pubs.plugs.alias.alias import (Alias, AliasPlugin, CommandAlias,
|
|
ShellAlias)
|
|
|
|
|
|
def to_args(arg_strings):
|
|
o = lambda: None # Dirty hack
|
|
o.prog = 'pubs'
|
|
o.arguments = arg_strings
|
|
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)
|
|
|
|
def testShellAliasEscapes(self):
|
|
alias = Alias.create_alias('count', '!echo "$@"')
|
|
args = ['a b c', "d,e f\""]
|
|
alias.command(None, to_args(args))
|
|
self.assertIsNone(self.cmd_execute.executed)
|
|
self.assertIsNotNone(self.subprocess.called)
|
|
self.assertEqual(
|
|
shlex.split(self.subprocess.called.splitlines()[-1])[1:],
|
|
args)
|
|
|
|
def testShellAliasNamedArguments(self):
|
|
parser = argparse.ArgumentParser()
|
|
parser.add_argument('--test2')
|
|
subparsers = parser.add_subparsers(title='commands', dest='command')
|
|
|
|
alias = Alias.create_alias('test', '!echo "$@"')
|
|
alias.parser(subparsers)
|
|
args = ['test', '2', '--option', '3']
|
|
args = parser.parse_args(args)
|
|
|
|
self.assertEqual(args.command, 'test')
|
|
self.assertListEqual(args.arguments, ['2', '--option', '3'])
|
|
|
|
|
|
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, None)
|
|
|
|
def testAliasPluginOneCommnand(self):
|
|
self.conf['plugins']['alias'] = {'print': 'open -w lpppp'}
|
|
self.plugin = AliasPlugin(self.conf, None)
|
|
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, None)
|
|
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, None)
|
|
self.assertEqual(len(self.plugin.aliases), 2)
|
|
|
|
def testAliasPluginNestedDefinitionType(self):
|
|
self.conf['plugins']['alias'] = {'print': {'description': 'print this',
|
|
'command': 'open -w lpppp'}}
|
|
self.plugin = AliasPlugin(self.conf, None)
|
|
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].description, 'print this')
|
|
self.assertEqual(self.plugin.aliases[0].definition, 'open -w lpppp')
|
|
|
|
def testAliasPluginNestedDefinitionNoDescription(self):
|
|
self.conf['plugins']['alias'] = {'print': {'command': 'open -w lpppp'}}
|
|
self.plugin = AliasPlugin(self.conf, None)
|
|
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].description,
|
|
'user alias for `open -w lpppp`')
|
|
self.assertEqual(self.plugin.aliases[0].definition, 'open -w lpppp')
|
|
|
|
def testAliasPluginMixedDefinitionTypes(self):
|
|
self.conf['plugins']['alias'] = {'print': {'description': 'print this',
|
|
'command': 'open -w lpppp'},
|
|
'count': '!pubs list -k | wc -l'}
|
|
self.plugin = AliasPlugin(self.conf, None)
|
|
self.plugin.aliases = sorted(self.plugin.aliases, key=lambda a: a.name)
|
|
|
|
self.assertEqual(len(self.plugin.aliases), 2)
|
|
self.assertEqual(type(self.plugin.aliases[1]), CommandAlias)
|
|
self.assertEqual(type(self.plugin.aliases[0]), ShellAlias)
|
|
|
|
self.assertEqual(self.plugin.aliases[0].name, 'count')
|
|
self.assertEqual(self.plugin.aliases[0].description,
|
|
'user alias for `pubs list -k | wc -l`')
|
|
self.assertEqual(self.plugin.aliases[0].definition,
|
|
'pubs list -k | wc -l')
|
|
|
|
self.assertEqual(self.plugin.aliases[1].name, 'print')
|
|
self.assertEqual(self.plugin.aliases[1].description, 'print this')
|
|
self.assertEqual(self.plugin.aliases[1].definition, 'open -w lpppp')
|
|
|
|
def testAliasPluginWrongDefinitionOrder(self):
|
|
self.conf['plugins']['alias'] = {'print': {'description': 'print this',
|
|
'command': 'open -w lpppp',
|
|
'count': '!pubs list -k | wc -l'}}
|
|
self.plugin = AliasPlugin(self.conf, None)
|
|
|
|
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].description, 'print this')
|
|
self.assertEqual(self.plugin.aliases[0].definition, 'open -w lpppp')
|
|
|
|
|
|
|
|
if __name__ == '__main__':
|
|
unittest.main()
|