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)
def test_tool_calculator_name(qtbot: QtBot): lineedit = CalculatorName("a", ["b"], ["abs"]) qtbot.addWidget(lineedit) assert lineedit.hasAcceptableInput() lineedit.setText("") assert not lineedit.hasAcceptableInput() lineedit.setText("a a") assert not lineedit.hasAcceptableInput() lineedit.setText("a\ta") assert not lineedit.hasAcceptableInput() lineedit.setText("a\na") assert not lineedit.hasAcceptableInput() lineedit.setText("b") assert not lineedit.hasAcceptableInput() lineedit.setText("abs") assert not lineedit.hasAcceptableInput()
def test_laser_widget_cursor(qtbot: QtBot): main = QtWidgets.QMainWindow() qtbot.addWidget(main) main.statusBar() # Create bar viewspace = LaserViewSpace() main.setCentralWidget(viewspace) view = viewspace.activeView() view.addLaser(Laser(rand_data(["a"]))) widget = view.activeWidget() # Cursor widget.updateCursorStatus(2.0, 2.0, 1.0) assert main.statusBar().currentMessage() == "2,2 [1]" widget.updateCursorStatus(1.0, 3.0, np.nan) assert main.statusBar().currentMessage() == "1,3 [nan]"
def test_create(self, qtbot: QtBot, ctrlr: api.AbstractController): """Test basic creation of the window.""" gui = MinegaulerGUI(ctrlr, self.initial_state) qtbot.addWidget(gui) assert gui.windowTitle() == "Minegauler" assert not gui.windowIcon().isNull() # Check the menubar. exp_menus = ["Game", "Options", "Help"] assert [a.text() for a in gui.menuBar().actions()] == exp_menus # Check the main child widgets. assert type(gui._panel_widget) is _MockPanelWidget self._panel_class_mock.assert_called_once() assert type(gui._mf_widget) is _MockMinefieldWidget self._minefield_class_mock.assert_called_once() assert type(gui._name_entry_widget) is main_window._NameEntryBar gui.show() maybe_stop_for_interaction(qtbot)
def test_layer_name_dialog_03(qgis_app: QgsApplication, qgis_locale: QSettings, qgis_plugin: Dict[str, Any], qgis_bot: QgisBot, qtbot: QtBot, qgis_new_project: None): """ Tests the layer name dialog invalidates the input when the user enters an existing layer name :param qgis_app: QGIS application fixture :type qgis_app: QgsApplication :param qgis_locale: QT settings fixture with a user locale :type qgis_locale: QSettings :param qgis_plugin: QGIS loading and unloading fixture for plugins :type qgis_plugin: dict of Any :param qgis_bot: QGIS Bot to automate GUI tests :type qgis_bot: QgisBot :param qtbot: QT fixture to automate GUI tests :type qtbot: QtBot :param qgis_new_project: Ensures the project instance is clean :type qgis_new_project: None """ assert type(qgis.utils.plugins['gisfire_spread_simulation']).__name__ == 'GisFIRESpreadSimulation' project: QgsProject = QgsProject() project_instance: QgsProject = project.instance() vl_a = QgsVectorLayer('Point', 'a', 'memory') vl_b = QgsVectorLayer('Point', 'b', 'memory') vl_c = QgsVectorLayer('Point', 'c', 'memory') project_instance.addMapLayer(vl_a) project_instance.addMapLayer(vl_b) project_instance.addMapLayer(vl_c) dialog: LayerNameDialog = LayerNameDialog(layers=project_instance.mapLayers()) assert len(dialog._layer_names) == 3 qtbot.addWidget(dialog) dialog.show() assert dialog.isVisible() assert dialog._lineedit_layer_name.palette().color(QPalette.WindowText) == QColor(dialog._text_color) qtbot.keyClicks(dialog._lineedit_layer_name, 'a') assert dialog._lineedit_layer_name.palette().color(QPalette.WindowText) == QColor('red') buttons: QDialogButtonBox = dialog._button_box button_ok: QPushButton = buttons.button(QDialogButtonBox.Ok) assert not button_ok.isEnabled() qtbot.keyClicks(dialog._lineedit_layer_name, 'f') assert dialog._lineedit_layer_name.palette().color(QPalette.WindowText) == QColor(dialog._text_color) assert button_ok.isEnabled() qtbot.mouseClick(button_ok, qgis.QtCore.Qt.LeftButton) assert not dialog.isVisible() assert dialog.layer_name == 'af'
def test_laser_widget_actions(qtbot: QtBot): viewspace = LaserViewSpace() qtbot.addWidget(viewspace) viewspace.show() view = viewspace.activeView() view.addLaser( Laser(rand_data(["a", "b"]), info={"File Path": "/home/pewpew/real.npz"})) widget = view.activeWidget() dlg = widget.actionCalibration() dlg.close() dlg = widget.actionConfig() dlg.close() widget.actionDuplicate() widget.actionCopyImage() dlg = widget.actionExport() dlg.close() dlg = widget.actionSave() dlg.close() dlg = widget.actionStatistics() dlg.close() dlg = widget.actionSelectDialog() dlg.close() dlg = widget.actionColocal() dlg.close() widget.contextMenuEvent( QtGui.QContextMenuEvent(QtGui.QContextMenuEvent.Mouse, QtCore.QPoint(0, 0))) # Test contextmenu widget.graphics.mask = np.ones((10, 10), dtype=bool) widget.contextMenuEvent( QtGui.QContextMenuEvent( QtGui.QContextMenuEvent.Mouse, widget.graphics.mapFromScene(QtCore.QPointF(0, 0)), )) widget.actionCopySelectionText() widget.actionCropSelection() dlg = widget.actionStatisticsSelection() dlg.close() dlg = widget.actionColocalSelection() dlg.close()
def mf_widget(self, qtbot: QtBot, ctrlr: api.AbstractController): widget = MinefieldWidget(None, ctrlr, self.state) qtbot.addWidget(widget) widget._set_cell_image = Mock(wraps=widget._set_cell_image) widget.at_risk_signal.connect(self.at_risk_signal_cb) widget.no_risk_signal.connect(self.no_risk_signal_cb) self._qtbot = qtbot self._mf_widget = widget self._mouse_buttons_down = Qt.NoButton self._mouse_down_pos = None yield widget self._qtbot = None self._mf_widget = None self._mouse_buttons_down = Qt.NoButton self._mouse_down_pos = None
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"}
def test_merge_tool(qtbot: QtBot): viewspace = LaserViewSpace() qtbot.addWidget(viewspace) viewspace.show() view = viewspace.activeView() data = rand_data(["A", "B"]) view.addLaser(Laser(data, info={"Name": "Laser 1", "File Path": "/test/laser1"})) data = rand_data(["B", "C"]) view.addLaser(Laser(data, info={"Name": "Laser 2", "File Path": "/test/laser1"})) tool = MergeTool(view.activeWidget()) view.addTab("Tool", tool) qtbot.waitExposed(tool) assert tool.list.count() == 1 # Test load via dialog dlg = tool.addLaserDialog() assert dlg.comboBoxItems() == ["Laser 2"] dlg.accept() assert tool.list.count() == 2 assert [row.offset() == (0, 0) for row in tool.list.rows] assert tool.list.rows[0].combo_element.currentText() == "A" assert tool.list.rows[1].combo_element.currentText() == "B" tool.action_align_horz.trigger() assert tool.list.rows[0].offset() == (0, 0) assert tool.list.rows[1].offset() == (0, 10) tool.action_align_vert.trigger() assert tool.list.rows[0].offset() == (0, 0) assert tool.list.rows[1].offset() == (10, 0) tool.action_align_auto.trigger() assert tool.list.rows[0].offset() == (0, 0) # Second image position unknown tool.apply()
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
def test_laser_graphics_widgets(qtbot: QtBot): graphics = LaserGraphicsView(GraphicsOptions()) qtbot.addWidget(graphics) x = np.random.random((10, 10)) graphics.drawImage(x, QtCore.QRectF(0, 0, 100, 100), "x") qtbot.waitExposed(graphics) graphics.startRulerWidget() assert graphics.widget is not None event = QtGui.QMouseEvent( QtCore.QEvent.MouseButtonPress, graphics.mapFromScene(QtCore.QPointF(0, 0)), QtCore.Qt.LeftButton, QtCore.Qt.LeftButton, QtCore.Qt.NoModifier, ) graphics.mousePressEvent(event) event.setLocalPos(graphics.mapFromScene(QtCore.QPointF(100, 100))) graphics.mouseMoveEvent(event) graphics.mouseReleaseEvent(event) assert np.isclose(graphics.widget.line.length(), 100 * np.sqrt(2)) graphics.endWidget() assert graphics.widget is None graphics.startSliceWidget() assert graphics.widget is not None event = QtGui.QMouseEvent( QtCore.QEvent.MouseButtonPress, graphics.mapFromScene(QtCore.QPointF(5, 5)), QtCore.Qt.LeftButton, QtCore.Qt.LeftButton, QtCore.Qt.NoModifier, ) graphics.mousePressEvent(event) event.setLocalPos(graphics.mapFromScene(QtCore.QPointF(95, 5))) graphics.mouseMoveEvent(event) graphics.mouseReleaseEvent(event) assert np.all(graphics.widget.sliced == x[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()
def test_laser_view_space_apply_dialogs(qtbot: QtBot): viewspace = LaserViewSpace() qtbot.addWidget(viewspace) viewspace.show() qtbot.addWidget(viewspace) viewspace.views[0].addLaser(Laser(rand_data("A1"))) viewspace.refresh() dlg = viewspace.configDialog() dlg.applyPressed.emit(dlg) dlg.close() dlg = viewspace.colortableRangeDialog() dlg.applyPressed.emit(dlg) dlg.close() dlg = viewspace.fontsizeDialog() dlg.intValueSelected.emit(5) dlg.close() assert viewspace.options.font.pointSize() == 5
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
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()
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)
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
def test_wizard_srr_config(qtbot: QtBot): path = Path(__file__).parent.joinpath("data", "io") wiz = SRRImportWizard( [ path.joinpath("textimage", "csv.csv"), path.joinpath("textimage", "csv.csv"), ], config=Config(10.0, 40.0, 0.25), ) 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() assert page.getNames() == ("_Element_", ) assert not page.isComplete() page.lineedit_warmup.setText("0") assert page.isComplete() page.lineedit_warmup.setText("-1") assert not page.isComplete() page.lineedit_speed.setText("0") assert not page.isComplete() dlg = page.buttonNamesPressed() dlg.close() page.updateNames({"_Element_": "Pew"}) assert page.getNames() == ("Pew", )
def test_colorrange_dialog(qtbot: QtBot): default_range = (0.0, 1.0) ranges = {"A": (1.0, 2.0), "B": ("2%", 3.0)} dialog = dialogs.ColorRangeDialog(ranges, default_range, ["A", "B", "C"], "C") qtbot.addWidget(dialog) dialog.open() # Loads C as current, has default range assert dialog.combo_element.currentText() == "C" assert dialog.lineedit_min.text() == "" assert dialog.lineedit_max.text() == "" assert dialog.lineedit_min.placeholderText() == "0.0" assert dialog.lineedit_max.placeholderText() == "1.0" # Not added yet assert "C" not in dialog.ranges # Add and check is there dialog.lineedit_min.setText("1%") dialog.lineedit_max.setText("2%") dialog.combo_element.setCurrentText("B") # Update C assert dialog.ranges["C"] == ("1%", "2%") assert dialog.lineedit_min.text() == "2%" assert dialog.lineedit_max.text() == "3.0" dialog.combo_element.setCurrentText("A") assert dialog.lineedit_min.text() == "1.0" assert dialog.lineedit_max.text() == "2.0" dialog.check_all.click() dialog.lineedit_min.setText("1.0") dialog.lineedit_max.setText("2.0") # dialog.combo_element.setCurrentText("C") dialog.apply() assert dialog.default_range == (1.0, 2.0) assert dialog.ranges == {}
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)
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)
def test_stats_dialog(qtbot: QtBot): x = np.array(np.random.random([10, 10]), dtype=[("a", float)]) x[0, :] = np.nan m = np.full(x.shape, True, dtype=bool) dialog = dialogs.StatsDialog(x, m, {"a": "u"}, "a", (1.0, 1.0)) qtbot.addWidget(dialog) dialog.open() assert dialog.label_area.text().endswith("90 μm²") dialog.pixel_size = (1e3, 1e3) dialog.updateStats() assert dialog.label_area.text().endswith("90 mm²") dialog.pixel_size = (1e5, 1e5) dialog.updateStats() assert dialog.label_area.text().endswith("9000 cm²") dialog.contextMenuEvent( QtGui.QContextMenuEvent(QtGui.QContextMenuEvent.Mouse, QtCore.QPoint(0, 0))) dialog.copyToClipboard()
def test_tool_filter(qtbot: QtBot): viewspace = LaserViewSpace() qtbot.addWidget(viewspace) viewspace.show() view = viewspace.activeView() view.addLaser(Laser(rand_data(["a"]))) tool = FilteringTool(view.activeWidget()) view.addTab("Tool", tool) qtbot.waitExposed(tool) tool.combo_filter.setCurrentText("Mean") tool.combo_filter.activated.emit(0) tool.lineedit_fparams[0].setText("3.0") tool.lineedit_fparams[1].setText("3.0") tool.lineedit_fparams[0].editingFinished.emit() assert np.all(tool.fparams == [3.0, 3.0]) assert tool.isComplete() tool.lineedit_fparams[0].setText("5.0") tool.lineedit_fparams[0].editingFinished.emit() assert np.all(tool.fparams == [5.0, 3.0]) assert tool.isComplete() tool.combo_filter.setCurrentText("Median") tool.combo_filter.activated.emit(0) assert np.all(tool.fparams == [5.0, 3.0]) assert tool.isComplete() tool.lineedit_fparams[0].setText("4.0") tool.lineedit_fparams[0].editingFinished.emit() assert not tool.isComplete() tool.combo_filter.setCurrentText("Mean") tool.combo_filter.activated.emit(0) assert np.all(tool.fparams == [5.0, 3.0]) assert tool.isComplete() tool.apply()
def test_wizard_import_path_widget_multiple_file(qtbot: QtBot): widget = options.MultiplePathSelectWidget([], "Numpy Archive", [".npz"], "File") qtbot.addWidget(widget) assert not widget.isComplete() widget.addPath(path.joinpath("npz", "test.npz")) assert Path(widget.paths[0]).samefile(path.joinpath("npz", "test.npz")) assert len(widget.paths) == 1 assert widget.isComplete() widget.addPaths([path.joinpath("npz", "test.npz")]) assert len(widget.paths) == 2 widget.addPathsInDirectory(path.joinpath("npz")) assert len(widget.paths) == 3 dlg = widget.selectMultiplePaths() assert dlg.fileMode() == QtWidgets.QFileDialog.ExistingFiles dlg.close() dlg = widget.selectAllInDirectory() assert dlg.fileMode() == QtWidgets.QFileDialog.Directory dlg.close()
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"])
def test_config_dialog_krisskross(qtbot: QtBot): dialog = dialogs.ConfigDialog(SRRConfig()) qtbot.addWidget(dialog) dialog.open() assert hasattr(dialog, "lineedit_warmup") assert hasattr(dialog, "spinbox_offsets") qtbot.mouseClick(dialog.spinbox_offsets, QtCore.Qt.LeftButton) dialog.lineedit_warmup.setText("7.5") dialog.spinbox_offsets.setValue(3) dialog.updateConfig() assert dialog.config.warmup == 7.5 assert dialog.config._subpixel_size == 3 assert dialog.isComplete() dialog.lineedit_warmup.setText("-1") assert not dialog.isComplete() dialog.apply() dialog.check_all.setChecked(True) dialog.apply()
def test_layer_name_dialog_02(qgis_app: QgsApplication, qgis_locale: QSettings, qgis_plugin: Dict[str, Any], qgis_bot: QgisBot, qtbot: QtBot, qgis_new_project: None): """ Tests the layer name dialog is correctly shown and destroyed with an Ok action :param qgis_app: QGIS application fixture :type qgis_app: QgsApplication :param qgis_locale: QT settings fixture with a user locale :type qgis_locale: QSettings :param qgis_plugin: QGIS loading and unloading fixture for plugins :type qgis_plugin: dict of Any :param qgis_bot: QGIS Bot to automate GUI tests :type qgis_bot: QgisBot :param qtbot: QT fixture to automate GUI tests :type qtbot: QtBot :param qgis_new_project: Ensures the project instance is clean :type qgis_new_project: None """ assert type(qgis.utils.plugins['gisfire_spread_simulation']).__name__ == 'GisFIRESpreadSimulation' project: QgsProject = QgsProject() project_instance: QgsProject = project.instance() vl_a = QgsVectorLayer('Point', 'a', 'memory') vl_b = QgsVectorLayer('Point', 'b', 'memory') vl_c = QgsVectorLayer('Point', 'c', 'memory') project_instance.addMapLayer(vl_a) project_instance.addMapLayer(vl_b) project_instance.addMapLayer(vl_c) dialog: LayerNameDialog = LayerNameDialog(layers=project_instance.mapLayers()) assert len(dialog._layer_names) == 3 qtbot.addWidget(dialog) dialog.show() assert dialog.isVisible() buttons: QDialogButtonBox = dialog._button_box button_ok: QPushButton = buttons.button(QDialogButtonBox.Ok) qtbot.mouseClick(button_ok, qgis.QtCore.Qt.LeftButton) assert not dialog.isVisible()
def test_ruler_widget_item(qtbot: QtBot): window = QtWidgets.QMainWindow() qtbot.addWidget(window) scene = QtWidgets.QGraphicsScene(0, 0, 100, 100) view = QtWidgets.QGraphicsView(scene) window.setCentralWidget(view) img = ScaledImageItem.fromArray(np.random.random((10, 10)), QtCore.QRectF(50, 50, 50, 50)) item = RulerWidgetItem(img) scene.addItem(item) item.mousePressEvent( FakeSceneMouseEvent(QtCore.Qt.LeftButton, QtCore.QPointF(50, 50))) item.mouseMoveEvent( FakeSceneMouseEvent(QtCore.Qt.LeftButton, QtCore.QPointF(100, 100))) item.mouseReleaseEvent( FakeSceneMouseEvent(QtCore.Qt.LeftButton, QtCore.QPointF(100, 100))) assert item.line.length() == np.sqrt(50**2 + 50**2) # Draw everything window.show() qtbot.waitExposed(window)
def test_main_window_actions_empty(qtbot: QtBot): window = MainWindow() qtbot.addWidget(window) assert not window.action_export_all.isEnabled() assert not window.action_tool_calculator.isEnabled() assert not window.action_tool_drift.isEnabled() assert not window.action_tool_filter.isEnabled() assert not window.action_tool_standards.isEnabled() assert not window.action_tool_overlay.isEnabled() dlg = window.actionOpen() dlg.close() dlg = window.actionWizardImport() dlg.close() dlg = window.actionWizardSRR() dlg.close() dlg = window.actionAbout() dlg.close() window.button_status_index.toggle() assert window.viewspace.options.units == "index" window.button_status_um.toggle() assert window.viewspace.options.units == "μm"
def test_config_dialog(qtbot: QtBot): config = Config() dialog = dialogs.ConfigDialog(config) qtbot.addWidget(dialog) dialog.open() assert not hasattr(dialog, "lineedit_warmup") assert not hasattr(dialog, "spinbox_offsets") # Check the texts are correct assert dialog.lineedit_spotsize.text() == str(config.spotsize) assert dialog.lineedit_speed.text() == str(config.speed) assert dialog.lineedit_scantime.text() == str(config.scantime) dialog.lineedit_spotsize.setText("1") dialog.lineedit_speed.setText("2.") dialog.lineedit_scantime.setText("3.0000") dialog.updateConfig() # Check it updated assert dialog.config.spotsize == 1.0 assert dialog.config.speed == 2.0 assert dialog.config.scantime == 3.0 assert dialog.isComplete() dialog.lineedit_scantime.setText("-1") assert not dialog.isComplete() dialog.lineedit_speed.setText("-1") assert not dialog.isComplete() dialog.lineedit_spotsize.setText("-1") assert not dialog.isComplete() # Just run code as can't test clipboard dialog.copyToClipboard() dialog.apply() dialog.check_all.setChecked(True) dialog.apply()