From 933611eb96e2d653df24127f5df78581493543fa Mon Sep 17 00:00:00 2001 From: Micah Lee Date: Fri, 8 Nov 2019 15:40:37 +0800 Subject: [PATCH] Test closing window --- onionshare_gui/main_window.py | 30 +++++++++++++++++------------- tests2/test_tabs.py | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 49 insertions(+), 13 deletions(-) diff --git a/onionshare_gui/main_window.py b/onionshare_gui/main_window.py index 22035b69..06b51c9b 100644 --- a/onionshare_gui/main_window.py +++ b/onionshare_gui/main_window.py @@ -147,6 +147,20 @@ class MainWindow(QtWidgets.QMainWindow): # After connecting to Tor, check for updates self.check_for_updates() + # Create the close warning dialog -- the dialog widget needs to be in the constructor + # in order to test it + self.close_dialog = QtWidgets.QMessageBox() + self.close_dialog.setWindowTitle(strings._("gui_quit_warning_title")) + self.close_dialog.setText(strings._("gui_quit_warning_description")) + self.close_dialog.setIcon(QtWidgets.QMessageBox.Critical) + self.close_dialog.accept_button = self.close_dialog.addButton( + strings._("gui_quit_warning_quit"), QtWidgets.QMessageBox.AcceptRole + ) + self.close_dialog.reject_button = self.close_dialog.addButton( + strings._("gui_quit_warning_cancel"), QtWidgets.QMessageBox.NoRole + ) + self.close_dialog.setDefaultButton(self.close_dialog.reject_button) + def tor_connection_canceled(self): """ If the user cancels before Tor finishes connecting, ask if they want to @@ -272,21 +286,11 @@ class MainWindow(QtWidgets.QMainWindow): if self.tabs.are_tabs_active(): # Open the warning dialog - dialog = QtWidgets.QMessageBox() - dialog.setWindowTitle(strings._("gui_quit_warning_title")) - dialog.setText(strings._("gui_quit_warning_description")) - dialog.setIcon(QtWidgets.QMessageBox.Critical) - dialog.addButton( - strings._("gui_quit_warning_quit"), QtWidgets.QMessageBox.YesRole - ) - cancel_button = dialog.addButton( - strings._("gui_quit_warning_cancel"), QtWidgets.QMessageBox.NoRole - ) - dialog.setDefaultButton(cancel_button) - reply = dialog.exec_() + self.common.log("MainWindow", "closeEvent, opening warning dialog") + self.close_dialog.exec_() # Close - if reply == 0: + if self.close_dialog.clickedButton() == self.close_dialog.accept_button: self.system_tray.hide() e.accept() # Cancel diff --git a/tests2/test_tabs.py b/tests2/test_tabs.py index 62701ab1..d1c19530 100644 --- a/tests2/test_tabs.py +++ b/tests2/test_tabs.py @@ -337,6 +337,38 @@ class TestTabs(unittest.TestCase): tab = self.new_website_tab() self.close_persistent_tab(tab) + @pytest.mark.gui + def test_016_quit_with_server_started_should_warn(self): + """Quitting OnionShare with any active servers should show a warning""" + tab = self.new_share_tab() + + # Start the server + self.assertEqual( + tab.get_mode().server_status.status, + tab.get_mode().server_status.STATUS_STOPPED, + ) + QtTest.QTest.mouseClick( + tab.get_mode().server_status.server_button, QtCore.Qt.LeftButton + ) + self.assertEqual( + tab.get_mode().server_status.status, + tab.get_mode().server_status.STATUS_WORKING, + ) + QtTest.QTest.qWait(1000) + self.assertEqual( + tab.get_mode().server_status.status, + tab.get_mode().server_status.STATUS_STARTED, + ) + + # Prepare to reject the dialog + QtCore.QTimer.singleShot(1000, self.gui.close_dialog.reject_button.click) + + # Close the window + self.gui.close() + + # The window should still be open + self.assertTrue(self.gui.isVisible()) + if __name__ == "__main__": unittest.main()