mirror of
https://github.com/jopohl/urh.git
synced 2026-03-03 06:54:00 +01:00
111 lines
4.0 KiB
Python
111 lines
4.0 KiB
Python
import time
|
|
|
|
from PyQt6.QtCore import Qt
|
|
from PyQt6.QtTest import QTest
|
|
|
|
from tests.QtTestCase import QtTestCase
|
|
from urh.signalprocessing.Message import Message
|
|
from urh.signalprocessing.ProtocolAnalyzer import ProtocolAnalyzer
|
|
|
|
|
|
class TestGeneratorTable(QtTestCase):
|
|
NUM_MESSAGES = 2**16
|
|
BITS_PER_MESSAGE = 100
|
|
NUM_LABELS = 3
|
|
|
|
def setUp(self):
|
|
super().setUp()
|
|
|
|
def test_performance(self):
|
|
self.cframe = self.form.compare_frame_controller
|
|
self.gframe = self.form.generator_tab_controller
|
|
self.form.ui.tabWidget.setCurrentIndex(2)
|
|
self.cframe.ui.cbProtoView.setCurrentIndex(0)
|
|
self.gframe.ui.cbViewType.setCurrentIndex(0)
|
|
proto = self.__build_protocol()
|
|
self.cframe.add_protocol(proto)
|
|
proto.qt_signals.protocol_updated.emit()
|
|
self.assertEqual(self.cframe.protocol_model.row_count, self.NUM_MESSAGES)
|
|
self.assertEqual(self.cframe.protocol_model.col_count, self.BITS_PER_MESSAGE)
|
|
self.__add_labels()
|
|
item = self.gframe.tree_model.rootItem.children[0].children[0]
|
|
index = self.gframe.tree_model.createIndex(0, 0, item)
|
|
rect = self.gframe.ui.treeProtocols.visualRect(index)
|
|
QTest.mousePress(
|
|
self.gframe.ui.treeProtocols.viewport(),
|
|
Qt.MouseButton.LeftButton,
|
|
pos=rect.center(),
|
|
)
|
|
|
|
self.assertEqual(self.gframe.ui.treeProtocols.selectedIndexes()[0], index)
|
|
mimedata = self.gframe.tree_model.mimeData(
|
|
self.gframe.ui.treeProtocols.selectedIndexes()
|
|
)
|
|
t = time.time()
|
|
self.gframe.table_model.dropMimeData(
|
|
mimedata, 1, -1, -1, self.gframe.table_model.createIndex(0, 0)
|
|
)
|
|
print("{0}: {1} s".format("Time for dropping mimedata", (time.time() - t)))
|
|
self.assertEqual(self.gframe.table_model.row_count, self.NUM_MESSAGES)
|
|
|
|
print("==============================00")
|
|
indx = self.gframe.table_model.createIndex(
|
|
int(self.NUM_MESSAGES / 2), int(self.BITS_PER_MESSAGE / 2)
|
|
)
|
|
roles = (
|
|
Qt.ItemDataRole.DisplayRole,
|
|
Qt.ItemDataRole.BackgroundRole,
|
|
Qt.ItemDataRole.TextAlignmentRole,
|
|
Qt.ItemDataRole.ForegroundRole,
|
|
Qt.ItemDataRole.FontRole,
|
|
)
|
|
time_for_display = 100
|
|
for role in roles:
|
|
t = time.time()
|
|
self.gframe.table_model.data(indx, role=role)
|
|
microseconds = (time.time() - t) * 10**6
|
|
self.assertLessEqual(
|
|
microseconds, 2 * time_for_display, msg=self.__role_to_str(role)
|
|
)
|
|
if role == Qt.ItemDataRole.DisplayRole:
|
|
time_for_display = microseconds
|
|
print("{0}: {1} µs".format(self.__role_to_str(role), microseconds))
|
|
|
|
def __build_protocol(self):
|
|
result = ProtocolAnalyzer(signal=None)
|
|
for _ in range(self.NUM_MESSAGES):
|
|
b = Message(
|
|
[True] * self.BITS_PER_MESSAGE,
|
|
pause=1000,
|
|
message_type=result.default_message_type,
|
|
)
|
|
result.messages.append(b)
|
|
return result
|
|
|
|
def __add_labels(self):
|
|
start = 0
|
|
label_len = 3
|
|
for i in range(self.NUM_LABELS):
|
|
self.cframe.add_protocol_label(
|
|
start=start,
|
|
end=start + label_len,
|
|
messagenr=0,
|
|
proto_view=0,
|
|
edit_label_name=False,
|
|
)
|
|
start += label_len + 1
|
|
|
|
def __role_to_str(self, role):
|
|
if role == Qt.ItemDataRole.DisplayRole:
|
|
return "Display"
|
|
if role == Qt.ItemDataRole.BackgroundRole:
|
|
return "BG-Color"
|
|
if role == Qt.ItemDataRole.TextAlignmentRole:
|
|
return "Text-Alignment"
|
|
if role == Qt.ItemDataRole.ForegroundRole:
|
|
return "TextColor"
|
|
if role == Qt.ItemDataRole.ToolTipRole:
|
|
return "ToolTip"
|
|
if role == Qt.ItemDataRole.FontRole:
|
|
return "Font"
|