~schettino72/doit/trunk

« back to all changes in this revision

Viewing changes to tests/test_loader.py

  • Committer: schettino72
  • Date: 2012-03-15 16:47:06 UTC
  • Revision ID: schettino72-20120315164706-cw6smkoailsxopeb
allow task generators to yield task generators.

Show diffs side-by-side

added added

removed removed

Lines of Context:
5
5
from doit.exceptions import InvalidDodoFile, InvalidCommand
6
6
from doit.task import InvalidTask, Task
7
7
from doit.loader import load_task_generators, generate_tasks, get_tasks
8
 
from doit.loader import isgenerator, get_module
 
8
from doit.loader import isgenerator, flat_generator, get_module
9
9
 
10
10
 
11
11
class TestIsGenerator(object):
22
22
        assert not isgenerator(giveme())
23
23
 
24
24
 
 
25
class TestFlatGenerator(object):
 
26
    def test_nested(self):
 
27
        def myg(items):
 
28
            for x in items:
 
29
                yield x
 
30
        flat = flat_generator(myg([1, myg([2, myg([3, myg([4, myg([5])])])])]))
 
31
        assert [1,2,3,4,5] == list(flat)
 
32
 
 
33
 
25
34
class TestGenerateTasks(object):
26
35
 
27
36
    def testDict(self):
28
 
        tasks = generate_tasks("dict",{'actions':['xpto 14']})
 
37
        tasks = generate_tasks("my_name", {'actions':['xpto 14']})
29
38
        assert isinstance(tasks[0],Task)
30
39
 
31
40
    # name field is only for subtasks.
32
41
    def testInvalidNameField(self):
33
 
        pytest.raises(InvalidTask, generate_tasks, "dict",
 
42
        pytest.raises(InvalidTask, generate_tasks, "my_name",
34
43
                                 {'actions':['xpto 14'],'name':'bla bla'})
35
44
 
36
45
    def testInvalidValue(self):
47
56
        assert not tasks[0].is_subtask
48
57
        assert tasks[1].is_subtask
49
58
 
 
59
 
 
60
    def testMultiLevelGenerator(self):
 
61
        def f_xpto(base_name):
 
62
            for i in range(3):
 
63
                name = "%s-%d" % (base_name, i)
 
64
                yield {'name':name, 'actions' :["xpto -%d"%i]}
 
65
        def f_first_level():
 
66
            for i in range(2):
 
67
                yield f_xpto(str(i))
 
68
        tasks = generate_tasks("xpto", f_first_level())
 
69
        assert isinstance(tasks[0], Task)
 
70
        assert 7 == len(tasks)
 
71
        assert not tasks[0].is_subtask
 
72
        assert tasks[1].is_subtask
 
73
        assert "xpto:0-0" == tasks[1].name
 
74
        assert "xpto:1-2" == tasks[-1].name
 
75
 
 
76
 
50
77
    def testGeneratorDoesntReturnDict(self):
51
78
        def f_xpto():
52
79
            for i in range(3):