| Index: pylib/gyp/input_test.py
|
| ===================================================================
|
| --- pylib/gyp/input_test.py (revision 0)
|
| +++ pylib/gyp/input_test.py (revision 0)
|
| @@ -0,0 +1,90 @@
|
| +#!/usr/bin/env python
|
| +
|
| +# Copyright 2013 Google Inc. All rights reserved.
|
| +# Use of this source code is governed by a BSD-style license that can be
|
| +# found in the LICENSE file.
|
| +
|
| +"""Unit tests for the input.py file."""
|
| +
|
| +import gyp.input
|
| +import unittest
|
| +import sys
|
| +
|
| +
|
| +class TestFindCycles(unittest.TestCase):
|
| + def setUp(self):
|
| + self.nodes = {}
|
| + for x in ('a', 'b', 'c', 'd', 'e'):
|
| + self.nodes[x] = gyp.input.DependencyGraphNode(x)
|
| +
|
| + def _create_dependency(self, dependent, dependency):
|
| + dependent.dependencies.append(dependency)
|
| + dependency.dependents.append(dependent)
|
| +
|
| + def test_no_cycle_empty_graph(self):
|
| + for label, node in self.nodes.iteritems():
|
| + self.assertEquals([], node.FindCycles())
|
| +
|
| + def test_no_cycle_line(self):
|
| + self._create_dependency(self.nodes['a'], self.nodes['b'])
|
| + self._create_dependency(self.nodes['b'], self.nodes['c'])
|
| + self._create_dependency(self.nodes['c'], self.nodes['d'])
|
| +
|
| + for label, node in self.nodes.iteritems():
|
| + self.assertEquals([], node.FindCycles())
|
| +
|
| + def test_no_cycle_dag(self):
|
| + self._create_dependency(self.nodes['a'], self.nodes['b'])
|
| + self._create_dependency(self.nodes['a'], self.nodes['c'])
|
| + self._create_dependency(self.nodes['b'], self.nodes['c'])
|
| +
|
| + for label, node in self.nodes.iteritems():
|
| + self.assertEquals([], node.FindCycles())
|
| +
|
| + def test_cycle_self_reference(self):
|
| + self._create_dependency(self.nodes['a'], self.nodes['a'])
|
| +
|
| + self.assertEquals([(self.nodes['a'], self.nodes['a'])],
|
| + self.nodes['a'].FindCycles())
|
| +
|
| + def test_cycle_two_nodes(self):
|
| + self._create_dependency(self.nodes['a'], self.nodes['b'])
|
| + self._create_dependency(self.nodes['b'], self.nodes['a'])
|
| +
|
| + self.assertEquals([(self.nodes['a'], self.nodes['b'], self.nodes['a'])],
|
| + self.nodes['a'].FindCycles())
|
| + self.assertEquals([(self.nodes['b'], self.nodes['a'], self.nodes['b'])],
|
| + self.nodes['b'].FindCycles())
|
| +
|
| + def test_two_cycles(self):
|
| + self._create_dependency(self.nodes['a'], self.nodes['b'])
|
| + self._create_dependency(self.nodes['b'], self.nodes['a'])
|
| +
|
| + self._create_dependency(self.nodes['b'], self.nodes['c'])
|
| + self._create_dependency(self.nodes['c'], self.nodes['b'])
|
| +
|
| + cycles = self.nodes['a'].FindCycles()
|
| + self.assertTrue(
|
| + (self.nodes['a'], self.nodes['b'], self.nodes['a']) in cycles)
|
| + self.assertTrue(
|
| + (self.nodes['b'], self.nodes['c'], self.nodes['b']) in cycles)
|
| + self.assertEquals(2, len(cycles))
|
| +
|
| + def test_big_cycle(self):
|
| + self._create_dependency(self.nodes['a'], self.nodes['b'])
|
| + self._create_dependency(self.nodes['b'], self.nodes['c'])
|
| + self._create_dependency(self.nodes['c'], self.nodes['d'])
|
| + self._create_dependency(self.nodes['d'], self.nodes['e'])
|
| + self._create_dependency(self.nodes['e'], self.nodes['a'])
|
| +
|
| + self.assertEquals([(self.nodes['a'],
|
| + self.nodes['b'],
|
| + self.nodes['c'],
|
| + self.nodes['d'],
|
| + self.nodes['e'],
|
| + self.nodes['a'])],
|
| + self.nodes['a'].FindCycles())
|
| +
|
| +
|
| +if __name__ == '__main__':
|
| + unittest.main()
|
|
|
| Property changes on: pylib/gyp/input_test.py
|
| ___________________________________________________________________
|
| Added: svn:eol-style
|
| + LF
|
| Added: svn:executable
|
| + *
|
|
|
|
|