build/pymake/tests/datatests.py

Wed, 31 Dec 2014 07:16:47 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 07:16:47 +0100
branch
TOR_BUG_9701
changeset 3
141e0f1194b1
permissions
-rw-r--r--

Revert simplistic fix pending revisit of Mozilla integration attempt.

     1 import pymake.data, pymake.functions, pymake.util
     2 import unittest
     3 import re
     4 from cStringIO import StringIO
     6 def multitest(cls):
     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)
    12     return cls
    14 class SplitWordsTest(unittest.TestCase):
    15     testdata = (
    16         (' test test.c test.o ', ['test', 'test.c', 'test.o']),
    17         ('\ttest\t  test.c \ntest.o', ['test', 'test.c', 'test.o']),
    18     )
    20     def runTest(self):
    21         for s, e in self.testdata:
    22             w = s.split()
    23             self.assertEqual(w, e, 'splitwords(%r)' % (s,))
    25 class GetPatSubstTest(unittest.TestCase):
    26     testdata = (
    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'),
    34     )
    36     def runTest(self):
    37         for s, r, d, e in self.testdata:
    38             words = d.split()
    39             p = pymake.data.Pattern(s)
    40             a = ' '.join((p.subst(r, word, False)
    41                           for word in words))
    42             self.assertEqual(a, e, 'Pattern(%r).subst(%r, %r)' % (s, r, d))
    44 class LRUTest(unittest.TestCase):
    45     # getkey, expected, funccount, debugitems
    46     expected = (
    47         (0, '', 1, (0,)),
    48         (0, '', 2, (0,)),
    49         (1, ' ', 3, (1, 0)),
    50         (1, ' ', 3, (1, 0)),
    51         (0, '', 4, (0, 1)),
    52         (2, '  ', 5, (2, 0, 1)),
    53         (1, ' ', 5, (1, 2, 0)),
    54         (3, '   ', 6, (3, 1, 2)),
    55     )
    57     def spaceFunc(self, l):
    58         self.funccount += 1
    59         return ''.ljust(l)
    61     def runTest(self):
    62         self.funccount = 0
    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]
    69             v = c.get(k)
    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)
    90         s1.appendstr('foo')
    91         s2.appendstr('foo')
    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)
    99         s1.appendstr('foo')
   100         s2.appendstr('foo')
   102         s1.appendstr(' bar')
   103         s1.appendstr(' baz')
   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)
   118         s1.appendfunc(v1)
   119         s2.appendfunc(v2)
   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()
   143         e1.appendstr('foo')
   145         self.assertTrue(e1.is_static_string)
   147         e1.appendstr('bar')
   148         self.assertTrue(e1.is_static_string)
   150         vname = pymake.data.StringExpansion('FOO', None)
   151         func = pymake.functions.VariableRef(None, vname)
   153         e1.appendfunc(func)
   155         self.assertFalse(e1.is_static_string)
   157     def test_get_functions(self):
   158         e1 = pymake.data.Expansion()
   159         e1.appendstr('foo')
   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)
   167         e1.appendfunc(func1)
   168         e1.appendfunc(func2)
   170         funcs = list(e1.functions())
   171         self.assertEqual(len(funcs), 2)
   173         func3 = pymake.functions.SortFunction(None)
   174         func3.append(vname1)
   176         e1.appendfunc(func3)
   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()
   189         e2.appendfunc(func1)
   191         func2 = pymake.functions.SortFunction(None)
   192         func2.append(e2)
   194         e1.appendfunc(func2)
   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)
   208         e.appendfunc(func1)
   210         self.assertFalse(e.is_filesystem_dependent)
   212         func2 = pymake.functions.WildcardFunction(None)
   213         func2.append(vname1)
   214         e.appendfunc(func2)
   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)
   223         wildcard.append(e)
   225         e = pymake.data.Expansion(None)
   226         e.appendfunc(wildcard)
   228         sort.append(e)
   230         e = pymake.data.Expansion(None)
   231         e.appendfunc(sort)
   233         self.assertTrue(e.is_filesystem_dependent)
   236 if __name__ == '__main__':
   237     unittest.main()

mercurial