pjs/build/pymake/tests/datatests.py

79 строки
2.5 KiB
Python

import pymake.data, pymake.util
import unittest
import re
from cStringIO import StringIO
def multitest(cls):
for name in cls.testdata.iterkeys():
def m(self, name=name):
return self.runSingle(*self.testdata[name])
setattr(cls, 'test_%s' % name, m)
return cls
class SplitWordsTest(unittest.TestCase):
testdata = (
(' test test.c test.o ', ['test', 'test.c', 'test.o']),
('\ttest\t test.c \ntest.o', ['test', 'test.c', 'test.o']),
)
def runTest(self):
for s, e in self.testdata:
w = s.split()
self.assertEqual(w, e, 'splitwords(%r)' % (s,))
class GetPatSubstTest(unittest.TestCase):
testdata = (
('%.c', '%.o', ' test test.c test.o ', 'test test.o test.o'),
('%', '%.o', ' test.c test.o ', 'test.c.o test.o.o'),
('foo', 'bar', 'test foo bar', 'test bar bar'),
('foo', '%bar', 'test foo bar', 'test %bar bar'),
('%', 'perc_%', 'path', 'perc_path'),
('\\%', 'sub%', 'p %', 'p sub%'),
('%.c', '\\%%.o', 'foo.c bar.o baz.cpp', '%foo.o bar.o baz.cpp'),
)
def runTest(self):
for s, r, d, e in self.testdata:
words = d.split()
p = pymake.data.Pattern(s)
a = ' '.join((p.subst(r, word, False)
for word in words))
self.assertEqual(a, e, 'Pattern(%r).subst(%r, %r)' % (s, r, d))
class LRUTest(unittest.TestCase):
# getkey, expected, funccount, debugitems
expected = (
(0, '', 1, (0,)),
(0, '', 2, (0,)),
(1, ' ', 3, (1, 0)),
(1, ' ', 3, (1, 0)),
(0, '', 4, (0, 1)),
(2, ' ', 5, (2, 0, 1)),
(1, ' ', 5, (1, 2, 0)),
(3, ' ', 6, (3, 1, 2)),
)
def spaceFunc(self, l):
self.funccount += 1
return ''.ljust(l)
def runTest(self):
self.funccount = 0
c = pymake.util.LRUCache(3, self.spaceFunc, lambda k, v: k % 2)
self.assertEqual(tuple(c.debugitems()), ())
for i in xrange(0, len(self.expected)):
k, e, fc, di = self.expected[i]
v = c.get(k)
self.assertEqual(v, e)
self.assertEqual(self.funccount, fc,
"funccount, iteration %i, got %i expected %i" % (i, self.funccount, fc))
goti = tuple(c.debugitems())
self.assertEqual(goti, di,
"debugitems, iteration %i, got %r expected %r" % (i, goti, di))
if __name__ == '__main__':
unittest.main()