source: orange/Orange/OrangeCanvas/canvas/items/tests/test_linkitem.py @ 11102:1ae099099c23

Revision 11102:1ae099099c23, 2.8 KB checked in by Ales Erjavec <ales.erjavec@…>, 18 months ago (diff)

Added GraphicsItems representing the items in the workflow scheme.

Line 
1from ..linkitem import LinkItem
2
3from .. import NodeItem, AnchorPoint
4
5from ....registry.tests import small_testing_registry
6
7from . import TestItems
8
9
10class TestLinkItem(TestItems):
11    def test_linkitem(self):
12        reg = small_testing_registry()
13
14        data_desc = reg.category("Data")
15
16        file_desc = reg.widget("Orange.OrangeWidgets.Data.OWFile.OWFile")
17
18        file_item = NodeItem()
19        file_item.setWidgetDescription(file_desc)
20        file_item.setWidgetCategory(data_desc)
21        file_item.setPos(0, 100)
22
23        discretize_desc = reg.widget(
24            "Orange.OrangeWidgets.Data.OWDiscretize.OWDiscretize"
25        )
26
27        discretize_item = NodeItem()
28        discretize_item.setWidgetDescription(discretize_desc)
29        discretize_item.setWidgetCategory(data_desc)
30        discretize_item.setPos(200, 100)
31        classify_desc = reg.category("Classify")
32
33        bayes_desc = reg.widget(
34            "Orange.OrangeWidgets.Classify.OWNaiveBayes.OWNaiveBayes"
35        )
36
37        nb_item = NodeItem()
38        nb_item.setWidgetDescription(bayes_desc)
39        nb_item.setWidgetCategory(classify_desc)
40        nb_item.setPos(400, 100)
41
42        self.scene.addItem(file_item)
43        self.scene.addItem(discretize_item)
44        self.scene.addItem(nb_item)
45
46        link = LinkItem()
47        anchor1 = file_item.newOutputAnchor()
48        anchor2 = discretize_item.newInputAnchor()
49
50        self.assertSequenceEqual(file_item.outputAnchors, [anchor1])
51        self.assertSequenceEqual(discretize_item.inputAnchors, [anchor2])
52
53        link.setSourceItem(file_item, anchor1)
54        link.setSinkItem(discretize_item, anchor2)
55
56        # Setting an item and an anchor not in the item's anchors raises
57        # an error.
58        with self.assertRaises(ValueError):
59            link.setSourceItem(file_item, AnchorPoint())
60
61        self.assertSequenceEqual(file_item.outputAnchors, [anchor1])
62
63        anchor2 = file_item.newOutputAnchor()
64
65        link.setSourceItem(file_item, anchor2)
66        self.assertSequenceEqual(file_item.outputAnchors, [anchor1, anchor2])
67        self.assertIs(link.sourceAnchor, anchor2)
68
69        file_item.removeOutputAnchor(anchor1)
70
71        self.scene.addItem(link)
72
73        link = LinkItem()
74        link.setSourceItem(discretize_item)
75        link.setSinkItem(nb_item)
76
77        self.scene.addItem(link)
78
79        self.assertTrue(len(nb_item.inputAnchors) == 1)
80        self.assertTrue(len(discretize_item.outputAnchors) == 1)
81        self.assertTrue(len(discretize_item.inputAnchors) == 1)
82        self.assertTrue(len(file_item.outputAnchors) == 1)
83
84        link.removeLink()
85
86        self.assertTrue(len(nb_item.inputAnchors) == 0)
87        self.assertTrue(len(discretize_item.outputAnchors) == 0)
88        self.assertTrue(len(discretize_item.inputAnchors) == 1)
89        self.assertTrue(len(file_item.outputAnchors) == 1)
90
91        self.app.exec_()
Note: See TracBrowser for help on using the repository browser.