From a753249b078756360375b1934a79804916ffbeac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matthias=20Ri=C3=9Fe?= Date: Fri, 12 Jan 2024 15:48:34 +0100 Subject: [PATCH] Close and delete Qt widgets that are under test By using qtbot.add_widget on the created widgets they will be automatically closed and deleted after each test. --- mslib/msui/msui_mainwindow.py | 12 ++++++---- tests/_test_msui/test_editor.py | 1 - .../_test_msui/test_kmloverlay_dockwidget.py | 2 +- tests/_test_msui/test_linearview.py | 9 ++++--- tests/_test_msui/test_mpl_map.py | 1 + tests/_test_msui/test_mscolab.py | 13 +++------- tests/_test_msui/test_mscolab_admin_window.py | 9 +++---- .../test_mscolab_merge_waypoints.py | 5 ++-- tests/_test_msui/test_mscolab_operation.py | 5 ++-- .../test_mscolab_version_history.py | 4 ++-- tests/_test_msui/test_msui.py | 24 +++++++++---------- .../test_multiple_flightpath_dockwidget.py | 5 ++-- tests/_test_msui/test_remotesensing.py | 1 + tests/_test_msui/test_satellite_dockwidget.py | 3 +-- tests/_test_msui/test_sideview.py | 9 ++++--- tests/_test_msui/test_suffix.py | 3 +-- tests/_test_msui/test_tableview.py | 4 ++-- tests/_test_msui/test_topview.py | 15 +++++++----- tests/_test_msui/test_updater.py | 1 + tests/_test_msui/test_wms_capabilities.py | 15 ++++++------ tests/_test_msui/test_wms_control.py | 12 ++++------ tests/utils.py | 4 ++++ 22 files changed, 76 insertions(+), 81 deletions(-) diff --git a/mslib/msui/msui_mainwindow.py b/mslib/msui/msui_mainwindow.py index aed56354e..80ae8713f 100644 --- a/mslib/msui/msui_mainwindow.py +++ b/mslib/msui/msui_mainwindow.py @@ -444,6 +444,7 @@ def __init__(self, mscolab_data_dir=None, tutorial_mode=False, *args): except (ImportError, AttributeError) as error: logging.debug("AttributeError, ImportError Exception %s", error) + self.force_close = False self.config_editor = None self.local_active = True self.new_flight_track_counter = 0 @@ -1069,10 +1070,13 @@ def closeEvent(self, event): Overloads QtGui.QMainWindow.closeEvent(). This method is called if Qt receives a window close request for our application window. """ - ret = QtWidgets.QMessageBox.warning( - self, self.tr("Mission Support System"), - self.tr("Do you want to close the Mission Support System application?"), - QtWidgets.QMessageBox.Yes | QtWidgets.QMessageBox.No, QtWidgets.QMessageBox.No) + if self.force_close: + ret = QtWidgets.QMessageBox.Yes + else: + ret = QtWidgets.QMessageBox.warning( + self, self.tr("Mission Support System"), + self.tr("Do you want to close the Mission Support System application?"), + QtWidgets.QMessageBox.Yes | QtWidgets.QMessageBox.No, QtWidgets.QMessageBox.No) if ret == QtWidgets.QMessageBox.Yes: if self.mscolab.help_dialog is not None: diff --git a/tests/_test_msui/test_editor.py b/tests/_test_msui/test_editor.py index 8467df83d..355e9aa20 100644 --- a/tests/_test_msui/test_editor.py +++ b/tests/_test_msui/test_editor.py @@ -49,7 +49,6 @@ def setup(self, qtbot): yield if os.path.exists(self.save_file_name): os.remove(self.save_file_name) - self.window.hide() @mock.patch("mslib.msui.editor.get_open_filename", return_value=sample_file) def test_file_open(self, mockfile): diff --git a/tests/_test_msui/test_kmloverlay_dockwidget.py b/tests/_test_msui/test_kmloverlay_dockwidget.py index 2ee23737d..7882dd9de 100644 --- a/tests/_test_msui/test_kmloverlay_dockwidget.py +++ b/tests/_test_msui/test_kmloverlay_dockwidget.py @@ -49,13 +49,13 @@ def setup(self, qtbot): self.view.map.gcpoints_path = mock.Mock(side_effect=lambda x, y: (x, y)) self.window = kd.KMLOverlayControlWidget(view=self.view) + qtbot.add_widget(self.window) self.window.show() QtTest.QTest.qWaitForWindowExposed(self.window) # start load test self.window.select_all() self.window.remove_file() yield - self.window.close() if os.path.exists(save_kml): os.remove(save_kml) diff --git a/tests/_test_msui/test_linearview.py b/tests/_test_msui/test_linearview.py index 30178e357..e41bafabf 100644 --- a/tests/_test_msui/test_linearview.py +++ b/tests/_test_msui/test_linearview.py @@ -34,16 +34,16 @@ from mslib.msui import flighttrack as ft import mslib.msui.linearview as tv from mslib.msui.mpl_qtwidget import _DEFAULT_SETTINGS_LINEARVIEW +from tests.utils import set_force_close class Test_MSS_LV_Options_Dialog: @pytest.fixture(autouse=True) def setup(self, qtbot): self.window = tv.MSUI_LV_Options_Dialog(settings=_DEFAULT_SETTINGS_LINEARVIEW) + qtbot.add_widget(self.window) self.window.show() QtTest.QTest.qWaitForWindowExposed(self.window) - yield - self.window.hide() def test_show(self): pass @@ -62,10 +62,9 @@ def setup(self, qtbot): 0, rows=len(initial_waypoints), waypoints=initial_waypoints) self.window = tv.MSUILinearViewWindow(model=waypoints_model) + qtbot.add_widget(self.window, before_close_func=set_force_close) self.window.show() QtTest.QTest.qWaitForWindowExposed(self.window) - yield - self.window.hide() def test_open_wms(self): self.window.cbTools.currentIndexChanged.emit(1) @@ -97,13 +96,13 @@ def setup(self, qtbot, mswms_server): waypoints_model.insertRows( 0, rows=len(initial_waypoints), waypoints=initial_waypoints) self.window = tv.MSUILinearViewWindow(model=waypoints_model) + qtbot.add_widget(self.window, before_close_func=set_force_close) self.window.show() QtTest.QTest.qWaitForWindowExposed(self.window) self.window.cbTools.currentIndexChanged.emit(1) self.wms_control = self.window.docks[0].widget() self.wms_control.multilayers.cbWMS_URL.setEditText("") yield - self.window.hide() shutil.rmtree(self.tempdir) def query_server(self, qtbot, url): diff --git a/tests/_test_msui/test_mpl_map.py b/tests/_test_msui/test_mpl_map.py index c78b288ff..d2748c6bd 100644 --- a/tests/_test_msui/test_mpl_map.py +++ b/tests/_test_msui/test_mpl_map.py @@ -36,6 +36,7 @@ def setup(self, qtbot): kwargs = {'resolution': 'l', 'area_thresh': 1000.0, 'ax': plt.gca(), 'llcrnrlon': -15.0, 'llcrnrlat': 35.0, 'urcrnrlon': 30.0, 'urcrnrlat': 65.0, 'epsg': '4326'} self.map = MapCanvas(**kwargs) + qtbot.add_widget(plt.get_current_fig_manager().window) def test_no_coastsegs(self): """ diff --git a/tests/_test_msui/test_mscolab.py b/tests/_test_msui/test_mscolab.py index 21fd7eb67..233681f2e 100644 --- a/tests/_test_msui/test_mscolab.py +++ b/tests/_test_msui/test_mscolab.py @@ -39,7 +39,7 @@ from mslib.msui.flighttrack import WaypointsTableModel from PyQt5 import QtCore, QtTest, QtWidgets from mslib.utils.config import read_config_file, config_loader, modify_config_file -from tests.utils import create_msui_settings_file, ExceptionMock +from tests.utils import create_msui_settings_file, ExceptionMock, set_force_close from mslib.msui import msui from mslib.msui import mscolab from mslib.mscolab.seed import add_user, get_user, add_operation, add_user_to_operation @@ -57,6 +57,7 @@ def setup(self, qtbot, mscolab_server): self.user = get_user(self.userdata[0]) self.main_window = msui.MSUIMainWindow(mscolab_data_dir=mscolab_settings.MSCOLAB_DATA_DIR) + qtbot.add_widget(self.main_window, before_close_func=set_force_close) self.main_window.create_new_flight_track() self.main_window.show() self.window = mscolab.MSColab_ConnectDialog(parent=self.main_window, mscolab=self.main_window.mscolab) @@ -69,8 +70,6 @@ def setup(self, qtbot, mscolab_server): mslib.utils.auth.del_password_from_keyring(service_name="MSCOLAB", username=email) yield self.main_window.mscolab.logout() - self.window.hide() - self.main_window.hide() def test_url_combo(self): assert self.window.urlCb.count() >= 1 @@ -279,21 +278,15 @@ def setup(self, qtbot, mscolab_app, mscolab_server): assert add_user_to_operation(path=self.operation_name3, access_level="collaborator", emailid=self.userdata3[0]) self.window = msui.MSUIMainWindow(mscolab_data_dir=mscolab_settings.MSCOLAB_DATA_DIR) + qtbot.add_widget(self.window, before_close_func=set_force_close) self.window.create_new_flight_track() self.window.show() self.total_created_operations = 0 yield self.window.mscolab.logout() - if self.window.mscolab.version_window: - self.window.mscolab.version_window.close() if self.window.mscolab.conn: self.window.mscolab.conn.disconnect() - # force close all open views - while self.window.listViews.count() > 0: - self.window.listViews.item(0).window.handle_force_close() - # close all hanging operation option windows - self.window.mscolab.close_external_windows() def test_activate_operation(self, qtbot): self._connect_to_mscolab(qtbot) diff --git a/tests/_test_msui/test_mscolab_admin_window.py b/tests/_test_msui/test_mscolab_admin_window.py index cbeb64211..98e1fb69f 100644 --- a/tests/_test_msui/test_mscolab_admin_window.py +++ b/tests/_test_msui/test_mscolab_admin_window.py @@ -24,11 +24,11 @@ See the License for the specific language governing permissions and limitations under the License. """ -import mock import pytest from mslib.mscolab.conf import mscolab_settings -from PyQt5 import QtCore, QtTest, QtWidgets +from PyQt5 import QtCore, QtTest +from tests.utils import set_force_close from mslib.msui import mscolab from mslib.msui import msui from mslib.mscolab.seed import add_user, get_user, add_operation, add_user_to_operation @@ -59,6 +59,7 @@ def setup(self, qtbot, mscolab_server): assert add_user_to_operation(path="tokyo", emailid=self.userdata[0], access_level="creator") self.window = msui.MSUIMainWindow(mscolab_data_dir=mscolab_settings.MSCOLAB_DATA_DIR) + qtbot.add_widget(self.window, before_close_func=set_force_close) self.window.create_new_flight_track() self.window.show() # connect and login to mscolab @@ -72,12 +73,8 @@ def setup(self, qtbot, mscolab_server): QtTest.QTest.qWaitForWindowExposed(self.window) yield self.window.mscolab.logout() - if self.window.mscolab.admin_window: - self.window.mscolab.admin_window.close() if self.window.mscolab.conn: self.window.mscolab.conn.disconnect() - with mock.patch("PyQt5.QtWidgets.QMessageBox.warning", return_value=QtWidgets.QMessageBox.Yes): - self.window.close() def test_permission_filter(self): len_added_users = self.admin_window.modifyUsersTable.rowCount() diff --git a/tests/_test_msui/test_mscolab_merge_waypoints.py b/tests/_test_msui/test_mscolab_merge_waypoints.py index 71022d18f..da2dcc79f 100644 --- a/tests/_test_msui/test_mscolab_merge_waypoints.py +++ b/tests/_test_msui/test_mscolab_merge_waypoints.py @@ -33,7 +33,7 @@ from mslib.mscolab.conf import mscolab_settings from PyQt5 import QtCore, QtTest from tests.utils import (mscolab_register_and_login, mscolab_create_operation, - mscolab_delete_all_operations, mscolab_delete_user) + mscolab_delete_all_operations, mscolab_delete_user, set_force_close) from mslib.msui import mscolab from mslib.msui import msui from mslib.utils.config import modify_config_file @@ -45,6 +45,7 @@ def setup(self, qtbot, mscolab_app, mscolab_server): self.app = mscolab_app self.url = mscolab_server self.window = msui.MSUIMainWindow(mscolab_data_dir=mscolab_settings.MSCOLAB_DATA_DIR) + qtbot.add_widget(self.window, before_close_func=set_force_close) self.window.create_new_flight_track() self.emailid = 'merge@alpha.org' yield @@ -57,8 +58,6 @@ def setup(self, qtbot, mscolab_app, mscolab_server): if mss_dir.exists('local_mscolab_data'): mss_dir.removetree('local_mscolab_data') assert mss_dir.exists('local_mscolab_data') is False - if self.window.mscolab.version_window: - self.window.mscolab.version_window.close() if self.window.mscolab.conn: self.window.mscolab.conn.disconnect() diff --git a/tests/_test_msui/test_mscolab_operation.py b/tests/_test_msui/test_mscolab_operation.py index 450c0569f..a2580e7cd 100644 --- a/tests/_test_msui/test_mscolab_operation.py +++ b/tests/_test_msui/test_mscolab_operation.py @@ -29,6 +29,7 @@ from mslib.mscolab.conf import mscolab_settings from mslib.mscolab.models import Message from PyQt5 import QtCore, QtTest, QtWidgets +from tests.utils import set_force_close from mslib.msui import mscolab from mslib.msui import msui from mslib.mscolab.seed import add_user, get_user, add_operation, add_user_to_operation @@ -55,6 +56,7 @@ def setup(self, qtbot, mscolab_app, mscolab_server): assert add_user_to_operation(path=self.operation_name, emailid=self.userdata[0]) self.user = get_user(self.userdata[0]) self.window = msui.MSUIMainWindow(mscolab_data_dir=mscolab_settings.MSCOLAB_DATA_DIR) + qtbot.add_widget(self.window, before_close_func=set_force_close) self.window.create_new_flight_track() self.window.show() # connect and login to mscolab @@ -68,11 +70,8 @@ def setup(self, qtbot, mscolab_app, mscolab_server): QtTest.QTest.qWaitForWindowExposed(self.window) yield self.window.mscolab.logout() - if self.window.mscolab.chat_window: - self.window.mscolab.chat_window.hide() if self.window.mscolab.conn: self.window.mscolab.conn.disconnect() - self.window.hide() def test_send_message(self, qtbot): self._send_message(qtbot, "**test message**") diff --git a/tests/_test_msui/test_mscolab_version_history.py b/tests/_test_msui/test_mscolab_version_history.py index df2556e3d..1e3df9e1d 100644 --- a/tests/_test_msui/test_mscolab_version_history.py +++ b/tests/_test_msui/test_mscolab_version_history.py @@ -27,6 +27,7 @@ import pytest import mock +from tests.utils import set_force_close from mslib.mscolab.conf import mscolab_settings from PyQt5 import QtCore, QtTest, QtWidgets from mslib.msui import mscolab @@ -46,6 +47,7 @@ def setup(self, qtbot, mscolab_server): assert add_user_to_operation(path=self.operation_name, emailid=self.userdata[0]) self.user = get_user(self.userdata[0]) self.window = msui.MSUIMainWindow(mscolab_data_dir=mscolab_settings.MSCOLAB_DATA_DIR) + qtbot.add_widget(self.window, before_close_func=set_force_close) self.window.create_new_flight_track() self.window.show() # connect and login to mscolab @@ -60,8 +62,6 @@ def setup(self, qtbot, mscolab_server): QtTest.QTest.qWaitForWindowExposed(self.window) yield self.window.mscolab.logout() - if self.window.mscolab.version_window: - self.window.mscolab.version_window.close() if self.window.mscolab.conn: self.window.mscolab.conn.disconnect() diff --git a/tests/_test_msui/test_msui.py b/tests/_test_msui/test_msui.py index 8604a3004..0b3e1c849 100644 --- a/tests/_test_msui/test_msui.py +++ b/tests/_test_msui/test_msui.py @@ -38,7 +38,7 @@ from tests.constants import ROOT_DIR, POSIX, MSUI_CONFIG_PATH from mslib.msui import msui from mslib.msui import msui_mainwindow as msui_mw -from tests.utils import ExceptionMock +from tests.utils import ExceptionMock, set_force_close from mslib.utils.config import read_config_file @@ -70,14 +70,15 @@ class Test_MSS_TutorialMode: def setup(self, qapp, qtbot): qapp.setApplicationDisplayName("MSUI") self.main_window = msui_mw.MSUIMainWindow(tutorial_mode=True) + qtbot.add_widget(self.main_window, before_close_func=set_force_close) + with qtbot.wait_active(self.main_window): + self.main_window.show() + self.main_window.activateWindow() self.main_window.create_new_flight_track() - self.main_window.show() self.main_window.shortcuts_dlg = msui_mw.MSUI_ShortcutsDialog( tutorial_mode=True) self.main_window.show_shortcuts(search_mode=True) self.tutorial_dir = fs.path.combine(MSUI_CONFIG_PATH, 'tutorial_images') - yield - self.main_window.hide() def test_tutorial_dir(self): dir_name, name = fs.path.split(self.tutorial_dir) @@ -97,8 +98,7 @@ class Test_MSS_AboutDialog: @pytest.fixture(autouse=True) def setup(self, qtbot): self.window = msui_mw.MSUI_AboutDialog() - yield - self.window.hide() + qtbot.add_widget(self.window) def test_milestone_url(self): with urlopen(self.window.milestone_url) as f: @@ -111,11 +111,11 @@ class Test_MSS_ShortcutDialog: @pytest.fixture(autouse=True) def setup(self, qtbot): self.main_window = msui_mw.MSUIMainWindow() - self.main_window.show() + qtbot.add_widget(self.main_window, before_close_func=set_force_close) + with qtbot.wait_active(self.main_window): + self.main_window.show() + self.main_window.activateWindow() self.shortcuts = msui_mw.MSUI_ShortcutsDialog() - yield - self.shortcuts.hide() - self.main_window.hide() def test_shortcuts_present(self): # Assert list gets filled properly @@ -176,6 +176,7 @@ def setup(self, qtbot): 'data/') self.window = msui.MSUIMainWindow() + qtbot.add_widget(self.window, before_close_func=set_force_close) self.window.create_new_flight_track() self.window.show() QtTest.QTest.qWaitForWindowExposed(self.window) @@ -185,9 +186,6 @@ def setup(self, qtbot): 'empty_msui_settings.json', ) read_config_file(path=config_file) - for i in range(self.window.listViews.count()): - self.window.listViews.item(i).window.hide() - self.window.hide() def test_no_updater(self): assert not hasattr(self.window, "updater") diff --git a/tests/_test_msui/test_multiple_flightpath_dockwidget.py b/tests/_test_msui/test_multiple_flightpath_dockwidget.py index b25ac2839..f169e4bd5 100644 --- a/tests/_test_msui/test_multiple_flightpath_dockwidget.py +++ b/tests/_test_msui/test_multiple_flightpath_dockwidget.py @@ -29,6 +29,7 @@ from mslib.msui import msui from mslib.msui.multiple_flightpath_dockwidget import MultipleFlightpathControlWidget from mslib.msui import flighttrack as ft +from tests.utils import set_force_close import mslib.msui.topview as tv @@ -36,6 +37,7 @@ class Test_MultipleFlightpathControlWidget: @pytest.fixture(autouse=True) def setup(self, qtbot): self.window = msui.MSUIMainWindow() + qtbot.add_widget(self.window, before_close_func=set_force_close) self.window.create_new_flight_track() self.window.actionNewFlightTrack.trigger() @@ -46,10 +48,9 @@ def setup(self, qtbot): 0, rows=len(initial_waypoints), waypoints=initial_waypoints) self.widget = tv.MSUITopViewWindow(model=self.waypoints_model, mainwindow=self.window) + qtbot.add_widget(self.widget, before_close_func=set_force_close) self.window.show() QtTest.QTest.qWaitForWindowExposed(self.window) - yield - self.window.hide() def test_initialization(self): widget = MultipleFlightpathControlWidget(parent=self.widget, diff --git a/tests/_test_msui/test_remotesensing.py b/tests/_test_msui/test_remotesensing.py index ed19870f4..e2d3f0a85 100644 --- a/tests/_test_msui/test_remotesensing.py +++ b/tests/_test_msui/test_remotesensing.py @@ -137,6 +137,7 @@ def setup(self, qtbot): datetime.datetime(2023, 4, 15, 11, 18, 27, 735581)] self.solar_type = ('sun', 'total (horizon)') self.remote_widget = RemoteSensingControlWidget(view=self.view) + qtbot.add_widget(self.remote_widget) @pytest.mark.parametrize( "lon0, lat0, h0, lon1, lat1, h1, obs_azi, expected", diff --git a/tests/_test_msui/test_satellite_dockwidget.py b/tests/_test_msui/test_satellite_dockwidget.py index 22438cc31..a1e5f64ba 100644 --- a/tests/_test_msui/test_satellite_dockwidget.py +++ b/tests/_test_msui/test_satellite_dockwidget.py @@ -37,10 +37,9 @@ class Test_SatelliteDockWidget: def setup(self, qtbot): self.view = mock.Mock() self.window = sd.SatelliteControlWidget(view=self.view) + qtbot.add_widget(self.window) self.window.show() QtTest.QTest.qWaitForWindowExposed(self.window) - yield - self.window.hide() def test_load(self): path = os.path.join(os.path.dirname(__file__), "../", "data", "satellite_predictor.txt") diff --git a/tests/_test_msui/test_sideview.py b/tests/_test_msui/test_sideview.py index d1ad0e6d2..670930ab2 100644 --- a/tests/_test_msui/test_sideview.py +++ b/tests/_test_msui/test_sideview.py @@ -35,16 +35,16 @@ from mslib.msui import flighttrack as ft import mslib.msui.sideview as tv from mslib.msui.mpl_qtwidget import _DEFAULT_SETTINGS_SIDEVIEW +from tests.utils import set_force_close class Test_MSS_SV_OptionsDialog: @pytest.fixture(autouse=True) def setup(self, qtbot): self.window = tv.MSUI_SV_OptionsDialog(settings=_DEFAULT_SETTINGS_SIDEVIEW) + qtbot.add_widget(self.window) self.window.show() QtTest.QTest.qWaitForWindowExposed(self.window) - yield - self.window.hide() def test_show(self): pass @@ -81,10 +81,9 @@ def setup(self, qtbot): 0, rows=len(initial_waypoints), waypoints=initial_waypoints) self.window = tv.MSUISideViewWindow(model=waypoints_model) + qtbot.add_widget(self.window, before_close_func=set_force_close) self.window.show() QtTest.QTest.qWaitForWindowExposed(self.window) - yield - self.window.hide() def test_open_wms(self): self.window.cbTools.currentIndexChanged.emit(1) @@ -137,13 +136,13 @@ def setup(self, qtbot, mswms_server): waypoints_model.insertRows( 0, rows=len(initial_waypoints), waypoints=initial_waypoints) self.window = tv.MSUISideViewWindow(model=waypoints_model) + qtbot.add_widget(self.window, before_close_func=set_force_close) self.window.show() QtTest.QTest.qWaitForWindowExposed(self.window) self.window.cbTools.currentIndexChanged.emit(1) self.wms_control = self.window.docks[0].widget() self.wms_control.multilayers.cbWMS_URL.setEditText("") yield - self.window.hide() shutil.rmtree(self.tempdir) def query_server(self, qtbot, url): diff --git a/tests/_test_msui/test_suffix.py b/tests/_test_msui/test_suffix.py index 22cfd3460..633020762 100644 --- a/tests/_test_msui/test_suffix.py +++ b/tests/_test_msui/test_suffix.py @@ -37,10 +37,9 @@ class Test_SuffixChange: @pytest.fixture(autouse=True) def setup(self, qtbot): self.window = tv.MSUI_SV_OptionsDialog(settings=_DEFAULT_SETTINGS_SIDEVIEW) + qtbot.add_widget(self.window) self.window.show() QtTest.QTest.qWaitForWindowExposed(self.window) - yield - self.window.hide() def test_suffixchange(self): suffix = [' hPa', ' km', ' hft'] diff --git a/tests/_test_msui/test_tableview.py b/tests/_test_msui/test_tableview.py index 797ce216e..a95df076f 100644 --- a/tests/_test_msui/test_tableview.py +++ b/tests/_test_msui/test_tableview.py @@ -32,6 +32,7 @@ from PyQt5 import QtWidgets, QtCore, QtTest from mslib.msui import flighttrack as ft from mslib.msui.performance_settings import DEFAULT_PERFORMANCE +from tests.utils import set_force_close import mslib.msui.tableview as tv @@ -50,11 +51,10 @@ def setup(self, qtbot): 0, rows=len(initial_waypoints), waypoints=initial_waypoints) self.window = tv.MSUITableViewWindow(model=waypoints_model) + qtbot.add_widget(self.window, before_close_func=set_force_close) self.window.show() QtTest.QTest.qWaitForWindowExposed(self.window) - yield - self.window.hide() def test_open_hex(self): """ diff --git a/tests/_test_msui/test_topview.py b/tests/_test_msui/test_topview.py index 621952adf..c710ba5ef 100644 --- a/tests/_test_msui/test_topview.py +++ b/tests/_test_msui/test_topview.py @@ -35,16 +35,16 @@ from mslib.msui import flighttrack as ft from mslib.msui.msui import MSUIMainWindow from mslib.msui.mpl_qtwidget import _DEFAULT_SETTINGS_TOPVIEW +from tests.utils import set_force_close class Test_MSS_TV_MapAppearanceDialog: @pytest.fixture(autouse=True) def setup(self, qtbot): self.window = tv.MSUI_TV_MapAppearanceDialog(settings=_DEFAULT_SETTINGS_TOPVIEW) + qtbot.add_widget(self.window) self.window.show() QtTest.QTest.qWaitForWindowExposed(self.window) - yield - self.window.hide() def test_show(self): pass @@ -57,15 +57,15 @@ class Test_MSSTopViewWindow: @pytest.fixture(autouse=True) def setup(self, qtbot): mainwindow = MSUIMainWindow() + qtbot.add_widget(mainwindow, before_close_func=set_force_close) initial_waypoints = [ft.Waypoint(40., 25., 0), ft.Waypoint(60., -10., 0), ft.Waypoint(40., 10, 0)] waypoints_model = ft.WaypointsTableModel("") waypoints_model.insertRows( 0, rows=len(initial_waypoints), waypoints=initial_waypoints) self.window = tv.MSUITopViewWindow(model=waypoints_model, mainwindow=mainwindow) + qtbot.add_widget(self.window, before_close_func=set_force_close) self.window.show() QtTest.QTest.qWaitForWindowExposed(self.window) - yield - self.window.hide() def test_open_wms(self): self.window.cbTools.currentIndexChanged.emit(1) @@ -211,14 +211,15 @@ def setup(self, qtbot, mswms_server): 0, rows=len(initial_waypoints), waypoints=initial_waypoints) mainwindow = MSUIMainWindow() + qtbot.add_widget(mainwindow, before_close_func=set_force_close) self.window = tv.MSUITopViewWindow(model=waypoints_model, mainwindow=mainwindow) + qtbot.add_widget(self.window, before_close_func=set_force_close) self.window.show() QtTest.QTest.qWaitForWindowExposed(self.window) self.window.cbTools.currentIndexChanged.emit(1) self.wms_control = self.window.docks[0].widget() self.wms_control.multilayers.cbWMS_URL.setEditText("") yield - self.window.hide() shutil.rmtree(self.tempdir) def query_server(self, qtbot, url): @@ -246,7 +247,9 @@ def test_kwargs_update_does_not_harm(self, qtbot): waypoints_model = ft.WaypointsTableModel("") waypoints_model.insertRows(0, rows=len(initial_waypoints), waypoints=initial_waypoints) mainwindow = MSUIMainWindow() - self.window = tv.MSUITopViewWindow(model=waypoints_model, mainwindow=mainwindow) + qtbot.add_widget(mainwindow, before_close_func=set_force_close) + window = tv.MSUITopViewWindow(model=waypoints_model, mainwindow=mainwindow) + qtbot.add_widget(window, before_close_func=set_force_close) # user_options is a global var from mslib.utils.config import user_options diff --git a/tests/_test_msui/test_updater.py b/tests/_test_msui/test_updater.py index 5e909bafe..01dee7638 100644 --- a/tests/_test_msui/test_updater.py +++ b/tests/_test_msui/test_updater.py @@ -130,6 +130,7 @@ def test_exception(self): @mock.patch("PyQt5.QtWidgets.QMessageBox.information", return_value=QtWidgets.QMessageBox.Yes) def test_ui(self, mock, qtbot): ui = UpdaterUI() + qtbot.add_widget(ui) ui.updater.on_update_available.emit("", "") assert ui.statusLabel.text() == "Update successful. Please restart MSS." assert ui.btRestart.isEnabled() diff --git a/tests/_test_msui/test_wms_capabilities.py b/tests/_test_msui/test_wms_capabilities.py index 968bcaff8..e1d54ecf6 100644 --- a/tests/_test_msui/test_wms_capabilities.py +++ b/tests/_test_msui/test_wms_capabilities.py @@ -49,20 +49,21 @@ def setup(self, qtbot): self.capabilities.provider.contact.city = None yield - def start_window(self): + def start_window(self, qtbot): self.window = wc.WMSCapabilitiesBrowser( url="http://example.com", capabilities=self.capabilities) + qtbot.add_widget(self.window) QtTest.QTest.qWaitForWindowExposed(self.window) - def test_window_start(self): - self.start_window() + def test_window_start(self, qtbot): + self.start_window(qtbot) - def test_window_contact_none(self): + def test_window_contact_none(self, qtbot): self.capabilities.provider.contact = None - self.start_window() + self.start_window(qtbot) - def test_switch_view(self): - self.start_window() + def test_switch_view(self, qtbot): + self.start_window(qtbot) QtTest.QTest.mouseClick(self.window.cbFullView, QtCore.Qt.LeftButton) QtTest.QTest.mouseClick(self.window.cbFullView, QtCore.Qt.LeftButton) diff --git a/tests/_test_msui/test_wms_control.py b/tests/_test_msui/test_wms_control.py index 3a1cce684..eba64b462 100644 --- a/tests/_test_msui/test_wms_control.py +++ b/tests/_test_msui/test_wms_control.py @@ -56,7 +56,7 @@ def _with_mswms_server(self, mswms_server): parsed_url = urllib.parse.urlparse(self.url) self.scheme, self.host, self.port = parsed_url.scheme, parsed_url.hostname, parsed_url.port - def _setup(self, widget_type): + def _setup(self, widget_type, qtbot): wc.WMS_SERVICE_CACHE = {} if widget_type == "hsec": self.view = HSecViewMockup() @@ -73,6 +73,7 @@ def _setup(self, widget_type): waypoints_model.insertRows(0, rows=len(initial_waypoints), waypoints=initial_waypoints) self.window = wc.VSecWMSControlWidget( view=self.view, wms_cache=self.tempdir, waypoints_model=waypoints_model) + qtbot.add_widget(self.window) self.window.show() # Remove all previous cached URLs @@ -84,7 +85,6 @@ def _setup(self, widget_type): QtTest.QTest.mouseClick(self.window.cbCacheEnabled, QtCore.Qt.LeftButton) def _teardown(self): - self.window.hide() shutil.rmtree(self.tempdir) def query_server(self, qtbot, url): @@ -98,7 +98,7 @@ def query_server(self, qtbot, url): class Test_HSecWMSControlWidget(WMSControlWidgetSetup): @pytest.fixture(autouse=True) def setup(self, qtbot): - self._setup("hsec") + self._setup("hsec", qtbot) yield self._teardown() @@ -410,7 +410,7 @@ def test_server_no_thread(self, mockthread, qtbot): class Test_VSecWMSControlWidget(WMSControlWidgetSetup): @pytest.fixture(autouse=True) def setup(self, qtbot): - self._setup("vsec") + self._setup("vsec", qtbot) yield self._teardown() @@ -498,6 +498,7 @@ class TestWMSControlWidgetSetupSimple: def setup(self, qtbot): self.view = HSecViewMockup() self.window = wc.HSecWMSControlWidget(view=self.view) + qtbot.add_widget(self.window) self.window.show() # Remove all previous cached URLs @@ -505,9 +506,6 @@ def setup(self, qtbot): server = self.window.multilayers.listLayers.findItems(url, QtCore.Qt.MatchFixedString)[0] self.window.multilayers.delete_server(server) - yield - self.window.hide() - def test_xml(self): testxml = self.xml.format("", self.srs_base, self.dimext_time + self.dimext_inittime + self.dimext_elevation) self.window.activate_wms(wc.MSUIWebMapService(None, version='1.1.1', xml=testxml)) diff --git a/tests/utils.py b/tests/utils.py index 4f3b79465..888b015d1 100644 --- a/tests/utils.py +++ b/tests/utils.py @@ -185,3 +185,7 @@ def __init__(self, exc): def raise_exc(self, *args, **kwargs): raise self.exc + + +def set_force_close(widget): + widget.force_close = True