def _edit_line_edit(self, key_entry):
     QTest.mouseClick(self.line_edit, Qt.LeftButton)
     self.line_edit.selectAll()
     QTest.keyClick(self.line_edit, Qt.Key_Backspace)
     QTest.keyClicks(self.line_edit, key_entry)
     QTest.keyClick(self.line_edit, Qt.Key_Enter)
     QApplication.sendPostedEvents()
Esempio n. 2
0
    def test_widget_connections_exist(self):
        mock_mfp = MockMultiFileInterpreter()
        view = CodeEditorTabWidget(mock_mfp)
        self.assert_widget_created()

        self.assert_object_connected_once(
            view, view.SHOW_IN_EXPLORER_ACTION_OBJECT_NAME, QAction,
            "triggered")
        self.assert_object_connected_once(view, view.ABORT_BUTTON_OBJECT_NAME)
        self.assert_object_connected_once(view,
                                          view.NEW_EDITOR_PLUS_BTN_OBJECT_NAME)
        self.assert_object_connected_once(view, view.RUN_BUTTON_OBJECT_NAME)

        # options button is not connected because it uses the internal Qt triggers
        # to show the popup menu
        self.assert_object_not_connected(view, view.OPTIONS_BUTTON_OBJECT_NAME)

        view.close()

        QApplication.sendPostedEvents()
        self.assert_widget_not_present(CodeEditorTabWidget.__name__)

        # closing our local mock should leave the QApplication without any widgets
        mock_mfp.close()
        QApplication.sendPostedEvents()
        self.assert_no_toplevel_widgets()
Esempio n. 3
0
    def test_view_closes_on_ADS_cleared(self):
        ws = CreateSampleWorkspace()
        SliceViewer(ws)
        AnalysisDataService.clear()

        QApplication.sendPostedEvents()

        self.assert_no_toplevel_widgets()
Esempio n. 4
0
    def test_view_closes_on_replace_when_model_properties_change(self):
        ws = CreateSampleWorkspace()
        pres = SliceViewer(ws)
        ConvertToDistribution(ws)

        QApplication.sendPostedEvents()

        self.assert_no_toplevel_widgets()
        self.assertEqual(pres.ads_observer, None)
Esempio n. 5
0
    def test_view_closes_on_shown_workspace_deleted(self):
        ws = CreateSampleWorkspace()
        pres = SliceViewer(ws)
        DeleteWorkspace(ws)

        QApplication.sendPostedEvents()

        self.assert_no_toplevel_widgets()
        self.assertEqual(pres.ads_observer, None)
    def test_deleted_on_close(self):
        pres = SliceViewer(self.histo_ws)
        self.assert_widget_created()
        pres.view.close()

        QApplication.sendPostedEvents()
        QApplication.sendPostedEvents()

        self.assert_no_toplevel_widgets()
    def test_deleted_on_close(self):
        ws = CreateSampleWorkspace()
        pres = SampleLogs(ws)
        self.assert_widget_created()
        pres.view.close()

        QApplication.sendPostedEvents()

        self.assert_no_toplevel_widgets()
Esempio n. 8
0
    def test_close_event(self):
        ws = CreateSampleWorkspace()
        pres = SliceViewer(ws)
        self.assert_widget_created()

        pres.view.close()
        pres = None
        QApplication.sendPostedEvents()

        self.assert_no_toplevel_widgets()
Esempio n. 9
0
    def test_that_the_workspace_display_opens_and_closes_ok_with_a_ragged_workspace(
            self):
        self.presenter = MatrixWorkspaceDisplay(self.ragged_workspace)
        self.presenter.show_view()

        self.assert_widget_created()

        self.presenter.container.close()
        QApplication.sendPostedEvents()

        self.assert_no_toplevel_widgets()
    def runTest(self):
        try:
            self.fsg_presenter.openFitScriptGenerator()
            QApplication.sendPostedEvents()

            self.assert_widget_created()

            self.assertTrue(self.fsg_view.close())
            QApplication.sendPostedEvents()
        except Exception as ex:
            self.fail(f"Exception thrown when attempting to open the Fit Script Generator interface: {ex}.")
Esempio n. 11
0
    def test_deletes_on_close(self):
        with MockWorkspaceWidget() as temp_widget:
            widget = SettingsPresenter(temp_widget)
            self.assert_widget_created()
            self.assert_widget_exists("GeneralSettings", expected_count=1)

            widget.view.close()

        QApplication.sendPostedEvents()

        self.assert_no_toplevel_widgets()
    def test_window_force_deleted_correctly(self):
        ws = CreateEmptyTableWorkspace()

        p = TableWorkspaceDisplay(ws)
        self.assert_widget_created()
        p.force_close()

        QApplication.sendPostedEvents()

        self.assertEqual(None, p.ads_observer)
        self.assert_widget_not_present("work")
        self.assert_no_toplevel_widgets()
