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
|
from six import StringIO
import pytest
from doit.exceptions import InvalidCommand
from doit.task import Task
from doit.cmd_clean import Clean
class TestCmdClean(object):
@pytest.fixture
def tasks(self, request):
self.cleaned = []
def myclean(name):
self.cleaned.append(name)
return [
Task("t1", None, task_dep=['t2'], clean=[(myclean,('t1',))]),
Task("t2", None, clean=[(myclean,('t2',))]),
Task("t3", None, task_dep=['t3:a'], has_subtask=True,
clean=[(myclean,('t3',))]),
Task("t3:a", None, clean=[(myclean,('t3:a',))], is_subtask=True),
Task("t4", None, task_dep=['t1'], clean=[(myclean,('t4',))] ),
]
def test_clean_all(self, tasks):
output = StringIO()
cmd_clean = Clean(outstream=output, task_list=tasks)
cmd_clean._execute(False, False, True)
assert ['t1','t2', 't3:a', 't3', 't4'] == self.cleaned
def test_clean_default(self, tasks):
output = StringIO()
cmd_clean = Clean(outstream=output, task_list=tasks,
config={'default_tasks':['t1']})
cmd_clean._execute(False, False, False)
# default enable --clean-dep by default
assert ['t2', 't1'] == self.cleaned
def test_clean_default_all(self, tasks):
output = StringIO()
cmd_clean = Clean(outstream=output, task_list=tasks)
cmd_clean._execute(False, False, False)
# default enable --clean-dep by default
assert set(['t1','t2', 't3:a', 't3', 't4']) == set(self.cleaned)
def test_clean_selected(self, tasks):
output = StringIO()
cmd_clean = Clean(outstream=output, task_list=tasks,
config={'default_tasks':['t1']})
cmd_clean._execute(False, False, False, ['t2'])
assert ['t2'] == self.cleaned
def test_clean_taskdep(self, tasks):
output = StringIO()
cmd_clean = Clean(outstream=output, task_list=tasks)
cmd_clean._execute(False, True, False, ['t1'])
assert ['t2', 't1'] == self.cleaned
def test_clean_taskdep_recursive(self, tasks):
output = StringIO()
cmd_clean = Clean(outstream=output, task_list=tasks)
cmd_clean._execute(False, True, False, ['t4'])
assert ['t2', 't1', 't4'] == self.cleaned
def test_clean_subtasks(self, tasks):
output = StringIO()
cmd_clean = Clean(outstream=output, task_list=tasks)
cmd_clean._execute(False, False, False, ['t3'])
assert ['t3:a', 't3'] == self.cleaned
def test_clean_taskdep_once(self, tasks):
# do not execute clean operation more than once
output = StringIO()
cmd_clean = Clean(outstream=output, task_list=tasks)
cmd_clean._execute(False, True, False, ['t1', 't2'])
assert ['t2', 't1'] == self.cleaned
def test_clean_invalid_task(self, tasks):
output = StringIO()
cmd_clean = Clean(outstream=output, task_list=tasks,
config={'default_tasks':['t1']})
pytest.raises(InvalidCommand, cmd_clean._execute,
False, False, False, ['xxxx'])
|