forked from jopohl/urh
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtest_maincontroller_gui.py
153 lines (121 loc) · 5.98 KB
/
test_maincontroller_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
142
143
144
145
146
147
148
149
150
151
152
153
import os
import sys
import tempfile
import wave
import numpy as np
from PyQt5.QtCore import QTimer, QDir
from PyQt5.QtWidgets import QApplication
from tests.QtTestCase import QtTestCase
from tests.utils_testing import get_path_for_data_file
from urh import settings
from urh.controller.MainController import MainController
from urh.controller.dialogs.CSVImportDialog import CSVImportDialog
from urh.controller.dialogs.OptionsDialog import OptionsDialog
class TestMaincontrollerGUI(QtTestCase):
def test_open_recent_file(self):
settings.write("recentFiles", [])
# Ensure we have at least one recent action
self.form.add_files([get_path_for_data_file("esaver.complex16s")])
self.assertEqual(len(self.form.signal_tab_controller.signal_frames), 1)
self.form.recentFileActionList[0].trigger()
self.assertEqual(len(self.form.signal_tab_controller.signal_frames), 2)
def test_open_rect_directory(self):
test_dir = os.path.join(tempfile.gettempdir(), "project_test")
try:
os.mkdir(test_dir)
except OSError:
pass
self.form.project_manager.set_project_folder(test_dir, ask_for_new_project=False)
self.assertIn("project_test", self.form.recentFileActionList[0].text())
def test_update_decodings(self):
self.form.update_decodings()
self.assertTrue(True)
def test_options_changed(self):
self.add_signal_to_form("esaver.complex16s")
self.form.on_options_changed({"show_pause_as_time": True, "default_view": 2})
QApplication.instance().processEvents()
self.assertEqual(self.form.signal_tab_controller.signal_frames[0].ui.cbProtoView.currentIndex(), 2)
def test_open_plain_bits(self):
bits = ["1010111000110001010101010101",
"1010111110010010101",
"1111010100101010101010101010"]
filename = os.path.join(tempfile.gettempdir(), "test_plain_bits.txt")
with open(filename, "w") as f:
f.write(os.linesep.join(bits))
self.form.compare_frame_controller.ui.cbProtoView.setCurrentIndex(0)
self.form.add_files([filename])
for i, bit_seq in enumerate(bits):
table_data = "".join(map(str, self.form.compare_frame_controller.protocol_model.display_data[i]))
self.assertEqual(bit_seq, table_data)
def test_open_options_dialog(self):
self.form.show_options_dialog_specific_tab(1)
w = next((w for w in QApplication.topLevelWidgets() if isinstance(w, OptionsDialog)),
None) # type: OptionsDialog
self.assertIsNotNone(w)
self.assertEqual(w.ui.tabWidget.currentIndex(), 1)
w.close()
def test_import_csv(self):
if sys.platform == "darwin":
return
def accept_csv_dialog():
for w in QApplication.topLevelWidgets():
if isinstance(w, CSVImportDialog):
w.accept()
timer.stop()
timer = QTimer(self.form)
timer.setInterval(50)
timer.timeout.connect(accept_csv_dialog)
self.assertEqual(self.form.signal_tab_controller.num_frames, 0)
timer.start()
self.form.add_files([self.get_path_for_filename("csvtest.csv")])
self.assertFalse(timer.isActive())
self.assertEqual(self.form.signal_tab_controller.signal_frames[0].signal.num_samples, 100)
self.assertTrue(os.path.isfile(self.get_path_for_filename("csvtest.complex")))
timer.start()
self.form.add_files([self.get_path_for_filename("csvtest.csv")])
self.assertEqual(self.form.signal_tab_controller.num_frames, 2)
self.assertTrue(os.path.isfile(self.get_path_for_filename("csvtest_1.complex")))
os.remove(self.get_path_for_filename("csvtest.complex"))
os.remove(self.get_path_for_filename("csvtest_1.complex"))
def test_load_single_channel_wav(self):
filename = os.path.join(tempfile.gettempdir(), "test_single_channel.wav")
f = wave.open(filename, "w")
f.setnchannels(1)
f.setsampwidth(1)
f.setframerate(2e6)
f.writeframes(np.array([1, 2, 3, 4], dtype=np.uint8))
f.close()
self.add_signal_to_form(filename)
sig_frame = self.form.signal_tab_controller.signal_frames[0]
self.assertEqual(sig_frame.signal.sample_rate, 2e6)
self.assertEqual(sig_frame.signal.num_samples, 4)
self.assertNotEqual(sig_frame.signal.iq_array.real.sum(), 0)
self.assertEqual(sig_frame.signal.iq_array.imag.sum(), 0)
def test_load_stereo_wav(self):
filename = os.path.join(tempfile.gettempdir(), "test_stereo.wav")
f = wave.open(filename, "w")
f.setnchannels(2)
f.setsampwidth(2)
f.setframerate(10e6)
f.writeframes(np.array([23556, 2132, 111, 11111, 3455, 2324], dtype=np.int16))
f.close()
self.add_signal_to_form(filename)
sig_frame = self.form.signal_tab_controller.signal_frames[0]
self.assertEqual(sig_frame.signal.sample_rate, 10e6)
self.assertEqual(sig_frame.signal.num_samples, 3)
self.assertNotEqual(sig_frame.signal.iq_array.real.sum(), 0)
self.assertNotEqual(sig_frame.signal.iq_array.imag.sum(), 0)
def test_remove_file_from_directory_tree_view(self):
assert isinstance(self.form, MainController)
file_proxy_model = self.form.file_proxy_model
file_model = self.form.filemodel
self.form.ui.fileTree.setRootIndex(file_proxy_model.mapFromSource(file_model.index(QDir.tempPath())))
menu = self.form.ui.fileTree.create_context_menu()
remove_action = next((action for action in menu.actions() if action.text() == "Delete"), None)
self.assertIsNotNone(remove_action)
f = os.path.join(QDir.tempPath(), "test")
open(f, "w").close()
self.assertTrue(os.path.isfile(f))
self.form.ui.fileTree.setCurrentIndex(file_proxy_model.mapFromSource(file_model.index(f)))
remove_action.trigger()
self.assertFalse(os.path.isfile(f))