Esempio n. 13
0
    def test_window_force_deleted_correctly(self):
        ws = CreateSampleWorkspace()
        LoadInstrument(ws, InstrumentName='MARI', RewriteSpectraMap=False)

        p = InstrumentViewPresenter(ws)
        self.assert_widget_created()

        p.force_close()

        QApplication.sendPostedEvents()
        self.assertEqual(None, p.ads_observer)
        self.assert_widget_not_present("instr")
        self.assert_no_toplevel_widgets()
Esempio n. 14
0
    def test_deleted_on_close(self):
        mock_mfp = MockMultiFileInterpreter()
        view = CodeEditorTabWidget(mock_mfp)
        self.assert_widget_created()

        view.close()

        QApplication.sendPostedEvents()
        self.assert_widget_not_present(CodeEditorTabWidget.__name__)

        # closing our local mock should leave the QApplication without any widgets
        mock_mfp.close()
        QApplication.sendPostedEvents()
        self.assert_no_toplevel_widgets()
Esempio n. 15
0
    def test_correct_exception_is_raised_when_called_on_other_thread(self):
        self.exc = None
        self.exit_code = None

        def collect_error(e):
            self.exc = e

        thread = AsyncTask(self.task, error_cb=collect_error)
        thread.start()
        while thread.is_alive():
            QApplication.sendPostedEvents()
        thread.join(0.5)
        self.assertTrue(isinstance(self.exc.exc_value, CustomException))
        self.assertEqual(TaskExitCode.ERROR, thread.exit_code)
    def test_window_deleted_correctly(self):
        ws = CreateSampleWorkspace()

        p = MatrixWorkspaceDisplay(ws)
        self.assert_widget_created()
        p.close(ws.name())

        self.assert_widget_created()

        QApplication.sendPostedEvents()

        self.assertEqual(None, p.ads_observer)
        self.assert_widget_not_present("work")
        self.assert_no_toplevel_widgets()
Esempio n. 17
0
    def test_editor_widget_not_leaked(self):
        widget = MultiPythonFileInterpreter()
        self.assertEqual(1, widget.editor_count)
        widget.append_new_editor()
        self.assertEqual(2, widget.editor_count)
        widget.append_new_editor()
        self.assertEqual(3, widget.editor_count)

        widget.close_tab(0)

        QApplication.sendPostedEvents()
        self.assert_number_of_widgets_matching(
            ".interpreter.PythonFileInterpreter", 2)
        widget.close_tab(0)

        QApplication.sendPostedEvents()
        self.assert_number_of_widgets_matching(
            ".interpreter.PythonFileInterpreter", 1)

        widget.close_all()

        QApplication.sendPostedEvents()
        # there should be zero interpreters
        self.assert_number_of_widgets_matching(
            ".interpreter.PythonFileInterpreter", 0)

        # close the whole widget, this should delete everything from the QApplication
        widget.close()
        QApplication.sendPostedEvents()
        self.assert_number_of_widgets_matching(
            ".interpreter.PythonFileInterpreter", 0)
        self.assert_no_toplevel_widgets()
Esempio n. 18
0
    def test_disable_lineplots_disables_region_selector(self):
        pres = SliceViewer(self.hkl_ws)
        line_plots_action, region_sel_action = toolbar_actions(
            pres, (ToolItemText.LINEPLOTS, ToolItemText.REGIONSELECTION))
        line_plots_action.trigger()
        region_sel_action.trigger()
        QApplication.sendPostedEvents()

        line_plots_action.trigger()
        QApplication.sendPostedEvents()

        self.assertFalse(line_plots_action.isChecked())
        self.assertFalse(region_sel_action.isChecked())

        pres.view.close()
Esempio n. 19
0
    def test_view_does_not_close_on_other_workspace_deleted(self):
        ws = CreateSampleWorkspace()
        pres = SliceViewer(ws)
        other_ws = CreateSampleWorkspace()
        DeleteWorkspace(other_ws)

        QApplication.sendPostedEvents()

        # Strange behaviour between tests where views don't close properly means
        # we cannot use self.assert_widget_exists, as many instances of SliceViewerView
        # may be active at this time. As long as this view hasn't closed we are OK.
        self.assertTrue(
            pres.view in self.find_widgets_of_type(str(type(pres.view))))
        self.assertNotEqual(pres.ads_observer, None)

        pres.view.close()
Esempio n. 20
0
    def test_view_updates_on_replace_when_model_properties_dont_change_matrixws(
            self):
        def scale_ws(ws):
            ws = Scale(ws, 100, "Multiply")

        ws = CreateSampleWorkspace()
        pres = SliceViewer(ws)
        self._assertNoErrorInADSHandlerFromSeparateThread(partial(
            scale_ws, ws))

        QApplication.sendPostedEvents()

        self.assertTrue(
            pres.view in self.find_widgets_of_type(str(type(pres.view))))
        self.assertNotEqual(pres.ads_observer, None)

        pres.view.close()
