Пример #1
0
def test_view_tabs(qtbot: QtBot):
    viewspace = ViewSpace()
    qtbot.addWidget(viewspace)
    viewspace.show()
    view = viewspace.activeView()
    # Creating tabs
    with qtbot.waitSignal(view.numTabsChanged):
        view.addTab("1", _TestViewWidget(1, view))
    with qtbot.waitSignal(viewspace.numTabsChanged):
        view.addTab("3", _TestViewWidget(3, view))
    with qtbot.waitSignal(view.numTabsChanged):
        view.insertTab(1, "2", _TestViewWidget(2, view))
    assert view.tabs.count() == 3
    assert [view.tabs.tabText(i) for i in range(3)] == ["1", "2", "3"]
    assert [view.stack.widget(i).idx for i in range(3)] == [1, 2, 3]
    # Moving tabs
    with qtbot.assertNotEmitted(view.numTabsChanged, wait=100):
        view.tabs.moveTab(2, 0)
    assert [view.tabs.tabText(i) for i in range(3)] == ["3", "1", "2"]
    assert [view.stack.widget(i).idx for i in range(3)] == [3, 1, 2]
    # Removing tabs
    with qtbot.waitSignal(viewspace.numTabsChanged):
        view.removeTab(1)
    assert view.tabs.count() == 2
    assert [view.tabs.tabText(i) for i in range(2)] == ["3", "2"]
    assert [view.stack.widget(i).idx for i in range(2)] == [3, 2]

    # view.setTabModified(0, True)
    # assert view.tabs.tabIcon(0).name() == "document-save"
    # assert view.tabs.tabIcon(1).name() == ""

    view.removeTab(0)
    assert len(view.widgets()) == 1
    view.removeTab(0)
    assert len(view.widgets()) == 0
