Handle build errors.
[scons.git] / src / engine / SCons / Node / NodeTests.py
1 __revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__"
2
3 import os
4 import sys
5 import unittest
6
7 import SCons.Errors
8 import SCons.Node
9
10
11
12 built_it = None
13
14 class Builder:
15     def execute(self, **kw):
16         global built_it
17         built_it = 1
18         return 0
19
20 class FailBuilder:
21     def execute(self, **kw):
22         return 1
23
24 class Environment:
25     def Dictionary(self, *args):
26         pass
27
28
29
30 class NodeTestCase(unittest.TestCase):
31
32     def test_BuildException(self):
33         """Test throwing an exception on build failure.
34         """
35         node = SCons.Node.Node()
36         node.builder_set(FailBuilder())
37         node.env_set(Environment())
38         try:
39             node.build()
40         except SCons.Errors.BuildError:
41             pass
42         else:
43             raise TestFailed, "did not catch expected BuildError"
44
45     def test_build(self):
46         """Test building a node
47         """
48         node = SCons.Node.Node()
49         node.builder_set(Builder())
50         node.env_set(Environment())
51         node.path = "xxx"       # XXX FAKE SUBCLASS ATTRIBUTE
52         node.sources = "yyy"    # XXX FAKE SUBCLASS ATTRIBUTE
53         node.build()
54         assert built_it
55
56     def test_builder_set(self):
57         """Test setting a Node's Builder
58         """
59         node = SCons.Node.Node()
60         b = Builder()
61         node.builder_set(b)
62         assert node.builder == b
63
64     def test_env_set(self):
65         """Test setting a Node's Environment
66         """
67         node = SCons.Node.Node()
68         e = Environment()
69         node.env_set(e)
70         assert node.env == e
71
72     def test_has_signature(self):
73         """Test whether or not a node has a signature
74         """
75         node = SCons.Node.Node()
76         assert not node.has_signature()
77         node.set_signature('xxx')
78         assert node.has_signature()
79
80     def test_set_signature(self):
81         """Test setting a Node's signature
82         """
83         node = SCons.Node.Node()
84         node.set_signature('yyy')
85         assert node.signature == 'yyy'
86
87     def test_get_signature(self):
88         """Test fetching a Node's signature
89         """
90         node = SCons.Node.Node()
91         node.set_signature('zzz')
92         assert node.get_signature() == 'zzz'
93
94     def test_add_dependency(self):
95         """Test adding dependencies to a Node's list.
96         """
97         node = SCons.Node.Node()
98         assert node.depends == []
99         try:
100             node.add_dependency('zero')
101         except TypeError:
102             pass
103         node.add_dependency(['one'])
104         assert node.depends == ['one']
105         node.add_dependency(['two', 'three'])
106         assert node.depends == ['one', 'two', 'three']
107
108     def test_add_source(self):
109         """Test adding sources to a Node's list.
110         """
111         node = SCons.Node.Node()
112         assert node.sources == []
113         try:
114             node.add_source('zero')
115         except TypeError:
116             pass
117         node.add_source(['one'])
118         assert node.sources == ['one']
119         node.add_source(['two', 'three'])
120         assert node.sources == ['one', 'two', 'three']
121
122
123
124 if __name__ == "__main__":
125     suite = unittest.makeSuite(NodeTestCase, 'test_')
126     if not unittest.TextTestRunner().run(suite).wasSuccessful():
127         sys.exit(1)