""" A module trying out Kata Eighteen (http://www.pragprog.com/pragdave/Practices/Kata/KataEighteen.rdoc,v) For ease of readability I've included the two classes in the same module. """ import unittest class depend(object): def __init__(self): self.dependencies={} def add_direct(self, item, dependencies): self.dependencies[item]=dependencies print "Added %s to %s" % (dependencies, item) def dependencies_for(self, item, results=[]): if self.dependencies.has_key(item): # What if we've been here before? for dep in self.dependencies[item]: if dep not in results: results.append(dep) children=self.dependencies_for(dep, results) return results class testDepend(unittest.TestCase): def setUp(self): self.mine = depend() self.mine.add_direct('A', 'B') self.mine.add_direct('B', 'C') self.mine.add_direct('C', 'A') def testA(self): "Make sure that A depends on B and C" self.assertEqual(self.mine.dependencies_for('A', []), ['B', 'C', 'A']) if __name__ == '__main__': unittest.main()