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

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):
6 years ago
self.plugin = AliasPlugin(self.conf, None)
def testAliasPluginOneCommnand(self):
self.conf['plugins']['alias'] = {'print': 'open -w lpppp'}
6 years ago
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'}
6 years ago
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'}
6 years ago
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'}}
6 years ago
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'}}
6 years ago
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'}
6 years ago
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'}}
6 years ago
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')
6 years ago
if __name__ == '__main__':
unittest.main()