def testSetItem(self):
     self.model.initializeDataRows(COUNTER_OPTS_2, COUNTER_NAMES_2)
     spy = QSignalSpy(self.model.dataChanged)
     self.model.setItem(0, 2, True)
     self.assertEqual(len(spy), 1)
     self.model.setItem(1, 2, True)
     self.assertEqual(len(spy), 2)
     self.model.setItem(2, 2, True)
     self.assertEqual(len(spy), 3)
     with self.assertRaises(IndexError):
         self.model.setItem(3, 2, True)
     with self.assertRaises(IndexError):
         self.model.setItem(0, 5, True)
     with self.assertRaises(IndexError):
         self.model.setItem(1, 0, True)
     with self.assertRaises(ValueError):
         self.model.setItem(1, 1, 0)
     with self.assertRaises(ValueError):
         self.model.setItem(1, 1, "True")
     with self.assertRaises(ValueError):
         self.model.setItem(1, 3, 3.54)
     with self.assertRaises(ValueError):
         self.model.setItem(1, 3, (3, 2))
     self.assertEqual(len(spy), 3)
    def testContextMenu(self):
        area = self._area
        event = object()
        menus = self._area.getContextMenus(event)

        self.assertEqual(3, len(menus))
        self.assertEqual("Meter", menus[0].title())
        self.assertEqual("Grid", menus[1].title())
        self.assertEqual("Transform", menus[2].title())

        # test "Meter" actions
        meter_actions = menus[0].actions()
        self.assertFalse(area._show_meter)
        self.assertFalse(area._meter.isVisible())
        spy = QSignalSpy(area.cross_toggled_sgn)
        meter_actions[0].defaultWidget().setChecked(True)
        self.assertTrue(area._show_meter)
        self.assertTrue(area._meter.isVisible())
        self.assertEqual(1, len(spy))
        meter_actions[0].defaultWidget().setChecked(False)
        self.assertFalse(area._show_meter)
        self.assertFalse(area._meter.isVisible())
        self.assertEqual(2, len(spy))

        # test "Grid" actions
        grid_actions = menus[1].actions()
        alpha = area._grid_opacity_sld.value()
        grid_actions[0].defaultWidget().setChecked(True)
        self.assertEqual(alpha, area.getAxis("bottom").grid)
        grid_actions[1].defaultWidget().setChecked(True)
        self.assertEqual(alpha, area.getAxis("left").grid)

        # test "Transform" actions
        plot_item = CurvePlotItem()
        plot_item2 = ScatterPlotItem()
        area.addItem(plot_item)
        area.addItem(plot_item2, y2=True)
        transform_actions = menus[2].actions()

        with patch.object(plot_item, "updateGraph") as mocked:
            with patch.object(plot_item2, "updateGraph") as mocked2:
                transform_actions[0].defaultWidget().setChecked(True)
                self.assertTrue(area.getAxis("bottom").logMode)
                # self.assertTrue(area.getAxis("top").logMode)
                self.assertTrue(plot_item._log_x_mode)
                self.assertTrue(plot_item2._log_x_mode)
                mocked.assert_called_once()
                mocked2.assert_called_once()

                plot_item3 = CurvePlotItem()
                plot_item4 = ScatterPlotItem()
                area.addItem(plot_item3)
                area.addItem(plot_item4, y2=True)
                self.assertTrue(plot_item3._log_x_mode)
                self.assertTrue(plot_item4._log_x_mode)

        with patch.object(plot_item, "updateGraph") as mocked:
            with patch.object(plot_item2, "updateGraph") as mocked2:
                transform_actions[1].defaultWidget().setChecked(True)
                self.assertTrue(area.getAxis("left").logMode)
                # self.assertTrue(area.getAxis("right").logMode)
                self.assertTrue(plot_item._log_y_mode)
                self.assertFalse(plot_item2._log_y_mode)
                mocked.assert_called_once()
                mocked2.assert_not_called()

                plot_item5 = CurvePlotItem()
                plot_item6 = ScatterPlotItem()
                area.addItem(plot_item5)
                area.addItem(plot_item6, y2=True)
                self.assertTrue(plot_item5._log_y_mode)
                self.assertFalse(plot_item6._log_y_mode)

        area._enable_meter = False
        menus = self._area.getContextMenus(event)
        self.assertEqual(2, len(menus))
        self.assertEqual("Grid", menus[0].title())
        self.assertEqual("Transform", menus[1].title())

        area._enable_transform = False
        menus = self._area.getContextMenus(event)
        self.assertEqual(1, len(menus))
        self.assertEqual("Grid", menus[0].title())
