def test_laser_graphics_zoom(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.zoomStart() event = QtGui.QMouseEvent( QtCore.QEvent.MouseButtonPress, graphics.mapFromScene(QtCore.QPointF(20, 20)), QtCore.Qt.LeftButton, QtCore.Qt.LeftButton, QtCore.Qt.NoModifier, ) graphics.mousePressEvent(event) event.setLocalPos(graphics.mapFromScene(QtCore.QPointF(40, 40))) graphics.mouseMoveEvent(event) graphics.mouseReleaseEvent(event) rect = graphics.mapToScene(graphics.viewport().rect()).boundingRect() assert 29.5 < rect.center().x() < 30.5 assert 29.5 < rect.center().y() < 30.5 assert 19.5 < rect.width() < 20.5 or 19.5 < rect.height() < 20.5
def test_image_slice_item(qtbot: QtBot): window = QtWidgets.QMainWindow() qtbot.addWidget(window) scene = QtWidgets.QGraphicsScene(0, 0, 100, 100) view = QtWidgets.QGraphicsView(scene) window.setCentralWidget(view) array = np.random.random((10, 10)) img = ScaledImageItem.fromArray(array, QtCore.QRectF(0, 0, 100, 100)) item = ImageSliceWidgetItem(img, array) scene.addItem(item) item.mousePressEvent( FakeSceneMouseEvent(QtCore.Qt.LeftButton, QtCore.QPointF(1, 1))) item.mouseMoveEvent( FakeSceneMouseEvent(QtCore.Qt.LeftButton, QtCore.QPointF(1, 99))) item.mouseReleaseEvent( FakeSceneMouseEvent(QtCore.Qt.LeftButton, QtCore.QPointF(1, 99))) assert item.sliced.size == 10 assert np.all(item.sliced == array[:, 0]) item.actionCopyToClipboard() item.shape() # For redraw # Draw everything window.show() qtbot.waitExposed(window)
def test_wizard_import_config(qtbot: QtBot): wiz = ImportWizard(path.joinpath("agilent", "test_ms.b")) qtbot.addWidget(wiz) wiz.show() qtbot.waitExposed(wiz) wiz.next() wiz.next() page = wiz.currentPage() assert page.isComplete() assert page.getNames() == ("P31", "Eu153", "W182") assert page.lineedit_aspect.text() == "2.00" page.lineedit_scantime.setText("0") assert not page.isComplete() assert page.lineedit_aspect.text() == "0.00" page.lineedit_speed.setText("0") assert not page.isComplete() page.lineedit_spotsize.setText("0") assert not page.isComplete() assert page.lineedit_aspect.text() == "" dlg = page.buttonNamesPressed() dlg.close() page.updateNames({"P31": "31P", "Eu153": "Eu153"}) assert page.getNames() == ("31P", "Eu153")
def test_tool_filter(qtbot: QtBot): viewspace = LaserViewSpace() qtbot.addWidget(viewspace) viewspace.show() view = viewspace.activeView() widget = view.addLaser(Laser(linear_data(["a", "b", "c"]))) tool = DriftTool(view.activeWidget()) view.addTab("Tool", tool) qtbot.waitExposed(tool) tool.combo_element.setCurrentText("a") tool.combo_element.activated.emit(0) tool.spinbox_degree.setValue(1) tool.apply() assert np.all(np.isclose(widget.laser.data["a"], widget.laser.data["a"][0][0])) tool.combo_element.setCurrentText("b") tool.combo_element.activated.emit(0) assert not np.all(np.isclose(widget.laser.data["b"], widget.laser.data["c"][0][0])) tool.check_apply_all.setChecked(True) tool.apply() assert np.all(np.isclose(widget.laser.data["b"], widget.laser.data["c"][0][0]))
def test_standards_tool(qtbot: QtBot): viewspace = LaserViewSpace() qtbot.addWidget(viewspace) viewspace.show() view = viewspace.activeView() data = linear_data(["A1", "B2"]) data["B2"][6] = 1.0 view.addLaser(Laser(data)) tool = StandardsTool(view.activeWidget()) view.addTab("Tool", tool) qtbot.waitExposed(tool) # Units tool.lineedit_units.setText("unit") tool.lineedit_units.editingFinished.emit() tool.combo_weighting.setCurrentIndex(2) # Table tool.spinbox_levels.setValue(5) assert not tool.isComplete() assert not tool.button_plot.isEnabled() for i in range(0, tool.table.model().rowCount()): index = tool.table.model().index(i, 0) tool.table.model().setData(index, i) # Change element, check weighting tool.combo_element.setCurrentIndex(1) assert not tool.table.isComplete() for i in range(0, tool.table.model().rowCount()): index = tool.table.model().index(i, 0) tool.table.model().setData(index, i) assert tool.isComplete() assert tool.button_plot.isEnabled() assert tool.combo_weighting.currentIndex() == 0 assert tool.lineedit_units.text() == "" tool.lineedit_units.setText("none") assert tool.calibration["B2"].gradient == 1.75 # Check weighting updates results tool.combo_weighting.setCurrentText("y") assert tool.calibration["B2"].weighting == "y" assert np.isclose(tool.calibration["B2"].gradient, 1.954022988) # Change element back, check weighting, unit, table restored tool.combo_element.setCurrentIndex(0) assert tool.isComplete() assert tool.lineedit_units.text() == "unit" assert tool.combo_weighting.currentIndex() == 2 # Test SD weighting tool.combo_weighting.setCurrentIndex(1) assert np.all(tool.calibration["A1"].weights == 4.0) tool.combo_element.setCurrentIndex(1) dlg = tool.showCurve() qtbot.waitExposed(dlg) dlg.close()
def test_tool_calculator(qtbot: QtBot): viewspace = LaserViewSpace() qtbot.addWidget(viewspace) viewspace.show() view = viewspace.activeView() widget = view.addLaser(Laser(rand_data(["a", "b"]))) tool = CalculatorTool(view.activeWidget()) view.addTab("Tool", tool) qtbot.waitExposed(tool) assert tool.lineedit_name.text() == "calc0" tool.apply() assert "calc0" in widget.laser.elements assert tool.lineedit_name.text() == "calc1" # overwrite tool.lineedit_name.setText("a") tool.apply() assert len(widget.laser.elements) == 3 # Inserters assert tool.formula.toPlainText() == "a" tool.insertFunction(1) assert tool.formula.toPlainText() == "abs(a" tool.insertVariable(2) assert tool.formula.toPlainText() == "abs(ba" # Test output of previewData and output lineedit x = np.array(np.random.random((10, 10)), dtype=[("a", float)]) tool.formula.setPlainText("mean(a)") assert tool.previewData(x) is None assert tool.output.text() == f"{np.mean(x['a']):.10g}" # Array access in output tool.formula.setPlainText("a[0]") assert tool.previewData(x) is None assert tool.output.text() == f"{list(map('{:.4g}'.format, x['a'][0]))}" # Simple op tool.formula.setPlainText("a + 1.0") assert np.all(tool.previewData(x) == x["a"] + 1.0) assert tool.isComplete() # Invalid input tool.formula.setPlainText("fail") assert tool.previewData(x) is None assert not tool.isComplete()
def test_calibration_chart(qtbot: QtBot): chart = CalibrationChart("Calibration") qtbot.addWidget(chart) points = np.stack((np.arange(5), np.arange(1, 6)), axis=1).astype(np.float64) chart.setPoints(points) chart.setLine(0.0, 6.0, 1.0, 1.0) chart.setText("Text") chart.show() qtbot.waitExposed(chart) assert not chart.label_series.isVisible() chart.showPointPosition(QtCore.QPointF(0.0, 1.0), True) assert chart.label_series.isVisible()
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_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_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_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_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_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_tool_widget(qtbot: QtBot): viewspace = LaserViewSpace() qtbot.addWidget(viewspace) viewspace.show() view = viewspace.activeView() widget = view.addLaser(Laser(rand_data("A1"), info={"Name": "Widget"})) tool = ToolWidget(widget, apply_all=True) index = widget.index widget.view.removeTab(index) widget.view.insertTab(index, "Tool", tool) qtbot.waitExposed(tool) tool.requestClose() view.tabs.tabText(index) == "Widget" with qtbot.wait_signal(tool.applyPressed): button = tool.button_box.button(QtWidgets.QDialogButtonBox.Apply) button.click() with qtbot.wait_signal(tool.applyPressed): button = tool.button_box.button(QtWidgets.QDialogButtonBox.Ok) button.click()
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)
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_overlay_tool(qtbot: QtBot): data = np.zeros((10, 10), dtype=[("r", float), ("g", float), ("b", float)]) data["r"][:, :] = 1.0 data["g"][:10, :] = 1.0 data["b"][:, :10] = 1.0 viewspace = LaserViewSpace() qtbot.addWidget(viewspace) viewspace.show() view = viewspace.activeView() view.addLaser( Laser(data, info={ "Name": "real", "File Path": "/home/pewpew/real.npz" })) tool = OverlayTool(view.activeWidget()) view.addTab("Tool", tool) qtbot.waitExposed(tool) # Test rgb mode assert tool.rows.color_model == "rgb" tool.comboAdd(1) # r assert np.all(tool.graphics.data[0, 0] == (255 << 24) + (255 << 16)) tool.comboAdd(2) # g assert np.all(tool.graphics.data[:10] == (255 << 24) + (255 << 16) + (255 << 8)) assert np.all(tool.graphics.data[10:] == (255 << 24) + (255 << 16)) tool.comboAdd(3) # g assert np.all(tool.graphics.data[:10, :10] == (255 << 24) + (255 << 16) + (255 << 8) + 255) assert np.all(tool.graphics.data[10:, :10] == (255 << 24) + (255 << 16)) assert np.all(tool.graphics.data[10:, 10:] == (255 << 24) + (255 << 16) + (255 << 8)) assert np.all(tool.graphics.data[10:, 10:] == (255 << 24) + (255 << 16)) # Test cmyk mode tool.radio_cmyk.toggle() assert tool.rows.color_model == "cmyk" assert np.all(tool.graphics.data[:10, :10] == (255 << 24)) assert np.all(tool.graphics.data[10:, :10] == (255 << 24) + (255 << 8)) assert np.all(tool.graphics.data[10:, 10:] == (255 << 25) + 255) assert np.all(tool.graphics.data[10:, 10:] == (255 << 24) + (255 << 8) + 255) # Check that the rows are limited to 3 assert tool.rows.max_rows == 3 assert not tool.combo_add.isEnabled() assert tool.rows.rowCount() == 3 with qtbot.assert_not_emitted(tool.rows.rowsChanged): tool.addRow("r") assert tool.rows.rowCount() == 3 # Check color buttons are not enabled for row in tool.rows.rows: assert not row.button_color.isEnabled() # Test any mode tool.radio_custom.toggle() assert tool.rows.color_model == "any" assert tool.combo_add.isEnabled() assert tool.check_normalise.isEnabled() for row in tool.rows.rows: assert row.button_color.isEnabled() tool.addRow("g") tool.rows[3].setColor(QtGui.QColor.fromRgbF(0.0, 1.0, 1.0)) assert tool.rows.rowCount() == 4 # Test normalise assert np.amin(tool.graphics.data) > (255 << 24) tool.check_normalise.setChecked(True) tool.refresh() assert tool.graphics.data.min() == (255 << 24) + (255 << 8) + 255 # No red tool.check_normalise.setChecked(False) # Test export dlg = tool.openExportDialog() dlg2 = dlg.selectDirectory() dlg2.close() with tempfile.NamedTemporaryFile() as tf: dlg.export(Path(tf.name)) assert Path(tf.name).exists() with tempfile.TemporaryDirectory() as td: dlg.lineedit_directory.setText(td) dlg.lineedit_filename.setText("test.png") dlg.check_individual.setChecked(True) dlg.accept() qtbot.wait(300) assert Path(td).joinpath("test_1.png").exists() assert Path(td).joinpath("test_2.png").exists() assert Path(td).joinpath("test_3.png").exists() # Test close with qtbot.wait_signal(tool.rows.rowsChanged): tool.rows.rows[-1].close() assert tool.rows.rowCount() == 3 # Test hide tool.radio_rgb.toggle() with qtbot.wait_signal(tool.rows.rows[0].itemChanged): tool.rows.rows[0].button_hide.click() assert np.all(tool.graphics.data <= ((255 << 24) + (255 << 8) + 255)) dlg = tool.rows[0].selectColor() dlg.close()
def test_laser_graphics_selection(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) # Test rectangle selector and center pixel selecting graphics.startRectangleSelection() event = QtGui.QMouseEvent( QtCore.QEvent.MouseButtonPress, graphics.mapFromScene(QtCore.QPointF(1, 1)), QtCore.Qt.LeftButton, QtCore.Qt.LeftButton, QtCore.Qt.NoModifier, ) graphics.mousePressEvent(event) event.setLocalPos(graphics.mapFromScene(QtCore.QPointF(9, 9))) graphics.mouseMoveEvent(event) graphics.mouseReleaseEvent(event) assert graphics.mask[0][0] assert np.all(graphics.mask[1:, :] == 0) assert np.all(graphics.mask[:, 1:] == 0) graphics.endSelection() assert graphics.selection_item is None assert np.all(graphics.mask == 0) assert not graphics.posInSelection(graphics.mapFromScene(QtCore.QPoint(1, 1))) # Test lasso works graphics.startLassoSelection() event = QtGui.QMouseEvent( QtCore.QEvent.MouseButtonPress, graphics.mapFromScene(QtCore.QPointF(1, 1)), QtCore.Qt.LeftButton, QtCore.Qt.LeftButton, QtCore.Qt.NoModifier, ) graphics.mousePressEvent(event) event.setLocalPos(graphics.mapFromScene(QtCore.QPointF(99, 1))) graphics.mouseMoveEvent(event) event.setLocalPos(graphics.mapFromScene(QtCore.QPointF(99, 99))) graphics.mouseMoveEvent(event) event.setLocalPos(graphics.mapFromScene(QtCore.QPointF(91, 99))) graphics.mouseMoveEvent(event) event.setLocalPos(graphics.mapFromScene(QtCore.QPointF(91, 11))) graphics.mouseMoveEvent(event) event.setLocalPos(graphics.mapFromScene(QtCore.QPointF(1, 11))) graphics.mouseMoveEvent(event) graphics.mouseReleaseEvent(event) assert np.all(graphics.mask[0, :]) assert np.all(graphics.mask[:, -1]) assert np.all(graphics.mask[1:, :-1] == 0) assert graphics.posInSelection(graphics.mapFromScene(QtCore.QPoint(1, 1))) assert not graphics.posInSelection(graphics.mapFromScene(QtCore.QPoint(11, 11)))
def test_laser_view_space(qtbot: QtBot): viewspace = LaserViewSpace() qtbot.addWidget(viewspace) viewspace.show() viewspace.toggleCalibrate(False) viewspace.toggleColorbar(False) viewspace.toggleLabel(False) viewspace.toggleScalebar(False) viewspace.toggleSmooth(False) assert not viewspace.options.calibrate assert not viewspace.options.items["colorbar"] assert not viewspace.options.items["label"] assert not viewspace.options.items["scalebar"] assert not viewspace.options.smoothing viewspace.splitActiveHorizontal() assert viewspace.currentElement() is None viewspace.views[0].addLaser(Laser(rand_data(["A1", "B2"]))) viewspace.views[0].addLaser(Laser(rand_data(["A1", "C3"]))) viewspace.views[1].addLaser(Laser(rand_data(["A1", "C3"]))) viewspace.views[1].addLaser(Laser(rand_data(["B2", "D4"]))) assert viewspace.uniqueElements() == ["A1", "B2", "C3", "D4"] assert viewspace.currentElement() == "A1" # Apply config viewspace.applyConfig(Config(10, 10, 10)) for view in viewspace.views: for widget in view.widgets(): assert widget.laser.config.spotsize == 10 assert widget.laser.config.speed == 10 assert widget.laser.config.scantime == 10 # Try to apply calibraiton viewspace.applyCalibration({ "A1": Calibration(1.0, 1.0), "B2": Calibration(2.0, 2.0) }) qtbot.waitExposed(viewspace) for view in viewspace.views: for widget in view.widgets(): if "A1" in widget.laser.elements: assert widget.laser.calibration["A1"].intercept == 1.0 assert widget.laser.calibration["A1"].gradient == 1.0 if "B2" in widget.laser.elements: assert widget.laser.calibration["B2"].intercept == 2.0 assert widget.laser.calibration["B2"].gradient == 2.0 if "C3" in widget.laser.elements: assert widget.laser.calibration["C3"].intercept == 0.0 assert widget.laser.calibration["C3"].gradient == 1.0 # Check element changed if avilable assert viewspace.views[0].activeWidget().combo_element.currentText( ) == "A1" assert viewspace.views[1].activeWidget().combo_element.currentText( ) == "A1" viewspace.setCurrentElement("B2") assert viewspace.views[0].activeWidget().combo_element.currentText( ) == "B2" assert viewspace.views[1].activeWidget().combo_element.currentText( ) == "A1" # Close all for view in viewspace.views: for widget in view.widgets(): widget.close()