source: orange/Orange/OrangeCanvas/canvas/items/tests/test_linkitem.py @ 11182:70ae8e72389b

Revision 11182:70ae8e72389b, 3.7 KB checked in by Ales Erjavec <ales.erjavec@…>, 17 months ago (diff)

Showing the dynamic link state in the canvas.

Line 
1import time
2
3from ..linkitem import LinkItem
4
5from .. import NodeItem, AnchorPoint
6
7from ....registry.tests import small_testing_registry
8
9from . import TestItems
10
11
12class TestLinkItem(TestItems):
13    def test_linkitem(self):
14        reg = small_testing_registry()
15
16        data_desc = reg.category("Data")
17
18        file_desc = reg.widget("Orange.OrangeWidgets.Data.OWFile.OWFile")
19
20        file_item = NodeItem()
21        file_item.setWidgetDescription(file_desc)
22        file_item.setWidgetCategory(data_desc)
23        file_item.setPos(0, 100)
24
25        discretize_desc = reg.widget(
26            "Orange.OrangeWidgets.Data.OWDiscretize.OWDiscretize"
27        )
28
29        discretize_item = NodeItem()
30        discretize_item.setWidgetDescription(discretize_desc)
31        discretize_item.setWidgetCategory(data_desc)
32        discretize_item.setPos(200, 100)
33        classify_desc = reg.category("Classify")
34
35        bayes_desc = reg.widget(
36            "Orange.OrangeWidgets.Classify.OWNaiveBayes.OWNaiveBayes"
37        )
38
39        nb_item = NodeItem()
40        nb_item.setWidgetDescription(bayes_desc)
41        nb_item.setWidgetCategory(classify_desc)
42        nb_item.setPos(400, 100)
43
44        self.scene.addItem(file_item)
45        self.scene.addItem(discretize_item)
46        self.scene.addItem(nb_item)
47
48        link = LinkItem()
49        anchor1 = file_item.newOutputAnchor()
50        anchor2 = discretize_item.newInputAnchor()
51
52        self.assertSequenceEqual(file_item.outputAnchors(), [anchor1])
53        self.assertSequenceEqual(discretize_item.inputAnchors(), [anchor2])
54
55        link.setSourceItem(file_item, anchor1)
56        link.setSinkItem(discretize_item, anchor2)
57
58        # Setting an item and an anchor not in the item's anchors raises
59        # an error.
60        with self.assertRaises(ValueError):
61            link.setSourceItem(file_item, AnchorPoint())
62
63        self.assertSequenceEqual(file_item.outputAnchors(), [anchor1])
64
65        anchor2 = file_item.newOutputAnchor()
66
67        link.setSourceItem(file_item, anchor2)
68        self.assertSequenceEqual(file_item.outputAnchors(), [anchor1, anchor2])
69        self.assertIs(link.sourceAnchor, anchor2)
70
71        file_item.removeOutputAnchor(anchor1)
72
73        self.scene.addItem(link)
74
75        link = LinkItem()
76        link.setSourceItem(discretize_item)
77        link.setSinkItem(nb_item)
78
79        self.scene.addItem(link)
80
81        self.assertTrue(len(nb_item.inputAnchors()) == 1)
82        self.assertTrue(len(discretize_item.outputAnchors()) == 1)
83        self.assertTrue(len(discretize_item.inputAnchors()) == 1)
84        self.assertTrue(len(file_item.outputAnchors()) == 1)
85
86        link.removeLink()
87
88        self.assertTrue(len(nb_item.inputAnchors()) == 0)
89        self.assertTrue(len(discretize_item.outputAnchors()) == 0)
90        self.assertTrue(len(discretize_item.inputAnchors()) == 1)
91        self.assertTrue(len(file_item.outputAnchors()) == 1)
92
93        self.app.exec_()
94
95    def test_dynamic_link(self):
96        link = LinkItem()
97        anchor1 = AnchorPoint()
98        anchor2 = AnchorPoint()
99
100        self.scene.addItem(link)
101        self.scene.addItem(anchor1)
102        self.scene.addItem(anchor2)
103
104        link.setSourceItem(None, anchor1)
105        link.setSinkItem(None, anchor2)
106
107        anchor2.setPos(100, 100)
108
109        link.setSourceName("1")
110        link.setSinkName("2")
111
112        link.setDynamic(True)
113        self.assertTrue(link.isDynamic())
114
115        link.setDynamicEnabled(True)
116        self.assertTrue(link.isDynamicEnabled())
117
118        def advance():
119            clock = time.clock()
120            link.setDynamic(clock > 3)
121            link.setDynamicEnabled(int(clock) % 2 == 0)
122            self.singleShot(0, advance)
123
124        advance()
125
126        self.app.exec_()
Note: See TracBrowser for help on using the repository browser.