-
Notifications
You must be signed in to change notification settings - Fork 12
/
Copy pathtests.py
127 lines (100 loc) · 4.49 KB
/
tests.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
import unittest
import sys
from asyncua import ua, Server
from PyQt5 import Qt
from PyQt5.QtWidgets import QApplication, QTreeView, QAbstractItemDelegate, QTableView
from uawidgets.attrs_widget import AttrsWidget
from uawidgets.refs_widget import RefsWidget
class TestRefsWidget(unittest.TestCase):
def setUp(self):
self.server = Server()
self.server.set_endpoint("opc.tcp://0.0.0.0:48409/freeopcua/server/")
self.server.start()
self.widget = RefsWidget(QTableView())
def tearDown(self):
self.server.stop()
def test_1(self):
o = self.server.nodes.objects
self.widget.show_refs(o)
class TestAttrsWidget(unittest.TestCase):
def setUp(self):
self.server = Server()
self.server.set_endpoint("opc.tcp://0.0.0.0:4840/freeopcua/server/")
self.server.start()
self.widget = AttrsWidget(QTreeView())
def tearDown(self):
self.server.stop()
def find_item(self, text):
idxlist = self.widget.model.match(self.widget.model.index(0, 0), Qt.DisplayRole, text, 1, Qt.MatchExactly | Qt.MatchRecursive)
idx = idxlist[0]
return idx
def modify_item(self, text, val, match_to_use=0):
"""
modify the current item and set its displayed value to 'val'
"""
idxlist = self.widget.model.match(self.widget.model.index(0, 0), Qt.DisplayRole, text, match_to_use + 1, Qt.MatchExactly | Qt.MatchRecursive)
if not idxlist:
raise RuntimeError("Item with text '{}' not found".format(text))
idx = idxlist[match_to_use]
self.widget.view.setCurrentIndex(idx)
idx = idx.sibling(idx.row(), 1)
self.widget.view.edit(idx)
editor = self.widget.view.focusWidget()
if not editor:
print(app.focusWidget())
print("NO EDITOR WIDGET")
#QTest.keyClick(self.widget.view, Qt.Key_Return)
from IPython import embed
embed()
raise RuntimeError("Could not get editor widget!, it does not have the focus")
if hasattr(editor, "_current_node"):
editor._current_node = val
elif hasattr(editor, "setCurrentText"):
editor.setCurrentText(val)
else:
editor.setText(val)
self.widget.view.commitData(editor)
self.widget.view.closeEditor(editor, QAbstractItemDelegate.NoHint)
self.widget.view.reset()
def modify_value(self, val):
self.modify_item("Value", val, 1)
def test_display_objects_node(self):
objects = self.server.nodes.objects
self.widget.show_attrs(objects)
self.modify_item("BrowseName", "5:titi")
self.assertEqual(objects.read_browse_name().to_string(), "5:titi")
self.modify_item("BrowseName", "0:Objects") # restore states for other tests
def test_display_var_double(self):
objects = self.server.nodes.objects
myvar = objects.add_variable(1, "myvar1", 9.99, ua.VariantType.Double)
self.widget.show_attrs(myvar)
self.modify_value("8.45")
self.assertEqual(myvar.read_value(), 8.45)
def test_display_var_bytes(self):
objects = self.server.nodes.objects
myvar = objects.add_variable(1, "myvar_bytes", b"jkl", ua.VariantType.ByteString)
self.widget.show_attrs(myvar)
self.modify_value("titi")
self.assertEqual(myvar.read_value(), b"titi")
def test_change_data_type(self):
objects = self.server.nodes.objects
myvar = objects.add_variable(1, "myvar1", 9.99, ua.VariantType.Double)
self.widget.show_attrs(myvar)
dtype = myvar.read_data_type()
self.assertEqual(dtype, ua.NodeId(ua.ObjectIds.Double))
new_dtype = ua.NodeId(ua.ObjectIds.String)
self.modify_item("DataType", self.server.get_node(new_dtype))
self.assertEqual(myvar.read_data_type(), new_dtype)
# now try to write a value which is a string
self.modify_value("mystring")
self.assertEqual(myvar.read_value(), "mystring")
def test_change_value_rank(self): # need to find a way to modify combo box with QTest
objects = self.server.nodes.objects
myvar = objects.add_variable(1, "myvar1", 9.99, ua.VariantType.Double)
self.widget.show_attrs(myvar)
rank = myvar.read_value_rank()
self.modify_item("ValueRank", "ThreeDimensions")
self.assertEqual(myvar.read_value_rank(), ua.ValueRank.ThreeDimensions)
if __name__ == "__main__":
app = QApplication(sys.argv)
unittest.main()