input_test.py 3.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. #!/usr/bin/env python
  2. # Copyright 2013 Google Inc. All rights reserved.
  3. # Use of this source code is governed by a BSD-style license that can be
  4. # found in the LICENSE file.
  5. """Unit tests for the input.py file."""
  6. import gyp.input
  7. import unittest
  8. import sys
  9. class TestFindCycles(unittest.TestCase):
  10. def setUp(self):
  11. self.nodes = {}
  12. for x in ('a', 'b', 'c', 'd', 'e'):
  13. self.nodes[x] = gyp.input.DependencyGraphNode(x)
  14. def _create_dependency(self, dependent, dependency):
  15. dependent.dependencies.append(dependency)
  16. dependency.dependents.append(dependent)
  17. def test_no_cycle_empty_graph(self):
  18. for label, node in self.nodes.iteritems():
  19. self.assertEquals([], node.FindCycles())
  20. def test_no_cycle_line(self):
  21. self._create_dependency(self.nodes['a'], self.nodes['b'])
  22. self._create_dependency(self.nodes['b'], self.nodes['c'])
  23. self._create_dependency(self.nodes['c'], self.nodes['d'])
  24. for label, node in self.nodes.iteritems():
  25. self.assertEquals([], node.FindCycles())
  26. def test_no_cycle_dag(self):
  27. self._create_dependency(self.nodes['a'], self.nodes['b'])
  28. self._create_dependency(self.nodes['a'], self.nodes['c'])
  29. self._create_dependency(self.nodes['b'], self.nodes['c'])
  30. for label, node in self.nodes.iteritems():
  31. self.assertEquals([], node.FindCycles())
  32. def test_cycle_self_reference(self):
  33. self._create_dependency(self.nodes['a'], self.nodes['a'])
  34. self.assertEquals([[self.nodes['a'], self.nodes['a']]],
  35. self.nodes['a'].FindCycles())
  36. def test_cycle_two_nodes(self):
  37. self._create_dependency(self.nodes['a'], self.nodes['b'])
  38. self._create_dependency(self.nodes['b'], self.nodes['a'])
  39. self.assertEquals([[self.nodes['a'], self.nodes['b'], self.nodes['a']]],
  40. self.nodes['a'].FindCycles())
  41. self.assertEquals([[self.nodes['b'], self.nodes['a'], self.nodes['b']]],
  42. self.nodes['b'].FindCycles())
  43. def test_two_cycles(self):
  44. self._create_dependency(self.nodes['a'], self.nodes['b'])
  45. self._create_dependency(self.nodes['b'], self.nodes['a'])
  46. self._create_dependency(self.nodes['b'], self.nodes['c'])
  47. self._create_dependency(self.nodes['c'], self.nodes['b'])
  48. cycles = self.nodes['a'].FindCycles()
  49. self.assertTrue(
  50. [self.nodes['a'], self.nodes['b'], self.nodes['a']] in cycles)
  51. self.assertTrue(
  52. [self.nodes['b'], self.nodes['c'], self.nodes['b']] in cycles)
  53. self.assertEquals(2, len(cycles))
  54. def test_big_cycle(self):
  55. self._create_dependency(self.nodes['a'], self.nodes['b'])
  56. self._create_dependency(self.nodes['b'], self.nodes['c'])
  57. self._create_dependency(self.nodes['c'], self.nodes['d'])
  58. self._create_dependency(self.nodes['d'], self.nodes['e'])
  59. self._create_dependency(self.nodes['e'], self.nodes['a'])
  60. self.assertEquals([[self.nodes['a'],
  61. self.nodes['b'],
  62. self.nodes['c'],
  63. self.nodes['d'],
  64. self.nodes['e'],
  65. self.nodes['a']]],
  66. self.nodes['a'].FindCycles())
  67. if __name__ == '__main__':
  68. unittest.main()