Example #3
0
 def setUp(self):
     self.scanBrowser = ScanBrowser()
     self.dataPath = os.environ.get('DATAPATH')
     self.spyLoaded = QSignalSpy(self.scanBrowser.scanLoaded)
     self.spySelected = QSignalSpy(self.scanBrowser.scanSelected)
     print("self.dataPath %s" % self.dataPath)
Example #4
0
    def testAutoLevel(self):
        widget = self.image_tool._image_ctrl_widget

        spy = QSignalSpy(self.image_tool._mediator.reset_image_level_sgn)
        widget.auto_level_btn.clicked.emit()
        self.assertEqual(1, len(spy))
Example #5
0
    def wait_for(self, timeout=None, *, override_waited_for=False, **kwargs):
        """Wait until a given value is found in the data.

        Keyword arguments to this function get interpreted as attributes of the
        searched data. Every given argument is treated as a pattern which
        the attribute has to match against.

        Args:
            timeout: How long to wait for the message.
            override_waited_for: If set, gets triggered by previous messages
                                 again.

        Return:
            The matched line.
        """
        __tracebackhide__ = True
        if timeout is None:
            if 'CI' in os.environ:
                timeout = 15000
            else:
                timeout = 5000
        for key in kwargs:
            assert key in self.KEYS

        # Search existing messages
        for line in self._data:
            matches = []

            for key, expected in kwargs.items():
                value = getattr(line, key)
                matches.append(self._match_data(value, expected))

            if all(matches) and (not line.waited_for or override_waited_for):
                # If we waited for this line, chances are we don't mean the
                # same thing the next time we use wait_for and it matches
                # this line again.
                line.waited_for = True
                return line

        # If there is none, wait for the message
        spy = QSignalSpy(self.new_data)
        elapsed_timer = QElapsedTimer()
        elapsed_timer.start()

        while True:
            got_signal = spy.wait(timeout)
            if not got_signal or elapsed_timer.hasExpired(timeout):
                raise WaitForTimeout("Timed out after {}ms waiting for "
                                     "{!r}.".format(timeout, kwargs))

            for args in spy:
                assert len(args) == 1
                line = args[0]

                matches = []

                for key, expected in kwargs.items():
                    value = getattr(line, key)
                    matches.append(self._match_data(value, expected))

                if all(matches):
                    # If we waited for this line, chances are we don't mean the
                    # same thing the next time we use wait_for and it matches
                    # this line again.
                    line.waited_for = True
                    return line
Example #6
0
    def testStandAlone(self):
        with self.assertRaises(ValueError):
            FileStreamWindow(port=454522)

        win = FileStreamWindow(port=45449)
        widget = win._ctrl_widget
        self.assertEqual('45449', widget.port_le.text())
        self.assertIsNone(win._mediator)

        with patch("extra_foam.gui.windows.file_stream_w.Process.start"
                   ) as mocked_start:
            # test when win._rd_cal is None
            spy = QSignalSpy(win.file_server_started_sgn)
            widget.serve_start_btn.clicked.emit()
            self.assertEqual(0, len(spy))
            mocked_start.assert_not_called()

            # test when win._rd_cal is not None
            win._rd_cal = MagicMock()
            widget.serve_start_btn.clicked.emit()
            self.assertEqual(1, len(spy))
            mocked_start.assert_called_once()

        # test populate sources
        with patch("extra_foam.gui.windows.file_stream_w.load_runs") as lr:
            with patch("extra_foam.gui.windows.file_stream_w.gather_sources"
                       ) as gs:
                with patch.object(widget, "initProgressControl") as fpc:
                    with patch.object(widget, "fillSourceTables") as fst:
                        # test load_runs return (None, None)
                        win._rd_cal, win._rd_raw = object(), object()
                        gs.return_value = (set(), set(), set())
                        lr.return_value = (None, None)
                        widget.data_folder_le.setText("abc")
                        lr.assert_called_with("abc")
                        fpc.assert_called_once_with(-1, -1)
                        fpc.reset_mock()
                        fst.assert_called_once_with(
                            None, None)  # test _rd_cal and _rd_raw were reset
                        fst.reset_mock()

                        # test load_runs raises
                        lr.side_effect = ValueError
                        widget.data_folder_le.setText("efg")
                        fpc.assert_called_once_with(-1, -1)
                        fpc.reset_mock()
                        fst.assert_called_once_with(None, None)
                        fst.reset_mock()

                    with patch("extra_foam.gui.windows.file_stream_w.run_info",
                               return_value=(100, 1001, 1100)):
                        # test load_runs return
                        lr.side_effect = None
                        gs.return_value = ({
                            "DET1": ["data.adc"]
                        }, {
                            "output1": ["x", "y"]
                        }, {
                            "motor1": ["actualPosition"],
                            "motor2": ["actualCurrent"]
                        })
                        widget.data_folder_le.setText("hij")
                        fpc.assert_called_once_with(1001, 1100)

                        self.assertEqual(
                            "DET1",
                            widget._detector_src_tb.item(0, 0).text())
                        cell_widget = widget._detector_src_tb.cellWidget(0, 1)
                        self.assertEqual(1, cell_widget.count())
                        self.assertEqual("data.adc", cell_widget.currentText())

                        self.assertEqual(
                            "output1",
                            widget._instrument_src_tb.item(0, 0).text())
                        cell_widget = widget._instrument_src_tb.cellWidget(
                            0, 1)
                        self.assertEqual(2, cell_widget.count())
                        self.assertEqual("x", cell_widget.currentText())

                        self.assertEqual(
                            "motor1",
                            widget._control_src_tb.item(0, 0).text())
                        cell_widget = widget._control_src_tb.cellWidget(0, 1)
                        self.assertEqual(1, cell_widget.count())
                        self.assertEqual("actualPosition",
                                         cell_widget.currentText())

                        self.assertEqual(
                            "motor2",
                            widget._control_src_tb.item(1, 0).text())
                        cell_widget = widget._control_src_tb.cellWidget(1, 1)
                        self.assertEqual(1, cell_widget.count())
                        self.assertEqual("actualCurrent",
                                         cell_widget.currentText())

                        # None is selected.
                        self.assertEqual(([], [], []), widget.getSourceLists())
