forked from jopohl/urh
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtest_decoding_gui.py
141 lines (109 loc) · 5.83 KB
/
test_decoding_gui.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
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
import os
import tempfile
from PyQt5.QtCore import QPoint, QTimer
from PyQt5.QtWidgets import qApp, QInputDialog, QMessageBox
from tests.QtTestCase import QtTestCase
from urh import settings
from urh.controller.dialogs.DecoderDialog import DecoderDialog
from urh.signalprocessing.Encoding import Encoding
class TestDecodingGUI(QtTestCase):
def setUp(self):
super().setUp()
self.add_signal_to_form("esaver.complex16s")
# add empty signal
path = os.path.join(tempfile.gettempdir(), "empty.complex")
open(path, "w").close()
self.form.add_signalfile(path)
signal = self.form.signal_tab_controller.signal_frames[0].signal
empty_signal = self.form.signal_tab_controller.signal_frames[1].signal
self.dialog = DecoderDialog(decodings=self.form.compare_frame_controller.decodings,
signals=[signal, empty_signal], parent=self.form,
project_manager=self.form.project_manager)
if self.SHOW:
self.dialog.show()
def test_edit_decoding(self):
self.dialog.ui.combobox_decodings.setCurrentIndex(1) # NRZI
self.assertEqual(self.dialog.ui.decoderchain.count(), 1) # One Invert
self.dialog.save_to_file()
def test_build_decoding(self):
self.dialog.ui.combobox_decodings.setCurrentIndex(4)
chain = [(settings.DECODING_INVERT,),
(settings.DECODING_ENOCEAN,),
(settings.DECODING_DIFFERENTIAL,),
(settings.DECODING_CARRIER,),
(settings.DECODING_BITORDER,),
(settings.DECODING_EDGE,),
(settings.DECODING_INVERT,),
(settings.DECODING_DATAWHITENING,),
(settings.DECODING_REDUNDANCY, "2"),
(settings.DECODING_MORSE, "1;3;1"),
(settings.DECODING_SUBSTITUTION, "0:1;1:0;"),
(settings.DECODING_EXTERNAL, "./;./"),
(settings.DECODING_CUT, "0;1010")]
decoding = Encoding(chain=[c for chain_item in chain for c in chain_item])
self.dialog.decodings[4] = decoding
self.dialog.set_e()
self.assertEqual(len(chain), self.dialog.ui.decoderchain.count())
for i in range(0, self.dialog.ui.decoderchain.count()):
self.dialog.ui.decoderchain.setCurrentRow(i)
self.dialog.set_information(2)
self.assertIn(chain[i][0], self.dialog.ui.info.text())
def test_set_signal(self):
self.dialog.ui.combobox_signals.setCurrentText("esaver")
bits = "".join(self.form.signal_tab_controller.signal_frames[0].proto_analyzer.plain_bits_str)
self.assertEqual(self.dialog.ui.inpt.text(), bits)
self.dialog.ui.combobox_signals.setCurrentIndex(0)
self.assertEqual(self.dialog.ui.inpt.text(), "10010110")
def test_set_signal_empty_message(self):
self.dialog.ui.combobox_signals.setCurrentText("empty")
self.assertEqual(self.dialog.ui.inpt.text(), "")
def test_select_items(self):
for i in range(0, self.dialog.ui.basefunctions.count()):
self.dialog.ui.basefunctions.setCurrentRow(i)
self.assertIn(self.dialog.ui.basefunctions.currentItem().text(), self.dialog.ui.info.text())
for i in range(0, self.dialog.ui.additionalfunctions.count()):
self.dialog.ui.additionalfunctions.setCurrentRow(i)
self.assertIn(self.dialog.ui.additionalfunctions.currentItem().text(), self.dialog.ui.info.text())
def test_context_menu(self):
self.dialog.ui.combobox_decodings.setCurrentIndex(4)
decoding = Encoding(chain=[settings.DECODING_INVERT])
self.dialog.decodings[4] = decoding
self.dialog.set_e()
self.assertEqual(1, self.dialog.ui.decoderchain.count())
self.dialog.ui.decoderchain.context_menu_pos = QPoint(0, 0)
menu = self.dialog.ui.decoderchain.create_context_menu()
menu_actions = [action.text() for action in menu.actions() if action.text()]
self.assertEqual(3, len(menu_actions))
def test_disable_enable_decoding_item(self):
self.dialog.ui.decoderchain.addItem(settings.DECODING_INVERT)
self.dialog.decoderchainUpdate()
self.assertEqual(self.dialog.ui.decoderchain.count(), 1)
self.dialog.ui.decoderchain.context_menu_pos = QPoint(0, 0)
self.dialog.ui.decoderchain.on_disable_function_triggered()
self.assertIn(settings.DECODING_DISABLED_PREFIX, self.dialog.ui.decoderchain.item(0).text())
self.dialog.ui.decoderchain.on_disable_function_triggered()
self.assertNotIn(self.dialog.ui.decoderchain.item(0).text(), settings.DECODING_DISABLED_PREFIX)
def test_save_remove_decoding(self):
def set_save_name():
timer.stop()
input_dialog = next(w for w in qApp.topLevelWidgets() if isinstance(w, QInputDialog))
input_dialog.setTextValue("Test decoding")
input_dialog.accept()
def accept_delete():
timer.stop()
message_box = next(w for w in qApp.topLevelWidgets() if isinstance(w, QMessageBox))
message_box.button(QMessageBox.Yes).click()
self.dialog.ui.decoderchain.addItem(settings.DECODING_CUT)
self.dialog.decoderchainUpdate()
self.assertEqual(self.dialog.ui.decoderchain.count(), 1)
timer = QTimer(self.dialog)
timer.setSingleShot(True)
timer.timeout.connect(set_save_name)
timer.start(10)
self.dialog.ui.saveas.click()
self.assertEqual(self.dialog.ui.combobox_decodings.currentText(), "Test decoding")
timer.timeout.disconnect(set_save_name)
timer.timeout.connect(accept_delete)
timer.start(10)
self.dialog.ui.delete_decoding.click()
self.assertNotEqual(self.dialog.ui.combobox_decodings.currentText(), "Test decoding")