python/mozbuild/dumbmake/test/test_dumbmake.py

Fri, 16 Jan 2015 18:13:44 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Fri, 16 Jan 2015 18:13:44 +0100
branch
TOR_BUG_9701
changeset 14
925c144e1f1f
permissions
-rw-r--r--

Integrate suggestion from review to improve consistency with existing code.

     1 # This Source Code Form is subject to the terms of the Mozilla Public
     2 # License, v. 2.0. If a copy of the MPL was not distributed with this file,
     3 # You can obtain one at http://mozilla.org/MPL/2.0/.
     4 from __future__ import unicode_literals
     6 import unittest
     8 from mozunit import (
     9     main,
    10 )
    12 from dumbmake.dumbmake import (
    13     add_extra_dependencies,
    14     all_dependencies,
    15     dependency_map,
    16     indentation,
    17 )
    19 class TestDumbmake(unittest.TestCase):
    20     def test_indentation(self):
    21         self.assertEqual(indentation(""), 0)
    22         self.assertEqual(indentation("x"), 0)
    23         self.assertEqual(indentation(" x"), 1)
    24         self.assertEqual(indentation("\tx"), 1)
    25         self.assertEqual(indentation(" \tx"), 2)
    26         self.assertEqual(indentation("\t x"), 2)
    27         self.assertEqual(indentation(" x  "), 1)
    28         self.assertEqual(indentation("\tx\t"), 1)
    29         self.assertEqual(indentation("  x"), 2)
    30         self.assertEqual(indentation("    x"), 4)
    32     def test_dependency_map(self):
    33         self.assertEqual(dependency_map([]), {})
    34         self.assertEqual(dependency_map(["a"]), {"a": []})
    35         self.assertEqual(dependency_map(["a", "b"]), {"a": [], "b": []})
    36         self.assertEqual(dependency_map(["a", "b", "c"]), {"a": [], "b": [], "c": []})
    37         # indentation
    38         self.assertEqual(dependency_map(["a", "\tb", "a", "\tc"]), {"a": [], "b": ["a"], "c": ["a"]})
    39         self.assertEqual(dependency_map(["a", "\tb", "\t\tc"]), {"a": [], "b": ["a"], "c": ["b", "a"]})
    40         self.assertEqual(dependency_map(["a", "\tb", "\t\tc", "\td", "\te", "f"]), {"a": [], "b": ["a"], "c": ["b", "a"], "d": ["a"], "e": ["a"], "f": []})
    41         # irregular indentation
    42         self.assertEqual(dependency_map(["\ta", "b"]), {"a": [], "b": []})
    43         self.assertEqual(dependency_map(["a", "\t\t\tb", "\t\tc"]), {"a": [], "b": ["a"], "c": ["a"]})
    44         self.assertEqual(dependency_map(["a", "\t\tb", "\t\t\tc", "\t\td", "\te", "f"]), {"a": [], "b": ["a"], "c": ["b", "a"], "d": ["a"], "e": ["a"], "f": []})
    45         # repetitions
    46         self.assertEqual(dependency_map(["a", "\tb", "a", "\tb"]), {"a": [], "b": ["a"]})
    47         self.assertEqual(dependency_map(["a", "\tb", "\t\tc", "b", "\td", "\t\te"]), {"a": [], "b": ["a"], "d": ["b"], "e": ["d", "b"], "c": ["b", "a"]})
    48         # cycles are okay
    49         self.assertEqual(dependency_map(["a", "\tb", "\t\ta"]), {"a": ["b", "a"], "b": ["a"]})
    51     def test_all_dependencies(self):
    52         dm = {"a": [], "b": ["a"], "c": ["b", "a"], "d": ["a"], "e": ["a"], "f": []}
    53         self.assertEqual(all_dependencies("a", dependency_map=dm), [])
    54         self.assertEqual(all_dependencies("b", dependency_map=dm), ["a"])
    55         self.assertEqual(all_dependencies("c", "a", "b", dependency_map=dm), ["b", "a"])
    56         self.assertEqual(all_dependencies("d", dependency_map=dm), ["a"])
    57         self.assertEqual(all_dependencies("d", "f", "c", dependency_map=dm), ["b", "a"])
    58         self.assertEqual(all_dependencies("a", "b", dependency_map=dm), ["a"])
    59         self.assertEqual(all_dependencies("b", "b", dependency_map=dm), ["a"])
    61     def test_missing_entry(self):
    62         # a depends on b, which is missing
    63         dm = {"a": ["b"]}
    64         self.assertEqual(all_dependencies("a", dependency_map=dm), ["b"])
    65         self.assertEqual(all_dependencies("a", "b", dependency_map=dm), ["b"])
    66         self.assertEqual(all_dependencies("b", dependency_map=dm), [])
    68     def test_two_dependencies(self):
    69         dm = {"a": ["c"], "b": ["c"], "c": []}
    70         # suppose a and b both depend on c.  Then we want to build a and b before c...
    71         self.assertEqual(all_dependencies("a", "b", dependency_map=dm), ["c"])
    72         # ... but relative order is preserved.
    73         self.assertEqual(all_dependencies("b", "a", dependency_map=dm), ["c"])
    75     def test_nested_dependencies(self):
    76         # a depends on b depends on c depends on d
    77         dm = {"a": ["b", "c", "d"], "b": ["c", "d"], "c": ["d"]}
    78         self.assertEqual(all_dependencies("b", "a", dependency_map=dm), ["b", "c", "d"])
    79         self.assertEqual(all_dependencies("c", "a", dependency_map=dm), ["b", "c", "d"])
    81     def test_add_extra_dependencies(self):
    82         # a depends on b depends on c depends on d
    83         dm = {"a": ["b", "c", "d"], "b": ["c", "d"], "c": ["d"]}
    84         # Edge cases.
    85         self.assertEqual(list(add_extra_dependencies([], dependency_map=dm)),
    86                          [])
    87         self.assertEqual(list(add_extra_dependencies([(None, "package")], dependency_map=dm)),
    88                          [(None, "package")])
    89         # Easy expansion.
    90         self.assertEqual(list(add_extra_dependencies([("b", None)], dependency_map=dm)),
    91                          [("b", None), ("c", None), ("d", None)])
    92         # Expansion with two groups -- each group is handled independently.
    93         self.assertEqual(list(add_extra_dependencies([("b", None),
    94                                                       (None, "package"),
    95                                                       ("c", None)], dependency_map=dm)),
    96                          [("b", None), (None, "package"),
    97                           ("c", None), ("d", None)])
    98         # Two groups, no duplicate dependencies in each group.
    99         self.assertEqual(list(add_extra_dependencies([("a", None), ("b", None),
   100                                                       (None, "package"), (None, "install"),
   101                                                       ("c", None), ("d", None)], dependency_map=dm)),
   102                          [("a", None), ("b", None), (None, "package"),
   103                           (None, "install"), ("c", None), ("d", None)])
   105 if __name__ == '__main__':
   106     main()

mercurial