source: orange/Orange/OrangeCanvas/scheme/tests/test_readwrite.py @ 11112:ce1574cdd4fd

Revision 11112:ce1574cdd4fd, 2.7 KB checked in by Ales Erjavec <ales.erjavec@…>, 19 months ago (diff)

Fixed scheme annotation serialization, added tests.

Line 
1"""Test read write
2"""
3from ...gui import test
4from ...registry import global_registry
5
6from .. import Scheme, SchemeNode, SchemeLink, \
7               SchemeArrowAnnotation, SchemeTextAnnotation
8
9from ..readwrite import scheme_to_ows_stream, parse_scheme
10
11
12class TestReadWrite(test.QAppTestCase):
13    def test_io(self):
14        from StringIO import StringIO
15        reg = global_registry()
16
17        base = "Orange.OrangeWidgets"
18        file_desc = reg.widget(base + ".Data.OWFile.OWFile")
19        discretize_desc = reg.widget(base + ".Data.OWDiscretize.OWDiscretize")
20        bayes_desc = reg.widget(base + ".Classify.OWNaiveBayes.OWNaiveBayes")
21
22        scheme = Scheme()
23        file_node = SchemeNode(file_desc)
24        discretize_node = SchemeNode(discretize_desc)
25        bayes_node = SchemeNode(bayes_desc)
26
27        scheme.add_node(file_node)
28        scheme.add_node(discretize_node)
29        scheme.add_node(bayes_node)
30
31        scheme.add_link(SchemeLink(file_node, "Data",
32                                   discretize_node, "Data"))
33
34        scheme.add_link(SchemeLink(discretize_node, "Data",
35                                   bayes_node, "Data"))
36
37        scheme.add_annotation(SchemeArrowAnnotation((0, 0), (10, 10)))
38        scheme.add_annotation(SchemeTextAnnotation((0, 100, 200, 200), "$$"))
39
40        stream = StringIO()
41        scheme_to_ows_stream(scheme, stream)
42
43        stream.seek(0)
44
45        scheme_1 = parse_scheme(Scheme(), stream)
46
47        self.assertTrue(len(scheme.nodes) == len(scheme_1.nodes))
48        self.assertTrue(len(scheme.links) == len(scheme_1.links))
49        self.assertTrue(len(scheme.annotations) == len(scheme_1.annotations))
50
51        for n1, n2 in zip(scheme.nodes, scheme_1.nodes):
52            self.assertEqual(n1.position, n2.position)
53            self.assertEqual(n1.title, n2.title)
54
55        for link1, link2 in zip(scheme.links, scheme_1.links):
56            self.assertEqual(link1.source_type(), link2.source_type())
57            self.assertEqual(link1.sink_type(), link2.sink_type())
58
59            self.assertEqual(link1.source_channel.name,
60                             link2.source_channel.name)
61
62            self.assertEqual(link1.sink_channel.name,
63                             link2.sink_channel.name)
64
65            self.assertEqual(link1.enabled, link2.enabled)
66
67        for annot1, annot2 in zip(scheme.annotations, scheme_1.annotations):
68            self.assertIs(type(annot1), type(annot2))
69            if isinstance(annot1, SchemeTextAnnotation):
70                self.assertEqual(annot1.text, annot2.text)
71                self.assertEqual(annot1.rect, annot2.rect)
72            else:
73                self.assertEqual(annot1.start_pos, annot2.start_pos)
74                self.assertEqual(annot1.end_pos, annot2.end_pos)
Note: See TracBrowser for help on using the repository browser.