예제 #1
0
 def test_descendents(self):
     a = Item(1, 'tag', 'a')
     b = Item(2, 'tag', 'b')
     c = Item(3, 'tag', 'c')
     d = Item(4, 'tag', 'd')
     a.add_child(b)
     a.add_child(c)
     c.add_child(d)
     width_first_items = [a, b, c, d]
     depth_first_items = [(a, 0), (c, 1), (d, 2), (b, 1)]
     actual_width_first_items = [x[0] for x in a.descendents()]
     actual_depth_first_items = list(a.descendents(width_first=False))
     self.assertEqual(actual_width_first_items, width_first_items)
     self.assertEqual(actual_depth_first_items, depth_first_items)
     # test that c and d are descendents of a. and can break on that.
     searched_descendents = list()
     for item, level in a.descendents():
         if item == b:
             break
         searched_descendents.append(item)
     self.assertTrue(len(searched_descendents) < 4)
     # test that c is a descendents of a. and can break on that.
     searched_descendents = list()
     for item, level in a.descendents():
         if item == c:
             break
         searched_descendents.append(item)
     self.assertTrue(len(searched_descendents) < 4)
예제 #2
0
 def test_hierarchy(self):
     me = Item(1, 'tag', 'me')
     la = Item(2, 'tag', 'la')
     me2 = Item(3, 'tag', 'me')
     self.assertTrue(me == me2)
     self.assertEqual(me2, me)
     me.add_child(la)
     self.assertEqual(list(me.child_items()), [la])
     self.assertEqual([x for x in la.parent_items()], [me])
예제 #3
0
 def test_no_cycles(self):
     """ Assert that an item can not be added as its own descendent. """
     a = Item(1, 'tag', 'a')
     b = Item(2, 'tag', 'b')
     c = Item(3, 'tag', 'c')
     d = Item(4, 'tag', 'd')
     a.add_child(b)
     a.add_child(c)
     c.add_child(d)
     self.assertRaises(ItemError, lambda: a.add_child(a))
     self.assertRaises(ItemError, b.add_child, a)
     self.assertRaises(ItemError, d.add_child, a)