Example #7
0
 def setUp(self):
     self.dataNavigator = XMCDDataNavigator()
     self.spyDataSelectionChanged = QSignalSpy(
         self.dataNavigator.dataSelectionChanged)
Example #8
0
 def testMakeCall(self):
     spy = QSignalSpy(self._call_panel.callMade)
     call = random.choice(CALLS)
     button = self._call_panel.getButton(call)
     button.clicked.emit()
     self.assertEqual(bidding.asCall(spy[0][0]), call)
    def testCommonStartStopReset(self):
        win = self._win
        com_ctrl_widget = win._com_ctrl_st
        ctrl_widget = win._ctrl_widget_st
        client = win._client_st
        worker = win._worker_st

        self.assertFalse(com_ctrl_widget.stop_btn.isEnabled())

        self.assertIsNone(client._endpoint_st)
        with patch.object(client, "start") as client_start:
            with patch.object(win._plot_timer_st, "start") as timer_start:
                spy = QSignalSpy(win.started_sgn)
                QTest.mouseClick(com_ctrl_widget.start_btn, Qt.LeftButton)

                self.assertEqual(
                    f"tcp://{com_ctrl_widget._hostname_le.text()}:"
                    f"{com_ctrl_widget._port_le.text()}", client._endpoint_st)

                self.assertEqual(2, len(client._catalog_st))
                self.assertIn("device1:output property1", client._catalog_st)
                self.assertIn("device2 property2", client._catalog_st)

                self.assertEqual(1, len(spy))
                self.assertTrue(com_ctrl_widget.stop_btn.isEnabled())
                self.assertFalse(com_ctrl_widget.start_btn.isEnabled())
                self.assertFalse(com_ctrl_widget.load_dark_run_btn.isEnabled())

                self.assertFalse(ctrl_widget.dummy_widget.isEnabled())

                client_start.assert_called_once()
                timer_start.assert_called_once()

        with patch.object(client, "terminateRunST") as client_stop:
            with patch.object(win._plot_timer_st, "stop") as timer_stop:
                spy = QSignalSpy(win.stopped_sgn)
                QTest.mouseClick(com_ctrl_widget.stop_btn, Qt.LeftButton)
                self.assertEqual(1, len(spy))
                self.assertFalse(com_ctrl_widget.stop_btn.isEnabled())
                self.assertTrue(com_ctrl_widget.start_btn.isEnabled())
                self.assertTrue(com_ctrl_widget.load_dark_run_btn.isEnabled())

                self.assertTrue(ctrl_widget.dummy_widget.isEnabled())

                client_stop.assert_called_once()
                timer_stop.assert_called_once()

        with patch.object(client, "start") as client_start:
            with patch.object(win._plot_timer_st, "start") as timer_start:
                with patch.object(worker, "sources") as mocked_sources:
                    with self.assertLogs(logger, level="ERROR") as cm:
                        mocked_sources.return_value = [("", "property1", 1)]
                        QTest.mouseClick(com_ctrl_widget.start_btn,
                                         Qt.LeftButton)
                        client_start.assert_not_called()
                        timer_start.assert_not_called()
                        self.assertIn("Empty source", cm.output[0])

                    with self.assertLogs(logger, level="ERROR") as cm:
                        mocked_sources.return_value = [("device", "", 0)]
                        QTest.mouseClick(com_ctrl_widget.start_btn,
                                         Qt.LeftButton)
                        client_start.assert_not_called()
                        timer_start.assert_not_called()
                        self.assertIn("Empty property", cm.output[0])

                    with self.assertLogs(logger, level="ERROR") as cm:
                        mocked_sources.return_value = [("device", "property",
                                                        2)]
                        QTest.mouseClick(com_ctrl_widget.start_btn,
                                         Qt.LeftButton)
                        client_start.assert_not_called()
                        timer_start.assert_not_called()
                        self.assertIn("Not understandable data type",
                                      cm.output[0])

        with patch.object(client, "onResetST") as client_reset:
            with patch.object(worker, "onResetST") as worker_reset:
                with patch.object(win._line, "reset") as line_reset:
                    with patch.object(win._view, "reset") as view_reset:
                        QTest.mouseClick(com_ctrl_widget.reset_btn,
                                         Qt.LeftButton)

                        client_reset.assert_called_once()
                        worker_reset.assert_called_once()
                        line_reset.assert_called_once()
                        view_reset.assert_called_once()

        with patch.object(worker._input_st, "clear") as input_clear:
            with patch.object(worker._output_st, "clear") as output_clear:
                worker._reset_st = False
                worker.onResetST()
                input_clear.assert_called_once()
                output_clear.assert_called_once()
                worker._reset_st = True

        with patch.object(client._transformer_st,
                          "reset") as transformer_reset:
            with patch.object(client._output_st, "clear") as output_clear:
                client.onResetST()
                transformer_reset.assert_called_once()
                output_clear.assert_called_once()
