Example #1
0
class TestPositionTree(unittest.TestCase):
  
  def setUp(self):
    self.root = PositionTree(NAME)
    self._createComplexTree()

  def _AddChild(self, name, position=None):
    new_tree = PositionTree(name)
    self.root.addChild(new_tree, position=position)
    return new_tree

  def _createComplexTree(self):
    """
    Creates the following tree
      0: NAME1->NAME3
      1: NAME1->NAME2->NAME4
    """
    self.tree2 = self._AddChild(NAME2, position=1)
    self.tree3 = self._AddChild(NAME3, position=0)
    self.tree4 = Tree(NAME4)
    self.tree2.addChild(self.tree4)

  def testAddChild(self):
    if IGNORE_TEST:
      return
    self.assertEqual(self.root._children[0], self.tree3)
    self.assertEqual(self.root._children[1], self.tree2)

  def testGetChildAtPosition(self):
    if IGNORE_TEST:
      return
    tree3 = self.root.getChildAtPosition(0)
    self.assertEqual(tree3, self.tree3)
    tree2 = self.root.getChildAtPosition(1)
    self.assertEqual(tree2, self.tree2)
    with self.assertRaises(ValueError):
      _ = self.root.getChildAtPosition(2)

  def testGetPosition(self):
    if IGNORE_TEST:
      return
    expected_position = self.root.getPositionOfChild(self.tree2)
    self.assertEqual(expected_position, self.tree2.getPosition())
    self.assertIsNone(self.root.getPosition())

  def testGetPositionOfChild(self):
    if IGNORE_TEST:
      return
    position = self.root.getPositionOfChild(self.tree2)
    self.assertEqual(position, 1)
    self.assertIsNone(self.root.getPositionOfChild(self.tree4))

  def testMoveChildToPosition(self):
    if IGNORE_TEST:
      return
    tree5 = PositionTree(NAME5)
    self.root.addChild(tree5)
    new_position = 0
    self.root.moveChildToPosition(self.tree2, new_position)
    self.assertEqual(self.root._children[0], self.tree2)
    # Make sure it works if nothing is moved
    new_position = 0
    self.root.moveChildToPosition(self.tree2, new_position)
    self.assertEqual(self.root._children[0], self.tree2)
    # Move an end tree
    new_position = 0
    self.root.moveChildToPosition(tree5, new_position)
    self.assertEqual(self.root._children[0], tree5)

  def testToString(self):
    if IGNORE_TEST:
      return
    tree5 = PositionTree(NAME5)
    self.root.addChild(tree5)
    result = self.root.toString()
    self.assertTrue("2: ->NAME5" in result)
    self.assertEqual(result.count('->'), 4)

  def testIsRoot(self):
    if IGNORE_TEST:
      return
    self.assertTrue(self.root.isRoot())
    new_tree = Tree("DUMMY_TREE")
    self.root.addChild(new_tree)
    self.assertFalse(new_tree.isRoot())
    self.assertTrue(self.root.isRoot())

  # TODO: Delete since this is testing Table?
  def testIsEquivalent(self):
    if IGNORE_TEST:
      return
    [table, other_table] = getCapture("test_table_1")
    result = super(NamedTree, table).isEquivalent(other_table)
    self.assertTrue(result)

  def testValidateTree(self):
    self.tree2 = self._AddChild(NEW_NAME)
    with self.assertRaises(RuntimeError):
      self.tree2 = self._AddChild(NEW_NAME)