Ejemplo n.º 1
0
	def testListFamily(self):
		"""
		Tests :meth:`foundations.nodes.AbstractCompositeNode.listFamily` method.
		"""

		class FamilyB(AbstractCompositeNode):
			__family = "B"

		class FamilyC(AbstractCompositeNode):
			__family = "C"

		nodeA = AbstractCompositeNode("MyNodeA")
		nodeB = FamilyB("MyNodeB", nodeA)
		nodeC = FamilyC("MyNodeC", nodeA)
		nodeD = FamilyB("MyNodeD", nodeC)
		nodeE = FamilyB("MyNodeE", nodeD)
		nodeF = FamilyC("MyNodeE", nodeE)

		familyNodes = [nodeB, nodeD, nodeE]
		foundNodes = nodeA.findFamily("B")
		for node in familyNodes:
			self.assertIn(node, foundNodes)

		familyNodes = [nodeC, nodeF]
		foundNodes = nodeA.findFamily("C")
		for node in familyNodes:
			self.assertIn(node, foundNodes)

		self.assertEqual(nodeA.findFamily("C", node=nodeE).pop(), nodeF)
Ejemplo n.º 2
0
    def testAbstractCompositeNodePickle(self):
        """
		This method tests :class:`foundations.nodes.AbstractCompositeNode` class pickling.
		
		:note: :data:`pickle.HIGHEST_PROTOCOL` must be used to pickle :class:`foundations.nodes.AbstractCompositeNode` class.
		"""

        nodeA = AbstractCompositeNode("MyNodeA",
                                      attributeA=Attribute(value="A"),
                                      attributeB=Attribute(value="1"))
        nodeB = AbstractCompositeNode("MyNodeB",
                                      nodeA,
                                      attributeA=Attribute(value="B"),
                                      attributeB=Attribute(value="2"))
        nodeC = AbstractCompositeNode("MyNodeC",
                                      nodeA,
                                      attributeA=Attribute(value="C"),
                                      attributeB=Attribute(value="3"))
        nodeD = AbstractCompositeNode("MyNodeD",
                                      nodeB,
                                      attributeA=Attribute(value="D"),
                                      attributeB=Attribute(value="4"))

        data = pickle.dumps(nodeA, pickle.HIGHEST_PROTOCOL)
        data = pickle.loads(data)
        self.assertEqual(nodeA, data)
Ejemplo n.º 3
0
	def __init__(self, name=None, parent=None, children=None, roles=None, flags=None, **kwargs):
		"""
		Initializes the class.

		:param name: Node name.
		:type name: unicode
		:param parent: Node parent.
		:type parent: AbstractNode or AbstractCompositeNode
		:param children: Children.
		:type children: list
		:param roles: Roles.
		:type roles: dict
		:param flags: Flags. ( Qt.ItemFlag )
		:param \*\*kwargs: Keywords arguments.
		:type \*\*kwargs: \*\*
		"""

		LOGGER.debug("> Initializing '{0}()' class.".format(self.__class__.__name__))

		AbstractCompositeNode.__init__(self, name, parent, children, **kwargs)
		Mixin_GraphModelObject.__init__(self)

		# --- Setting class attributes. ---
		self.roles = roles or {Qt.DisplayRole : self.name, Qt.EditRole : self.name}
		self.flags = flags or int(Qt.ItemIsSelectable | Qt.ItemIsEditable | Qt.ItemIsEnabled | Qt.ItemIsDragEnabled)
Ejemplo n.º 4
0
	def testIndexOf(self):
		"""
		Tests :meth:`foundations.nodes.AbstractCompositeNode.indexOf` method.
		"""

		nodeA = AbstractCompositeNode("MyNodeA")
		nodeB = AbstractCompositeNode("MyNodeB", nodeA)
		self.assertEqual(nodeA.indexOf(nodeB), 0)
Ejemplo n.º 5
0
	def testListNode(self):
		"""
		Tests :meth:`foundations.nodes.AbstractCompositeNode.listNode` method.
		"""

		nodeA = AbstractCompositeNode("MyNodeA")
		nodeB = AbstractCompositeNode("MyNodeB", nodeA)
		nodeC = AbstractCompositeNode("MyNodeC", nodeA)
		self.assertIsInstance(nodeA.listNode(), unicode)
Ejemplo n.º 6
0
	def testHasChildren(self):
		"""
		Tests :meth:`foundations.nodes.AbstractCompositeNode.hasChildren` method.
		"""

		nodeA = AbstractCompositeNode("MyNodeA")
		self.assertFalse(nodeA.hasChildren())
		nodeB = AbstractCompositeNode("MyNodeB", nodeA)
		self.assertTrue(nodeA.hasChildren())
Ejemplo n.º 7
0
	def testRemoveChild(self):
		"""
		Tests :meth:`foundations.nodes.AbstractCompositeNode.removeChild` method.
		"""

		nodeA = AbstractCompositeNode("MyNodeA")
		nodeB = AbstractCompositeNode("MyNodeB", nodeA)
		self.assertEqual(nodeA.removeChild(0), nodeB)
		self.assertListEqual(nodeA.children, [])
		self.assertEqual(nodeB.parent, None)