Esempio n. 21
0
    def test_enable_nonorthogonal_view_disables_lineplots_if_enabled(self):
        pres = SliceViewer(self.hkl_ws)
        line_plots_action, region_sel_action, non_ortho_action = toolbar_actions(
            pres, (ToolItemText.LINEPLOTS, ToolItemText.REGIONSELECTION,
                   ToolItemText.NONORTHOGONAL_AXES))
        line_plots_action.trigger()
        QApplication.sendPostedEvents()

        non_ortho_action.trigger()
        QApplication.sendPostedEvents()

        self.assertTrue(non_ortho_action.isChecked())
        self.assertFalse(line_plots_action.isChecked())
        self.assertFalse(line_plots_action.isEnabled())
        self.assertFalse(region_sel_action.isChecked())
        self.assertFalse(region_sel_action.isEnabled())

        pres.view.close()
Esempio n. 22
0
    def test_view_title_correct_and_view_didnt_close_on_workspace_rename(self):
        ws = CreateSampleWorkspace()
        pres = SliceViewer(ws)
        old_title = pres.model.get_title()

        renamed = RenameWorkspace(ws)  # noqa F841

        QApplication.sendPostedEvents()

        # View didn't close
        self.assertTrue(
            pres.view in self.find_widgets_of_type(str(type(pres.view))))
        self.assertNotEqual(pres.ads_observer, None)

        # Window title correct
        self.assertNotEqual(pres.model.get_title(), old_title)
        self.assertEqual(pres.view.windowTitle(), pres.model.get_title())

        pres.view.close()
Esempio n. 23
0
    def test_editor_widget_doesnt_create_find_replace_unless_requested(self):
        widget = MultiPythonFileInterpreter()
        self.assertEqual(1, widget.editor_count)
        widget.append_new_editor()
        self.assert_number_of_widgets_matching(
            ".interpreter.PythonFileInterpreter", 2)
        self.assert_number_of_widgets_matching("Embedded", 0)

        widget.close_tab(1)

        QApplication.sendPostedEvents()
        # there will always be 1, because we never allow an empty editor widget
        self.assert_number_of_widgets_matching(
            ".interpreter.PythonFileInterpreter", 1)
        self.assert_number_of_widgets_matching("Embedded", 0)

        # close the whole widget, this should delete everything from the QApplication
        widget.close()
        QApplication.sendPostedEvents()
        self.assert_number_of_widgets_matching(
            ".interpreter.PythonFileInterpreter", 0)
        self.assert_no_toplevel_widgets()
Esempio n. 24
0
    def test_view_updates_on_replace_when_model_properties_dont_change_mdeventws(
            self):
        def scale_ws(ws):
            ws = ws * 100

        ws = CreateMDWorkspace(Dimensions='3',
                               EventType='MDEvent',
                               Extents='-10,10,-5,5,-1,1',
                               Names='Q_lab_x,Q_lab_y,Q_lab_z',
                               Units='1\\A,1\\A,1\\A')
        FakeMDEventData(ws, UniformParams="1000000")
        pres = SliceViewer(ws)
        self._assertNoErrorInADSHandlerFromSeparateThread(partial(
            scale_ws, ws))

        QApplication.sendPostedEvents()

        self.assertTrue(
            pres.view in self.find_widgets_of_type(str(type(pres.view))))
        self.assertNotEqual(pres.ads_observer, None)

        pres.view.close()
 def wait_for_thread(self, thread_model):
     if thread_model:
         thread_model._thread.wait()
         QApplication.sendPostedEvents()
Esempio n. 26
0
 def tearDown(self):
     self.assertTrue(self.view.close())
     QApplication.sendPostedEvents()
def wait_for_thread(thread_model):
    if thread_model and thread_model.worker:
        while thread_model.worker.is_alive():
            time.sleep(0.1)
        QApplication.sendPostedEvents()
Esempio n. 28
0
 def tearDown(self):
     if not sip.isdeleted(self.presenter.container):
         self.presenter.container.close()
         QApplication.sendPostedEvents()
Esempio n. 29
0
 def wait_for_thread(self, thread_model):
     while (thread_model._thread.isRunning()):
         QApplication.sendPostedEvents()
         time.sleep(0.1)
     QApplication.sendPostedEvents()
Esempio n. 30
0
 def tearDown(self):
     for ii in QApplication.topLevelWidgets():
         ii.close()
     QApplication.sendPostedEvents()
     QApplication.sendPostedEvents()
     self.assert_no_toplevel_widgets()