Example #10
0
 def testPlayNotAllowedCard(self):
     spy = QSignalSpy(self._hand_panel.cardPlayed)
     self._hand_panel.setCards(self._cards)
     card = random.choice(self._cards)
     self._click_card_helper(card)
     self.assertEqual(len(spy), 0)
Example #11
0
    def testStartStop(self):
        start_spy = QSignalSpy(self.gui.start_sgn)
        stop_spy = QSignalSpy(self.gui.stop_sgn)

        # -------------------------------------------------------------
        # test when the start action button is clicked
        # -------------------------------------------------------------

        actions = self.gui._tool_bar.actions()
        start_action = actions[0]
        stop_action = actions[1]

        histogram_action = actions[7]
        self.assertEqual("Histogram", histogram_action.text())
        histogram_action.trigger()
        histogram_ctrl_widget = list(
            self.gui._plot_windows.keys())[-1]._ctrl_widgets[0]
        histogram_ctrl_widget.updateMetaData.reset_mock()

        pump_probe_action = actions[5]
        self.assertEqual("Pump-probe", pump_probe_action.text())
        pump_probe_action.trigger()
        pump_probe_ctrl_widget = list(
            self.gui._plot_windows.keys())[-1]._ctrl_widgets[0]
        pump_probe_ctrl_widget.updateMetaData.reset_mock()

        start_action.trigger()

        # test a ctrl widget own by the ImageToolWindow
        azimuthal_integ_ctrl_widget = self.gui._image_tool._azimuthal_integ_1d_view._ctrl_widget
        geometry_ctrl_widget = self.gui._image_tool._geometry_view._ctrl_widget
        source_ctrl_widget = self.gui._source_cw

        azimuthal_integ_ctrl_widget.updateMetaData.assert_called_once()
        pump_probe_ctrl_widget.updateMetaData.assert_called_once()
        histogram_ctrl_widget.updateMetaData.assert_called_once()
        source_ctrl_widget.updateMetaData.assert_called_once()

        self.assertEqual(1, len(start_spy))

        pump_probe_ctrl_widget.onStart.assert_called_once()
        histogram_ctrl_widget.onStart.assert_called_once()
        azimuthal_integ_ctrl_widget.onStart.assert_called_once()

        self.assertFalse(start_action.isEnabled())
        self.assertTrue(stop_action.isEnabled())
        self.assertFalse(source_ctrl_widget._con_view.isEnabled())
        self.assertFalse(geometry_ctrl_widget.isEnabled())

        self.assertTrue(self.train_worker.running)
        self.assertTrue(self.pulse_worker.running)

        # -------------------------------------------------------------
        # test when the stop action button is clicked
        # -------------------------------------------------------------

        stop_action.trigger()

        pump_probe_ctrl_widget.onStop.assert_called_once()
        histogram_ctrl_widget.onStop.assert_called_once()
        azimuthal_integ_ctrl_widget.onStop.assert_called_once()

        self.assertEqual(1, len(stop_spy))

        self.assertTrue(start_action.isEnabled())
        self.assertFalse(stop_action.isEnabled())
        self.assertTrue(source_ctrl_widget._con_view.isEnabled())
        self.assertTrue(geometry_ctrl_widget.isEnabled())

        self.assertFalse(self.train_worker.running)
        self.assertFalse(self.pulse_worker.running)