Ejemplo n.º 8
0
	def testRow(self):
		"""
		Tests :meth:`foundations.nodes.AbstractCompositeNode.row` method.
		"""

		nodeA = AbstractCompositeNode("MyNodeA")
		nodeB = AbstractCompositeNode("MyNodeB", nodeA)
		nodeC = AbstractCompositeNode("MyNodeC", nodeA)
		nodeD = AbstractCompositeNode("MyNodeD", nodeA)
		for i, node in enumerate((nodeB, nodeC, nodeD)):
			self.assertEqual(node.row(), i)
Ejemplo n.º 9
0
	def testAddChild(self):
		"""
		Tests :meth:`foundations.nodes.AbstractCompositeNode.addChild` method.
		"""

		nodeA = AbstractCompositeNode("MyNodeA")
		nodeB = AbstractCompositeNode("MyNodeB")
		self.assertListEqual(nodeA.children, [])
		self.assertTrue(nodeA.addChild(nodeB))
		self.assertIn(nodeB, nodeA.children)
		self.assertEqual(nodeB.parent, nodeA)
Ejemplo n.º 10
0
	def __init__(self, name=None, parent=None, children=None, **kwargs):
		"""
		Initializes the class.

		:param name: Node name.
		:type name: unicode
		:param parent: Node parent.
		:type parent: AbstractCompositeNode
		:param children: Children.
		:type children: list
		:param \*\*kwargs: Keywords arguments.
		:type \*\*kwargs: \*\*
		"""

		LOGGER.debug("> Initializing '{0}()' class.".format(self.__class__.__name__))

		AbstractCompositeNode.__init__(self, name, parent, children, **kwargs)
Ejemplo n.º 11
0
	def __setattr__(self, attribute, value):
		"""
		Reimplements the :meth:`foundations.nodes.AbstractCompositeNode.__setattr__` method.

		:param attribute.: Attribute.
		:type attribute.: object
		:param value.: Value.
		:type value.: object
		"""

		currentValue = getattr(self, attribute, None)

		AbstractCompositeNode.__setattr__(self, attribute, value)

		if not attribute in ("_GraphModelNode__name",
							"_GraphModelNode__roles",
							"_GraphModelNode__flags"):
			return

		triggerModel = getattr(self, "_Mixin_GraphModelObject__triggerModel", False)
		if triggerModel and value is not currentValue:
			self.nodeChanged()
Ejemplo n.º 12
0
	def testInsertChild(self):
		"""
		Tests :meth:`foundations.nodes.AbstractCompositeNode.insertChild` method.
		"""

		nodeA = AbstractCompositeNode("MyNodeA")
		nodeB = AbstractCompositeNode("MyNodeB", nodeA)
		nodeC = AbstractCompositeNode("MyNodeC", nodeA)
		nodeD = AbstractCompositeNode("MyNodeD")
		self.assertTrue(nodeA.insertChild(nodeD, 1))
		for i, node in enumerate((nodeB, nodeD, nodeC)):
			self.assertEqual(nodeA.indexOf(node), i)
Ejemplo n.º 13
0
	def testFindChildren(self):
		"""
		Tests :meth:`foundations.nodes.AbstractCompositeNode.findChildren` method.
		"""

		nodeA = AbstractCompositeNode("MyNodeA")
		nodeB = AbstractCompositeNode("MyNodeB", nodeA)
		nodeC = AbstractCompositeNode("MyNodeC", nodeA)
		nodeD = AbstractCompositeNode("MyNodeD", nodeC)

		self.assertListEqual(nodeA.findChildren("MyNodeD"), [nodeD])
		for node in nodeA.findChildren("mynode.*", re.IGNORECASE):
			self.assertIn(node, (nodeB, nodeC, nodeD))
Ejemplo n.º 14
0
	def testChildrenCount(self):
		"""
		Tests :meth:`foundations.nodes.AbstractCompositeNode.childrenCount` method.
		"""

		nodeA = AbstractCompositeNode("MyNodeA")
		self.assertEqual(nodeA.childrenCount(), 0)
		nodeB = AbstractCompositeNode("MyNodeB", nodeA)
		nodeC = AbstractCompositeNode("MyNodeC", nodeA)
		self.assertEqual(nodeA.childrenCount(), 2)
Ejemplo n.º 15
0
	def testChild(self):
		"""
		Tests :meth:`foundations.nodes.AbstractCompositeNode.child` method.
		"""

		nodeA = AbstractCompositeNode("MyNodeA")
		nodeB = AbstractCompositeNode("MyNodeB", nodeA)
		nodeC = AbstractCompositeNode("MyNodeC", nodeA)
		self.assertEqual(nodeA.child(0), nodeB)
		self.assertEqual(nodeA.child(1), nodeC)
		self.assertEqual(nodeA.child(2), None)
