Files
urh/tests/QtTestCase.py
Johannes Pohl 353868768d UI Upgrade of message type configuration (#532)
* first step of message type ui upgrade

* remove preselected index from ProtocolLabelDialog constructor

* remove selection changed for label

* move edit message type button to table

* remove delete button, functionality is now in table

* improve message type context menu

* add color selection to protocol label table

* allowing hiding of message types

* sync selection between message type table and message table

* make label visibility configurable in table

* enable deletion of labels in table

* update unittests

* fix selection bug

* update coveragerc

* support copy of labels to other message type

* avoid creating new object when reading message types from project

* fix test

* update changelog

* Make configuration button transparent

* selected label bold

* resize headers

* add show/hide all action

* same behaviour for label edits in tables

* adapt unittest

* cleanup on_table_selection_timer_timeout + update selection ui

* make current label and message type bold + add message type icon

* adapt unittest

* draw number of configured rules

* increase timeout for ci

* show num active rules only

* minor fixes

* increase timeout for ci

* sync show state

* disable grid

* close all -> close all files

* add close project action

* fix close project action

* clear message types on new project

* update changelog and project dialog buttons

* adapt unittests

* adapt unittests

* remove live update of qapp style to prevent segfault

* improve icon
2018-09-27 18:06:22 +02:00

108 lines
3.5 KiB
Python

import faulthandler
import gc
import os
import sip
import sys
import time
import unittest
from PyQt5.QtCore import Qt
from PyQt5.QtGui import QDropEvent
from PyQt5.QtTest import QTest
from PyQt5.QtWidgets import QApplication
from tests.utils_testing import write_settings, get_path_for_data_file
from urh.controller.MainController import MainController
faulthandler.enable()
class QtTestCase(unittest.TestCase):
CLOSE_TIMEOUT = 10
WAIT_TIMEOUT_BEFORE_NEW = 10
SHOW = os.path.exists(os.path.join(os.path.dirname(os.path.realpath(__file__)), "show_gui"))
@classmethod
def setUpClass(cls):
import multiprocessing as mp
try:
mp.set_start_method("spawn")
except RuntimeError:
pass
assert mp.get_start_method() == "spawn"
write_settings()
cls.app = QApplication([cls.__name__])
@classmethod
def tearDownClass(cls):
cls.app.quit()
sip.delete(cls.app)
cls.app = None
QTest.qWait(10)
time.sleep(0.1)
def setUp(self):
self.form = MainController()
if self.SHOW:
self.form.show()
def tearDown(self):
if hasattr(self, "dialog"):
self.dialog.close()
if sys.platform == "win32" or sys.platform == "darwin":
sip.delete(self.dialog)
self.dialog = None
if hasattr(self, "form"):
self.form.close_all_files()
self.form.close()
if sys.platform == "win32" or sys.platform == "darwin":
sip.delete(self.form)
self.form = None
if sys.platform == "darwin":
gc.collect()
def wait_before_new_file(self):
QApplication.instance().processEvents()
QTest.qWait(self.WAIT_TIMEOUT_BEFORE_NEW)
def add_signal_to_form(self, filename: str):
self.wait_before_new_file()
self.form.add_signalfile(get_path_for_data_file(filename))
def get_path_for_filename(self, filename) -> str:
return get_path_for_data_file(filename)
def add_signal_to_generator(self, signal_index: int):
gframe = self.form.generator_tab_controller
item = gframe.tree_model.rootItem.children[0].children[signal_index]
index = gframe.tree_model.createIndex(signal_index, 0, item)
rect = gframe.ui.treeProtocols.visualRect(index)
QTest.mousePress(gframe.ui.treeProtocols.viewport(), Qt.LeftButton, pos=rect.center())
self.assertEqual(gframe.ui.treeProtocols.selectedIndexes()[0], index)
mimedata = gframe.tree_model.mimeData(gframe.ui.treeProtocols.selectedIndexes())
gframe.table_model.dropMimeData(mimedata, 1, -1, -1, gframe.table_model.createIndex(0, 0))
def add_all_signals_to_simulator(self):
assert isinstance(self.form, MainController)
sim_frame = self.form.simulator_tab_controller
sim_frame.ui.treeProtocols.selectAll()
self.assertGreater(len(sim_frame.ui.treeProtocols.selectedIndexes()), 0)
mimedata = sim_frame.tree_model.mimeData(sim_frame.ui.treeProtocols.selectedIndexes())
drop_event = QDropEvent(sim_frame.ui.gvSimulator.rect().center(), Qt.CopyAction | Qt.MoveAction,
mimedata, Qt.LeftButton, Qt.NoModifier)
drop_event.acceptProposedAction()
sim_frame.ui.gvSimulator.dropEvent(drop_event)
def get_free_port(self):
import socket
s = socket.socket()
s.bind(("", 0))
port = s.getsockname()[1]
s.close()
return port