Index: third_party/google_input_tools/third_party/closure_library/closure/bin/build/depstree_test.py |
diff --git a/third_party/google_input_tools/third_party/closure_library/closure/bin/build/depstree_test.py b/third_party/google_input_tools/third_party/closure_library/closure/bin/build/depstree_test.py |
new file mode 100755 |
index 0000000000000000000000000000000000000000..eb4c99958ec6cabaacd782e49b7a8a16e85c9f61 |
--- /dev/null |
+++ b/third_party/google_input_tools/third_party/closure_library/closure/bin/build/depstree_test.py |
@@ -0,0 +1,127 @@ |
+#!/usr/bin/env python |
+# |
+# Copyright 2009 The Closure Library Authors. All Rights Reserved. |
+# |
+# Licensed under the Apache License, Version 2.0 (the "License"); |
+# you may not use this file except in compliance with the License. |
+# You may obtain a copy of the License at |
+# |
+# http://www.apache.org/licenses/LICENSE-2.0 |
+# |
+# Unless required by applicable law or agreed to in writing, software |
+# distributed under the License is distributed on an "AS-IS" BASIS, |
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
+# See the License for the specific language governing permissions and |
+# limitations under the License. |
+ |
+ |
+"""Unit test for depstree.""" |
+ |
+__author__ = 'nnaze@google.com (Nathan Naze)' |
+ |
+ |
+import unittest |
+ |
+import depstree |
+ |
+ |
+def _GetProvides(sources): |
+ """Get all namespaces provided by a collection of sources.""" |
+ |
+ provides = set() |
+ for source in sources: |
+ provides.update(source.provides) |
+ return provides |
+ |
+ |
+class MockSource(object): |
+ """Mock Source file.""" |
+ |
+ def __init__(self, provides, requires): |
+ self.provides = set(provides) |
+ self.requires = set(requires) |
+ |
+ def __repr__(self): |
+ return 'MockSource %s' % self.provides |
+ |
+ |
+class DepsTreeTestCase(unittest.TestCase): |
+ """Unit test for DepsTree. Tests several common situations and errors.""" |
+ |
+ def AssertValidDependencies(self, deps_list): |
+ """Validates a dependency list. |
+ |
+ Asserts that a dependency list is valid: For every source in the list, |
+ ensure that every require is provided by a source earlier in the list. |
+ |
+ Args: |
+ deps_list: A list of sources that should be in dependency order. |
+ """ |
+ |
+ for i in range(len(deps_list)): |
+ source = deps_list[i] |
+ previous_provides = _GetProvides(deps_list[:i]) |
+ for require in source.requires: |
+ self.assertTrue( |
+ require in previous_provides, |
+ 'Namespace "%s" not provided before required by %s' % ( |
+ require, source)) |
+ |
+ def testSimpleDepsTree(self): |
+ a = MockSource(['A'], ['B', 'C']) |
+ b = MockSource(['B'], []) |
+ c = MockSource(['C'], ['D']) |
+ d = MockSource(['D'], ['E']) |
+ e = MockSource(['E'], []) |
+ |
+ tree = depstree.DepsTree([a, b, c, d, e]) |
+ |
+ self.AssertValidDependencies(tree.GetDependencies('A')) |
+ self.AssertValidDependencies(tree.GetDependencies('B')) |
+ self.AssertValidDependencies(tree.GetDependencies('C')) |
+ self.AssertValidDependencies(tree.GetDependencies('D')) |
+ self.AssertValidDependencies(tree.GetDependencies('E')) |
+ |
+ def testCircularDependency(self): |
+ # Circular deps |
+ a = MockSource(['A'], ['B']) |
+ b = MockSource(['B'], ['C']) |
+ c = MockSource(['C'], ['A']) |
+ |
+ tree = depstree.DepsTree([a, b, c]) |
+ |
+ self.assertRaises(depstree.CircularDependencyError, |
+ tree.GetDependencies, 'A') |
+ |
+ def testRequiresUndefinedNamespace(self): |
+ a = MockSource(['A'], ['B']) |
+ b = MockSource(['B'], ['C']) |
+ c = MockSource(['C'], ['D']) # But there is no D. |
+ |
+ def MakeDepsTree(): |
+ return depstree.DepsTree([a, b, c]) |
+ |
+ self.assertRaises(depstree.NamespaceNotFoundError, MakeDepsTree) |
+ |
+ def testDepsForMissingNamespace(self): |
+ a = MockSource(['A'], ['B']) |
+ b = MockSource(['B'], []) |
+ |
+ tree = depstree.DepsTree([a, b]) |
+ |
+ # There is no C. |
+ self.assertRaises(depstree.NamespaceNotFoundError, |
+ tree.GetDependencies, 'C') |
+ |
+ def testMultipleRequires(self): |
+ a = MockSource(['A'], ['B']) |
+ b = MockSource(['B'], ['C']) |
+ c = MockSource(['C'], []) |
+ d = MockSource(['D'], ['B']) |
+ |
+ tree = depstree.DepsTree([a, b, c, d]) |
+ self.AssertValidDependencies(tree.GetDependencies(['D', 'A'])) |
+ |
+ |
+if __name__ == '__main__': |
+ unittest.main() |