1
import pymake.data, pymake.functions, pymake.util
4
from cStringIO import StringIO
7
for name in cls.testdata.iterkeys():
8
def m(self, name=name):
9
return self.runSingle(*self.testdata[name])
11
setattr(cls, 'test_%s' % name, m)
14
class SplitWordsTest(unittest.TestCase):
16
(' test test.c test.o ', ['test', 'test.c', 'test.o']),
17
('\ttest\t test.c \ntest.o', ['test', 'test.c', 'test.o']),
21
for s, e in self.testdata:
23
self.assertEqual(w, e, 'splitwords(%r)' % (s,))
25
class GetPatSubstTest(unittest.TestCase):
27
('%.c', '%.o', ' test test.c test.o ', 'test test.o test.o'),
28
('%', '%.o', ' test.c test.o ', 'test.c.o test.o.o'),
29
('foo', 'bar', 'test foo bar', 'test bar bar'),
30
('foo', '%bar', 'test foo bar', 'test %bar bar'),
31
('%', 'perc_%', 'path', 'perc_path'),
32
('\\%', 'sub%', 'p %', 'p sub%'),
33
('%.c', '\\%%.o', 'foo.c bar.o baz.cpp', '%foo.o bar.o baz.cpp'),
37
for s, r, d, e in self.testdata:
39
p = pymake.data.Pattern(s)
40
a = ' '.join((p.subst(r, word, False)
42
self.assertEqual(a, e, 'Pattern(%r).subst(%r, %r)' % (s, r, d))
44
class LRUTest(unittest.TestCase):
45
# getkey, expected, funccount, debugitems
52
(2, ' ', 5, (2, 0, 1)),
53
(1, ' ', 5, (1, 2, 0)),
54
(3, ' ', 6, (3, 1, 2)),
57
def spaceFunc(self, l):
63
c = pymake.util.LRUCache(3, self.spaceFunc, lambda k, v: k % 2)
64
self.assertEqual(tuple(c.debugitems()), ())
66
for i in xrange(0, len(self.expected)):
67
k, e, fc, di = self.expected[i]
70
self.assertEqual(v, e)
71
self.assertEqual(self.funccount, fc,
72
"funccount, iteration %i, got %i expected %i" % (i, self.funccount, fc))
73
goti = tuple(c.debugitems())
74
self.assertEqual(goti, di,
75
"debugitems, iteration %i, got %r expected %r" % (i, goti, di))
77
class EqualityTest(unittest.TestCase):
78
def test_string_expansion(self):
79
s1 = pymake.data.StringExpansion('foo bar', None)
80
s2 = pymake.data.StringExpansion('foo bar', None)
82
self.assertEqual(s1, s2)
84
def test_expansion_simple(self):
85
s1 = pymake.data.Expansion(None)
86
s2 = pymake.data.Expansion(None)
88
self.assertEqual(s1, s2)
92
self.assertEqual(s1, s2)
94
def test_expansion_string_finish(self):
95
"""Adjacent strings should normalize to same value."""
96
s1 = pymake.data.Expansion(None)
97
s2 = pymake.data.Expansion(None)
104
s2.appendstr(' bar baz')
106
self.assertEqual(s1, s2)
108
def test_function(self):
109
s1 = pymake.data.Expansion(None)
110
s2 = pymake.data.Expansion(None)
112
n1 = pymake.data.StringExpansion('FOO', None)
113
n2 = pymake.data.StringExpansion('FOO', None)
115
v1 = pymake.functions.VariableRef(None, n1)
116
v2 = pymake.functions.VariableRef(None, n2)
121
self.assertEqual(s1, s2)
124
class StringExpansionTest(unittest.TestCase):
125
def test_base_expansion_interface(self):
126
s1 = pymake.data.StringExpansion('FOO', None)
128
self.assertTrue(s1.is_static_string)
130
funcs = list(s1.functions())
131
self.assertEqual(len(funcs), 0)
133
funcs = list(s1.functions(True))
134
self.assertEqual(len(funcs), 0)
136
refs = list(s1.variable_references())
137
self.assertEqual(len(refs), 0)
140
class ExpansionTest(unittest.TestCase):
141
def test_is_static_string(self):
142
e1 = pymake.data.Expansion()
145
self.assertTrue(e1.is_static_string)
148
self.assertTrue(e1.is_static_string)
150
vname = pymake.data.StringExpansion('FOO', None)
151
func = pymake.functions.VariableRef(None, vname)
155
self.assertFalse(e1.is_static_string)
157
def test_get_functions(self):
158
e1 = pymake.data.Expansion()
161
vname1 = pymake.data.StringExpansion('FOO', None)
162
vname2 = pymake.data.StringExpansion('BAR', None)
164
func1 = pymake.functions.VariableRef(None, vname1)
165
func2 = pymake.functions.VariableRef(None, vname2)
170
funcs = list(e1.functions())
171
self.assertEqual(len(funcs), 2)
173
func3 = pymake.functions.SortFunction(None)
178
funcs = list(e1.functions())
179
self.assertEqual(len(funcs), 3)
181
refs = list(e1.variable_references())
182
self.assertEqual(len(refs), 2)
184
def test_get_functions_descend(self):
185
e1 = pymake.data.Expansion()
186
vname1 = pymake.data.StringExpansion('FOO', None)
187
func1 = pymake.functions.VariableRef(None, vname1)
188
e2 = pymake.data.Expansion()
191
func2 = pymake.functions.SortFunction(None)
196
funcs = list(e1.functions())
197
self.assertEqual(len(funcs), 1)
199
funcs = list(e1.functions(True))
200
self.assertEqual(len(funcs), 2)
202
self.assertTrue(isinstance(funcs[0], pymake.functions.SortFunction))
204
def test_is_filesystem_dependent(self):
205
e = pymake.data.Expansion()
206
vname1 = pymake.data.StringExpansion('FOO', None)
207
func1 = pymake.functions.VariableRef(None, vname1)
210
self.assertFalse(e.is_filesystem_dependent)
212
func2 = pymake.functions.WildcardFunction(None)
216
self.assertTrue(e.is_filesystem_dependent)
218
def test_is_filesystem_dependent_descend(self):
219
sort = pymake.functions.SortFunction(None)
220
wildcard = pymake.functions.WildcardFunction(None)
222
e = pymake.data.StringExpansion('foo/*', None)
225
e = pymake.data.Expansion(None)
226
e.appendfunc(wildcard)
230
e = pymake.data.Expansion(None)
233
self.assertTrue(e.is_filesystem_dependent)
236
if __name__ == '__main__':