1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110
|
from six import StringIO
import pytest
from doit.exceptions import InvalidCommand
from doit.cmdparse import CmdOption
from doit.task import Task
from doit.cmd_base import Command, TaskLoader, DodoTaskLoader
from doit.cmd_completion import TabCompletion
from doit.doit_cmd import DoitMain
# doesnt test the shell scripts. just test its creation!
class FakeLoader(TaskLoader):
def load_tasks(self, cmd, params, args):
task_list = [
Task("t1", None, ),
Task("t2", None, task_dep=['t2:a'], has_subtask=True, ),
Task("t2:a", None, is_subtask=True),
]
return task_list, {}
@pytest.fixture
def doit_app(request):
app = DoitMain()
app.sub_cmds['tabcompletion'] = TabCompletion()
return app
def test_invalid_shell_option(doit_app):
cmd = TabCompletion()
pytest.raises(InvalidCommand, cmd.execute,
{'shell':'another_shell', 'hardcode_tasks': False}, [])
class TestCmdCompletionBash(object):
def test_with_dodo__dinamic_tasks(self, doit_app):
output = StringIO()
cmd = TabCompletion(task_loader=DodoTaskLoader(), outstream=output)
cmd.doit_app = doit_app
cmd.execute({'shell':'bash', 'hardcode_tasks': False}, [])
got = output.getvalue()
assert 'dodof' in got
assert 't1' not in got
assert 'tabcompletion' in got
def test_no_dodo__hardcoded_tasks(self, doit_app):
output = StringIO()
cmd = TabCompletion(task_loader=FakeLoader(), outstream=output)
cmd.doit_app = doit_app
cmd.execute({'shell':'bash', 'hardcode_tasks': True}, [])
got = output.getvalue()
assert 'dodo.py' not in got
assert 't1' in got
class TestCmdCompletionZsh(object):
def test_zsh_arg_line(self):
opt1 = CmdOption({'name':'o1', 'default':'', 'help':'my desc'})
assert '' == TabCompletion._zsh_arg_line(opt1)
opt2 = CmdOption({'name':'o2', 'default':'', 'help':'my desc',
'short':'s'})
assert "'-s[my desc]' \\" == TabCompletion._zsh_arg_line(opt2)
opt3 = CmdOption({'name':'o3', 'default':'', 'help':'my desc',
'long':'lll'})
assert "'--lll[my desc]' \\" == TabCompletion._zsh_arg_line(opt3)
opt4 = CmdOption({'name':'o4', 'default':'', 'help':'my desc [b]a',
'short':'s', 'long':'lll'})
assert ("'(-s|--lll)'{-s,--lll}'[my desc [b\]a]' \\" ==
TabCompletion._zsh_arg_line(opt4))
def test_cmd_arg_list(self, doit_app):
no_args = TabCompletion._zsh_arg_list(Command())
assert "'*::task:(($tasks))'" not in no_args
assert "'::cmd:(($commands))'" not in no_args
class CmdTakeTasks(Command):
doc_usage = '[TASK ...]'
with_task_args = TabCompletion._zsh_arg_list(CmdTakeTasks())
assert "'*::task:(($tasks))'" in with_task_args
assert "'::cmd:(($commands))'" not in with_task_args
class CmdTakeCommands(Command):
doc_usage = '[COMMAND ...]'
with_cmd_args = TabCompletion._zsh_arg_list(CmdTakeCommands())
assert "'*::task:(($tasks))'" not in with_cmd_args
assert "'::cmd:(($commands))'" in with_cmd_args
def test_cmds_with_params(self, doit_app):
output = StringIO()
cmd = TabCompletion(task_loader=DodoTaskLoader(), outstream=output)
cmd.doit_app = doit_app
cmd.execute({'shell':'zsh', 'hardcode_tasks': False}, [])
got = output.getvalue()
assert "tabcompletion: generate script" in got
def test_hardcoded_tasks(self, doit_app):
output = StringIO()
cmd = TabCompletion(task_loader=FakeLoader(), outstream=output)
cmd.doit_app = doit_app
cmd.execute({'shell':'zsh', 'hardcode_tasks': True}, [])
got = output.getvalue()
assert 't1' in got
|