Ejemplo n.º 16
0
    def testNodesWalker(self):
        """
		Tests :func:`foundations.walkers.nodesWalker` definition.
		"""

        nodeA = AbstractCompositeNode("MyNodeA")
        nodeB = AbstractCompositeNode("MyNodeB", nodeA)
        nodeC = AbstractCompositeNode("MyNodeC", nodeA)
        nodeD = AbstractCompositeNode("MyNodeD", nodeB)
        nodeE = AbstractCompositeNode("MyNodeE", nodeB)
        nodeF = AbstractCompositeNode("MyNodeF", nodeD)
        nodeG = AbstractCompositeNode("MyNodeG", nodeF)
        nodeH = AbstractCompositeNode("MyNodeH", nodeG)
        values = [nodeB, nodeC, nodeD, nodeE, nodeF, nodeG, nodeH]
        for node in values:
            self.assertIn(node, list(foundations.walkers.nodesWalker(nodeA)))

        values = [nodeG, nodeF, nodeD, nodeB, nodeA]
        self.assertEquals(
            list(foundations.walkers.nodesWalker(nodeH, ascendants=True)),
            values)
Ejemplo n.º 17
0
	def testSortChildrenNode(self):
		"""
		Tests :meth:`foundations.nodes.AbstractCompositeNode.sortChildren` method.
		"""

		nodeA = AbstractCompositeNode("MyNodeA", attributeA=Attribute(value="A"), attributeB=Attribute(value="1"))
		nodeC = AbstractCompositeNode("MyNodeC", nodeA, attributeA=Attribute(value="C"), attributeB=Attribute(value="3"))
		nodeB = AbstractCompositeNode("MyNodeB", nodeA, attributeA=Attribute(value="B"), attributeB=Attribute(value="2"))
		nodeG = AbstractCompositeNode("MyNodeG", nodeB, attributeA=Attribute(value="G"))
		nodeE = AbstractCompositeNode("MyNodeE", nodeB, attributeA=Attribute(value="E"), attributeB=Attribute(value="5"))
		nodeF = AbstractCompositeNode("MyNodeF", nodeB, attributeA=Attribute(value="F"), attributeB=Attribute(value="6"))
		nodeD = AbstractCompositeNode("MyNodeD", nodeB, attributeA=Attribute(value="D"), attributeB=Attribute(value="4"))

		self.assertTrue(nodeA.sortChildren())
		self.assertEqual(nodeA.children[0], nodeB)
		self.assertEqual(nodeA.children[1], nodeC)
		self.assertEqual(nodeA.children[0].children[0], nodeD)
		self.assertEqual(nodeA.children[0].children[1], nodeE)
		self.assertEqual(nodeA.children[0].children[2], nodeF)

		self.assertTrue(nodeA.sortChildren(reverseOrder=True))
		self.assertEqual(nodeA.children[0], nodeC)
		self.assertEqual(nodeA.children[1], nodeB)
		self.assertEqual(nodeA.children[1].children[0], nodeG)
		self.assertEqual(nodeA.children[1].children[1], nodeF)
		self.assertEqual(nodeA.children[1].children[2], nodeE)
		self.assertEqual(nodeA.children[1].children[3], nodeD)

		self.assertTrue(nodeA.sortChildren(attribute="attributeA"))
		self.assertEqual(nodeA.children[0], nodeB)
		self.assertEqual(nodeA.children[1], nodeC)
		self.assertEqual(nodeA.children[0].children[0], nodeD)
		self.assertEqual(nodeA.children[0].children[1], nodeE)
		self.assertEqual(nodeA.children[0].children[2], nodeF)

		self.assertTrue(nodeA.sortChildren(attribute="attributeA", reverseOrder=True))
		self.assertEqual(nodeA.children[0], nodeC)
		self.assertEqual(nodeA.children[1], nodeB)
		self.assertEqual(nodeA.children[1].children[0], nodeG)
		self.assertEqual(nodeA.children[1].children[1], nodeF)
		self.assertEqual(nodeA.children[1].children[2], nodeE)
		self.assertEqual(nodeA.children[1].children[3], nodeD)

		self.assertTrue(nodeA.sortChildren(attribute="attributeB"))
		self.assertEqual(nodeA.children[0], nodeB)
		self.assertEqual(nodeA.children[1], nodeC)
		self.assertEqual(nodeA.children[0].children[0], nodeD)
		self.assertEqual(nodeA.children[0].children[1], nodeE)
		self.assertEqual(nodeA.children[0].children[2], nodeF)
		self.assertEqual(nodeA.children[0].children[3], nodeG)

		self.assertTrue(nodeA.sortChildren(attribute="attributeB", reverseOrder=True))
		self.assertEqual(nodeA.children[0], nodeC)
		self.assertEqual(nodeA.children[1], nodeB)
		self.assertEqual(nodeA.children[1].children[0], nodeF)
		self.assertEqual(nodeA.children[1].children[1], nodeE)
		self.assertEqual(nodeA.children[1].children[2], nodeD)
		self.assertEqual(nodeA.children[1].children[3], nodeG)