Chromium Code Reviews| Index: pylib/gyp/input_test.py |
| =================================================================== |
| --- pylib/gyp/input_test.py (revision 0) |
| +++ pylib/gyp/input_test.py (revision 0) |
| @@ -0,0 +1,87 @@ |
| +#!/usr/bin/env python |
|
Mark Mentovai
2013/08/16 19:32:46
Excellent!
|
| + |
| +# 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']) |
| + |
| + self.assertEquals([(self.nodes['a'], self.nodes['b'], self.nodes['a']), |
|
Mark Mentovai
2013/08/16 19:32:46
The relative ordering of the two cycles is an impl
Paweł Hajdan Jr.
2013/08/16 22:39:42
Done.
|
| + (self.nodes['b'], self.nodes['c'], self.nodes['b'])], |
| + self.nodes['a'].FindCycles()) |
| + |
| + 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 |
| + * |