Пример #2
0
 def test_add_color(self, qtbot: QtBot):
     widget = ColormapCreator()
     colormap_edit = widget.show_colormap
     color1 = QColor(10, 40, 12)
     color2 = QColor(100, 4, 220)
     widget.color_picker.setCurrentColor(color1)
     with qtbot.waitSignal(colormap_edit.double_clicked):
         qtbot.mouseDClick(colormap_edit,
                           Qt.LeftButton,
                           pos=QPoint(30,
                                      widget.height() // 2))
     assert len(widget.current_colormap()) == 1
     assert widget.current_colormap()[0].color == Color(10, 40, 12)
     assert isclose(widget.current_colormap()[0].color_position,
                    20 / (colormap_edit.width() - 20))
     widget.color_picker.setCurrentColor(color2)
     with qtbot.waitSignal(colormap_edit.double_clicked):
         qtbot.mouseDClick(colormap_edit,
                           Qt.LeftButton,
                           pos=QPoint(80,
                                      widget.height() // 2))
     assert len(widget.current_colormap()) == 2
     assert widget.current_colormap()[0].color == Color(10, 40, 12)
     assert widget.current_colormap()[1].color == Color(100, 4, 220)
     assert isclose(widget.current_colormap()[0].color_position,
                    20 / (colormap_edit.width() - 20))
     assert isclose(widget.current_colormap()[1].color_position,
                    70 / (colormap_edit.width() - 20))
Пример #3
0
 def test_add_color(self, qtbot: QtBot):
     widget = ColormapCreator()
     colormap_edit = widget.show_colormap
     color1 = QColor(10, 40, 12)
     color2 = QColor(100, 4, 220)
     widget.color_picker.setCurrentColor(color1)
     with qtbot.waitSignal(colormap_edit.double_clicked):
         qtbot.mouseDClick(colormap_edit,
                           Qt.LeftButton,
                           pos=QPoint(30,
                                      widget.height() // 2))
     assert len(widget.current_colormap().colors) == 3
     assert np.allclose(widget.current_colormap().colors[0],
                        Color(10 / 255, 40 / 255, 12 / 255))
     assert isclose(widget.current_colormap().controls[1],
                    20 / (colormap_edit.width() - 20))
     widget.color_picker.setCurrentColor(color2)
     with qtbot.waitSignal(colormap_edit.double_clicked):
         qtbot.mouseDClick(colormap_edit,
                           Qt.LeftButton,
                           pos=QPoint(80,
                                      widget.height() // 2))
     assert len(widget.current_colormap().colors) == 4
     assert np.allclose(widget.current_colormap().colors[1],
                        Color(10 / 255, 40 / 255, 12 / 255))
     assert np.allclose(widget.current_colormap().colors[2],
                        Color(100 / 255, 4 / 255, 220 / 255))
     assert isclose(widget.current_colormap().controls[1],
                    20 / (colormap_edit.width() - 20))
     assert isclose(widget.current_colormap().controls[2],
                    70 / (colormap_edit.width() - 20))
def test_exposure_widget(qtbot: QtBot):
    CORE.setExposure(15)
    wdg = DefaultCameraExposureWidget(core=CORE)
    qtbot.addWidget(wdg)

    # check that it get's whatever core is set to.
    assert wdg.spinBox.value() == 15
    with qtbot.waitSignal(CORE.events.exposureChanged):
        CORE.setExposure(30)
    assert wdg.spinBox.value() == 30

    with qtbot.wait_signal(CORE.events.exposureChanged):
        wdg.spinBox.setValue(45)
    assert CORE.getExposure() == 45

    # test updating cameraDevice
    CORE.setProperty("Core", "Camera", "")
    assert not wdg.isEnabled()

    with pytest.raises(RuntimeError):
        wdg.setCamera("blarg")

    # set to an invalid camera name
    # should now be disabled.
    wdg.setCamera("blarg", force=True)
    assert not wdg.isEnabled()

    # reset the camera to a working one
    CORE.setProperty("Core", "Camera", "Camera")
    with qtbot.wait_signal(CORE.events.exposureChanged):
        wdg.spinBox.setValue(12)
    assert CORE.getExposure() == 12
Пример #5
0
def test_mouse_press_redirect_filter(qtbot: QtBot):
    a = EventTestWidget()
    b = EventTestWidget()
    qtbot.addWidget(a)
    qtbot.addWidget(b)

    b.installEventFilter(MousePressRedirectFilter(a))

    with qtbot.waitSignal(a.eventSuccess):
        qtbot.mousePress(b, QtCore.Qt.LeftButton)

    with qtbot.waitSignal(b.eventSuccess):
        qtbot.mousePress(b, QtCore.Qt.LeftButton)

    with qtbot.assertNotEmitted(a.eventSuccess):
        qtbot.keyPress(b, QtCore.Qt.Key_Enter)
Пример #6
0
    def test_leftclick_no_drag(self, qtbot: QtBot, mf_widget: MinefieldWidget):
        """
        Test left-clicks with drag select off.
        """
        assert mf_widget._state.drag_select is False

        ## Basic left down and release on a cell.
        with qtbot.waitSignal(mf_widget.at_risk_signal):
            self.left_press((0, 1))
        self.assert_cell_sank((0, 1))
        self.left_release()
        mf_widget._ctrlr.select_cell.assert_called_with((0, 1))

        ## Mouse move.
        self.left_press((1, 0))
        # Move one cell away.
        self.mouse_move((2, 0))
        self.assert_cell_sank((2, 0))
        self.assert_cell_rose((1, 0))
        self.reset_mocks()
        # Move to corner of adjacent cell.
        self.mouse_move((3, 0), pos=(0, 0))
        self.assert_cell_sank((3, 0))
        self.assert_cell_rose((2, 0))
        self.reset_mocks()
        # Move to opposite corner of the same cell.
        self.mouse_move((3, 0), pos=(self.btn_size - 1, self.btn_size - 1))
        self.assert_cells_unchanged()
        self.reset_mocks()
        # Move off the board.
        self.mouse_move((3, -1))
        self.assert_cell_rose((3, 0))
        self.assert_num_cells_changed(1)
        self.reset_mocks()
        # Move back onto the board.
        self.mouse_move((0, 2))
        self.assert_cell_sank((0, 2))
        self.assert_num_cells_changed(1)
        self.reset_mocks()
        # Jump across board (supported?).
        self.mouse_move((7, 7))
        self.assert_cell_sank((7, 7))
        self.assert_cell_rose((0, 2))
        self.assert_num_cells_changed(2)
        self.reset_mocks()
        # Move off bottom edge.
        self.mouse_move((7, 8))
        self.assert_cell_rose((7, 7))
        self.assert_num_cells_changed(1)
        self.reset_mocks()
        # Move on at right edge.
        self.mouse_move((3, 7), pos=(self.btn_size // 2, self.btn_size - 1))
        self.assert_cell_sank((3, 7))
        self.assert_num_cells_changed(1)
        self.reset_mocks()
        # Release.
        self.left_release()
        mf_widget._ctrlr.select_cell.assert_called_with((3, 7))
        self.reset_mocks()
Пример #7
0
def test_numpy_array_table_model(qtbot: QtBot):
    model = NumpyArrayTableModel(np.random.random((5, 3)))

    assert model.columnCount() == 3
    assert model.rowCount() == 5

    with qtbot.waitSignal(model.rowsInserted):
        model.insertRows(1, 1)
    assert model.array.shape == (6, 3)
    assert np.all(model.array[1, :] == model.fill_value)

    with qtbot.waitSignal(model.rowsRemoved):
        model.removeRows(1, 1)
    assert model.array.shape == (5, 3)

    with qtbot.waitSignal(model.columnsInserted):
        model.insertColumns(0, 2)
    assert model.array.shape == (5, 5)
    assert np.all(model.array[:, 0] == model.fill_value)

    with qtbot.waitSignal(model.columnsRemoved):
        model.removeColumns(0, 2)
    assert model.array.shape == (5, 3)

    assert model.data(model.index(0, 0)) == str(model.array[0, 0])
    assert model.data(model.index(0, -1)) is None
    assert model.data(model.index(0, 4)) is None
    assert model.data(model.index(10, 0)) is None

    with qtbot.waitSignal(model.dataChanged):
        assert model.setData(model.index(0, 0), np.nan)

    assert not model.setData(model.index(0, -1), np.nan)
    assert not model.setData(model.index(0, 3), np.nan)
    assert not model.setData(model.index(0, 0), np.nan, QtCore.Qt.DisplayRole)

    assert not model.setData(model.index(0, 0), "false")

    assert model.data(model.index(0, 0)) == "nan"

    assert model.flags(model.index(0, 0)) & QtCore.Qt.ItemIsEditable != 0

    assert model.headerData(0, QtCore.Qt.Vertical,
                            QtCore.Qt.DisplayRole) == "0"
Пример #8
0
def test_info_dialog(qtbot: QtBot):
    dialog = dialogs.InformationDialog({"a": "A", "b": "B"})
    qtbot.addWidget(dialog)
    dialog.open()

    assert dialog.table.rowCount() == 3
    dialog.table.item(2, 0).setText("b")
    assert dialog.table.rowCount() == 4
    assert not dialog.isComplete()
    dialog.table.item(2, 0).setText("c")
    assert dialog.isComplete()
    dialog.table.item(2, 1).setText("C")
    assert dialog.table.rowCount() == 4

    with qtbot.waitSignal(dialog.infoChanged) as emit:
        dialog.accept()

    assert emit.args[0] == {"a": "A", "b": "B", "c": "C"}
Пример #9
0
def test_laser_view(qtbot: QtBot):
    viewspace = LaserViewSpace()
    qtbot.addWidget(viewspace)
    viewspace.show()
    view = viewspace.activeView()
    laser = view.addLaser(Laser(rand_data(["A1", "B2", "C3"])))
    qtbot.waitExposed(laser)

    view.tabs.setTabText(0, "newname")
    assert view.stack.widget(0).laserName() == "newname"

    view.contextMenuEvent(
        QtGui.QContextMenuEvent(QtGui.QContextMenuEvent.Mouse,
                                QtCore.QPoint(0, 0)))

    # Drop event
    drag_mime = QtCore.QMimeData()
    path = Path(__file__).parent.joinpath("data", "io", "npz", "test.npz")
    drag_mime.setUrls([QtCore.QUrl.fromLocalFile(str(path.resolve()))])
    drag_event = QtGui.QDragEnterEvent(
        QtCore.QPoint(0, 0),
        QtCore.Qt.CopyAction,
        drag_mime,
        QtCore.Qt.LeftButton,
        QtCore.Qt.NoModifier,
    )
    view.dragEnterEvent(drag_event)
    assert drag_event.isAccepted()
    drop_event = QtGui.QDropEvent(
        QtCore.QPoint(0, 0),
        QtCore.Qt.CopyAction,
        drag_mime,
        QtCore.Qt.LeftButton,
        QtCore.Qt.NoModifier,
    )
    with qtbot.waitSignal(view.numTabsChanged):
        view.dropEvent(drop_event)
    assert drop_event.isAccepted()
    assert len(view.widgets()) == 2

    dlg = view.actionOpen()
    dlg.show()
    dlg.close()
Пример #10
0
    def test_click(self, qtbot: QtBot):
        widget = ColormapEdit()
        qtbot.addWidget(widget)
        width = widget.width() - 20
        with qtbot.waitSignal(widget.double_clicked):
            qtbot.mouseDClick(widget,
                              Qt.LeftButton,
                              pos=QPoint(30,
                                         widget.height() // 2))

        pos = 20 / width
        widget.add_color(ColorPosition(pos, Color(125, 231, 21)))
        assert len(widget.colormap) == 1
        with qtbot.assertNotEmitted(widget.double_clicked):
            qtbot.mouseDClick(widget,
                              Qt.LeftButton,
                              pos=QPoint(30,
                                         widget.height() // 2))
        assert len(widget.colormap) == 0
Пример #11
0
    def test_click(self, qtbot: QtBot):
        widget = ColormapEdit()
        qtbot.addWidget(widget)
        width = widget.width() - 20
        with qtbot.waitSignal(widget.double_clicked):
            qtbot.mouseDClick(widget,
                              Qt.LeftButton,
                              pos=QPoint(30,
                                         widget.height() // 2))

        pos = 20 / width
        widget.add_color(pos, Color(0.274, 0.02, 0.745))
        widget.add_color(pos / 2, Color(0.274, 0.2, 0.745))
        assert len(widget.colormap.colors) == 4
        with qtbot.assertNotEmitted(widget.double_clicked):
            qtbot.mouseDClick(widget,
                              Qt.LeftButton,
                              pos=QPoint(30,
                                         widget.height() // 2))
        assert len(widget.colormap.colors) == 3
Пример #12
0
def test_wizard_import_path_widget_directory(qtbot: QtBot):
    widget = options.PathSelectWidget(path, "Agilent Batch", [".b"], "Directory")
    qtbot.addWidget(widget)
    assert not widget.isComplete()

    drag_mime = QtCore.QMimeData()
    drag_mime.setUrls(
        [
            QtCore.QUrl.fromLocalFile(
                str(path.joinpath("agilent", "test_ms.b").resolve())
            )
        ]
    )
    drag_event = QtGui.QDragEnterEvent(
        QtCore.QPoint(0, 0),
        QtCore.Qt.CopyAction,
        drag_mime,
        QtCore.Qt.LeftButton,
        QtCore.Qt.NoModifier,
    )
    widget.dragEnterEvent(drag_event)
    assert drag_event.isAccepted()
    drop_event = QtGui.QDropEvent(
        QtCore.QPoint(0, 0),
        QtCore.Qt.CopyAction,
        drag_mime,
        QtCore.Qt.LeftButton,
        QtCore.Qt.NoModifier,
    )
    with qtbot.waitSignal(widget.pathChanged):
        widget.dropEvent(drop_event)
    assert drop_event.isAccepted()

    assert Path(widget.lineedit_path.text()).samefile(
        path.joinpath("agilent", "test_ms.b")
    )
    assert widget.isComplete()

    dlg = widget.selectPath()
    assert dlg.fileMode() == QtWidgets.QFileDialog.Directory
    dlg.close()
Пример #13
0
def test_wizard_import_text(qtbot: QtBot):
    wiz = ImportWizard(path.joinpath("textimage", "csv.csv"))
    qtbot.addWidget(wiz)
    wiz.show()
    qtbot.waitExposed(wiz)

    # Format
    page = wiz.currentPage()
    page.radio_text.setChecked(True)
    wiz.next()
    assert wiz.currentId() == wiz.page_text

    # Path and Options
    wiz.next()

    # Config
    page = wiz.currentPage()

    with qtbot.waitSignal(wiz.laserImported) as emit:
        wiz.accept()
        assert emit.args[0].shape == (5, 5)
Пример #14
0
def test_wizard_srr_import_text(qtbot: QtBot):
    path = Path(__file__).parent.joinpath("data", "io")
    wiz = SRRImportWizard([
        path.joinpath("textimage", "srr1.csv"),
        path.joinpath("textimage", "srr2.csv"),
    ], )
    qtbot.addWidget(wiz)
    wiz.show()
    qtbot.waitExposed(wiz)

    # Format
    page = wiz.currentPage()
    page.radio_text.setChecked(True)
    wiz.next()
    assert wiz.currentId() == wiz.page_text

    wiz.next()

    with qtbot.waitSignal(wiz.laserImported) as emit:
        wiz.accept()
        assert len(emit.args[0].data) == 2
Пример #15
0
def test_wizard_import_thermo(qtbot: QtBot):
    wiz = ImportWizard(path.joinpath("thermo", "icap_columns.csv"))
    qtbot.addWidget(wiz)
    wiz.show()
    qtbot.waitExposed(wiz)

    # Format
    page = wiz.currentPage()
    page.radio_thermo.setChecked(True)
    wiz.next()
    assert wiz.currentId() == wiz.page_thermo

    # Path and Options
    wiz.next()

    # Config
    page = wiz.currentPage()
    assert page.lineedit_scantime.text() == "1.0049"

    with qtbot.waitSignal(wiz.laserImported) as emit:
        wiz.accept()
        assert emit.args[0].shape == (5, 5)
Пример #16
0
def test_wizard_import_agilent(qtbot: QtBot):
    wiz = ImportWizard(path.joinpath("agilent", "test_ms.b"))
    qtbot.addWidget(wiz)
    wiz.show()
    qtbot.waitExposed(wiz)

    # Format
    page = wiz.currentPage()
    page.radio_agilent.setChecked(True)
    wiz.next()
    assert wiz.currentId() == wiz.page_agilent

    # Path and Options
    wiz.next()

    # Config
    page = wiz.currentPage()
    assert page.lineedit_scantime.text() == "0.5"

    with qtbot.waitSignal(wiz.laserImported) as emit:
        wiz.accept()
        assert emit.args[0].shape == (5, 5)
Пример #17
0
def test_name_edit_dialog(qtbot: QtBot):
    dialog = dialogs.NameEditDialog(["a", "b"], allow_remove=True)
    qtbot.addWidget(dialog)
    dialog.open()

    dialog.addName("c")
    dialog.addNames(["d", "e"])

    dialog.list.item(0).setText("A")
    dialog.list.item(1).setCheckState(QtCore.Qt.Unchecked)

    assert np.all([
        dialog.list.item(i).data(dialog.originalNameRole)
        for i in range(dialog.list.count())
    ] == ["a", "b", "c", "d", "e"], )
    assert np.all([
        dialog.list.item(i).text() for i in range(dialog.list.count())
    ] == ["A", "b", "c", "d", "e"], )

    with qtbot.waitSignal(dialog.namesSelected) as emit:
        dialog.accept()

    assert np.all(list(emit.args[0].keys()) == ["a", "c", "d", "e"])
Пример #18
0
def test_wizard_import_perkinelemer(qtbot: QtBot):
    wiz = ImportWizard(path.joinpath("perkinelmer", "perkinelmer"))
    qtbot.addWidget(wiz)
    wiz.show()
    qtbot.waitExposed(wiz)

    # Format
    page = wiz.currentPage()
    page.radio_perkinelmer.setChecked(True)
    wiz.next()
    assert wiz.currentId() == wiz.page_perkinelmer

    # Path and Options
    wiz.next()

    # Config
    page = wiz.currentPage()
    assert page.lineedit_speed.text() == "100"
    assert page.lineedit_scantime.text() == "0.2"
    assert page.lineedit_spotsize.text() == "300"

    with qtbot.waitSignal(wiz.laserImported) as emit:
        wiz.accept()
        assert emit.args[0].shape == (3, 3)
Пример #19
0
def test_import_thread(qtbot: QtBot):
    path = Path(__file__).parent.joinpath("data", "io")
    paths = [
        path.joinpath("agilent", "test_ms.b"),
        path.joinpath("csv", "generic"),
        path.joinpath("npz", "test.npz"),
        path.joinpath("perkinelmer", "perkinelmer"),
        path.joinpath("textimage", "csv.csv"),
        path.joinpath("textimage", "text.text"),
        path.joinpath("thermo", "icap_columns.csv"),
    ]
    thread = ImportThread(paths, Config())

    signals = [(thread.importFinished, path.name) for path in paths]
    signals.extend([(thread.progressChanged, path.name) for path in paths])
    with qtbot.waitSignals(signals):
        thread.run()

    # Failing import
    paths = [path.joinpath("fake", "data.npz")]
    thread = ImportThread(paths, Config())

    with qtbot.waitSignal(thread.importFailed):
        thread.run()
Пример #20
0
def test_view_space_add_remove(qtbot: QtBot):
    viewspace = ViewSpace()
    qtbot.addWidget(viewspace)
    viewspace.show()

    assert len(viewspace.views) == 1

    with qtbot.waitSignal(viewspace.numViewsChanged):
        viewspace.splitActiveHorizontal()
    assert len(viewspace.views) == 2

    viewspace.setActiveView(viewspace.views[1])
    with qtbot.waitSignal(viewspace.numViewsChanged):
        viewspace.splitActiveVertical()
    assert len(viewspace.views) == 3

    with qtbot.waitSignal(viewspace.numViewsChanged):
        viewspace.splitView(viewspace.views[2], QtCore.Qt.Horizontal)
    assert len(viewspace.views) == 4

    # Should be 1 view on left, 1 on top right, 2 bottom right
    assert viewspace.count() == 2
    assert isinstance(viewspace.widget(0), View)
    assert isinstance(viewspace.widget(1), QtWidgets.QSplitter)

    assert viewspace.widget(1).count() == 2
    assert isinstance(viewspace.widget(1).widget(0), View)
    assert isinstance(viewspace.widget(1).widget(1), QtWidgets.QSplitter)

    assert viewspace.widget(1).widget(1).count() == 2
    assert isinstance(viewspace.widget(1).widget(1).widget(0), View)
    assert isinstance(viewspace.widget(1).widget(1).widget(1), View)

    with qtbot.waitSignal(viewspace.numViewsChanged):
        viewspace.closeView(viewspace.views[0])
    assert len(viewspace.views) == 3

    # Should be 1 view on top, 1 on bottom left, 1 bottom right
    # Original splitter changes orientation, inherits children of right splitter
    assert viewspace.count() == 2
    assert viewspace.orientation() == QtCore.Qt.Vertical
    assert isinstance(viewspace.widget(0), View)
    assert isinstance(viewspace.widget(1), QtWidgets.QSplitter)

    assert viewspace.widget(1).count() == 2
    assert isinstance(viewspace.widget(1).widget(0), View)
    assert isinstance(viewspace.widget(1).widget(1), View)

    # Active widget should be first in latest view
    for view in viewspace.views:
        view.addTab("", _ViewWidget(view))

    assert viewspace.activeWidget() == viewspace.views[2].widgets()[0]
    assert viewspace.countViewTabs() == 3

    # Close them all
    with qtbot.waitSignal(viewspace.numViewsChanged):
        viewspace.closeActiveView()
    assert len(viewspace.views) == 2
    with qtbot.waitSignal(viewspace.numViewsChanged):
        viewspace.closeActiveView()
    assert len(viewspace.views) == 1
    with qtbot.assertNotEmitted(viewspace.numViewsChanged, wait=100):
        viewspace.closeActiveView()
    assert len(viewspace.views) == 1

    assert viewspace.countViewTabs() == 1