def changeParamCombo(self, w, path, value_name, new_value, old_path=None): param_widget = self.getParamWidget(w, path, value_name, old_path) self.assertNotEqual(param_widget, None) pos = param_widget.valueTestPosition() widget = param_widget.valueTestWidget() QTest.mouseMove(widget, pos) Testing.process_events(self.qapp, t=PROCESS_EVENT_TIME) QTest.mouseClick(widget, Qt.LeftButton, pos=pos) # Now the selector should pop up which is a QListView list_views = Testing.findQObjectsByType(widget, "PyQt5.QtWidgets.QListView") self.assertEqual(len(list_views), 1) lv = list_views[0] model = lv.model() matches = model.findItems(new_value) self.assertEqual(len(matches), 1) model_idx = model.indexFromItem(matches[0]) rect = lv.visualRect(model_idx) QTest.mouseMove(lv, pos=rect.center()) Testing.process_events(self.qapp, t=PROCESS_EVENT_TIME) QTest.mouseClick(lv.viewport(), Qt.LeftButton, pos=rect.center(), delay=100) Testing.process_events(self.qapp, t=PROCESS_EVENT_TIME)
def test_rectangle_drawing(self): points = [[1, 1], [10, 10], [15, 15]] for i in points: for j in points: if (i[0] != j[0] or i[1] != j[1]): p1 = QPoint() p1.setX(i[0]) p1.setY(i[1]) p2 = QPoint() p2.setX(j[0]) p2.setY(j[1]) # print('point', i, j, p1.x(), p1.y(), p2.x(), p2.y()) testCanv = Canvas() testCanv.initialize() p = QPainter(testCanv.pixmap()) p.setPen( QPen(self.canvas.primary_color, self.canvas.config['size'], Qt.SolidLine, Qt.SquareCap, Qt.MiterJoin)) p.drawRect(QRect(p1, p2)) p.end() self.canvas.reset() self.canvas.set_mode('rect') self.canvas.config['fill'] = False QTest.mousePress(self.canvas, Qt.LeftButton, Qt.NoModifier, p1) QTest.mouseMove(self.canvas, p2, 100) QTest.mouseRelease(self.canvas, Qt.LeftButton, Qt.NoModifier, p2, 100) print(img_not_fill(self.canvas.pixmap().toImage())) # print(img_not_fill(testCanv.pixmap().toImage())) self.assertEqual( True, img_equals(self.canvas.pixmap().toImage(), testCanv.pixmap().toImage()))
def changeParamTypeCombo(self, w, path, new_type, old_path=None): node_widget = self.getNodeWidget(w, path, old_path) self.assertNotEqual(node_widget, None) type_combo = Testing.findQObjectsByName(node_widget, "type_combo") self.assertEqual(len(type_combo), 1) target = type_combo[0] QTest.mouseMove(target) QTest.mouseClick(target, Qt.LeftButton, delay=100) # Now the selector should pop up which is a QListView list_views = Testing.findQObjectsByType(target, "PyQt5.QtWidgets.QListView") self.assertEqual(len(list_views), 1) lv = list_views[0] model = lv.model() matches = model.findItems(new_type) self.assertEqual(len(matches), 1) model_idx = model.indexFromItem(matches[0]) rect = lv.visualRect(model_idx) QTest.mouseMove(lv, pos=rect.center()) Testing.process_events(self.qapp, t=PROCESS_EVENT_TIME) QTest.mouseClick(lv.viewport(), Qt.LeftButton, pos=rect.center(), delay=100) Testing.process_events(self.qapp, t=PROCESS_EVENT_TIME)
def changeParamValueText(self, w, path, value_name, new_text, old_path=None): param_widget = self.getParamWidget(w, path, value_name, old_path) self.assertNotEqual(param_widget, None) pos = param_widget.valueTestPosition() widget = param_widget.valueTestWidget() QTest.mouseMove(widget, pos) Testing.process_events(self.qapp, t=PROCESS_EVENT_TIME) QTest.mouseClick(widget, Qt.LeftButton, pos=pos) QTest.mouseDClick(widget, Qt.LeftButton, pos=pos) # The default editing widget on a QTreeWidgetItem is a QLineEdit. # But it doesn't seem to show up until the item has focus. # This is pretty brittle but seems to work OK for now. line_edit = Testing.findQObjectsByType(widget, "PyQt5.QtWidgets.QLineEdit") for obj in line_edit: if obj.objectName() == "": widget = obj break Testing.process_events(self.qapp, t=PROCESS_EVENT_TIME) QTest.keyClick(widget, Qt.Key_Backspace) QTest.keyClicks(widget, new_text) QTest.keyClick(widget, Qt.Key_Return) Testing.process_events(self.qapp, t=PROCESS_EVENT_TIME)
def on_move_complete(self, scene, x, y): """ Simulate click on the button """ QTest.mouseMove(scene.parent, QPoint(x, y)) QTest.mousePress(scene.parent, Qt.LeftButton, delay=1000) self.pressed.emit() self.update() QTest.mouseRelease(scene.parent, Qt.LeftButton, delay=2000) self.update()
def changeParamValueToggle(self, w, path, value_name, old_path=None): param_widget = self.getParamWidget(w, path, value_name, old_path) self.assertNotEqual(param_widget, None) pos = param_widget.valueTestPosition() widget = param_widget.valueTestWidget() QTest.mouseMove(widget, pos) Testing.process_events(self.qapp, t=PROCESS_EVENT_TIME) QTest.mouseClick(widget, Qt.LeftButton, pos=pos) Testing.process_events(self.qapp, t=PROCESS_EVENT_TIME)
def clickTab(self, app, tab_name): peacock_tab_widgets = Testing.findQObjectsByName(app, "PeacockMainWindow/tab_plugin") self.assertEqual(len(peacock_tab_widgets), 1) tabs = peacock_tab_widgets[0] for i in range(tabs.count()): if tabs.tabText(i) == tab_name: tab_bar = tabs.tabBar() rect = tab_bar.tabRect(i) QTest.mouseMove(tab_bar, rect.center()) QTest.mouseClick(tab_bar, Qt.LeftButton, pos=rect.center(), delay=100) Testing.process_events(self.qapp, t=PROCESS_EVENT_TIME) return
def add_one_pick(self): '''Add a single pick to pile_viewer''' pv = self.pile_viewer QTest.mouseDClick(pv.viewer, Qt.LeftButton) position_tl = pv.pos() geom = pv.frameGeometry() QTest.mouseMove(pv.viewer, pos=position_tl) QTest.mouseMove(pv.viewer, pos=(qc.QPoint( position_tl.x()+geom.x()/2., position_tl.y()+geom.y()/2.))) # This should be done also by mouseDClick(). QTest.mouseRelease(pv.viewer, Qt.LeftButton) QTest.mouseClick(pv.viewer, Qt.LeftButton)
def mouseDrag(widget, press_on, release_on, button, modifier=None, delay=-1): """ Convenience helper for dragging a QWidget Makes a drag with the mouse. Args: widget (QWidget): press_on (QPoint): this is the position where the mouse is pressed. release_on (QPoint): this is the position where the mouse is released. """ if modifier is None: modifier = Qt.KeyboardModifiers() QTest.mousePress(widget, button, modifier, pos=press_on, delay=delay) QTest.mouseMove(widget, pos=release_on, delay=delay) QTest.mouseRelease(widget, button, modifier, pos=release_on, delay=delay)
def clickTab(self, app, tab_name): peacock_tab_widgets = Testing.findQObjectsByName( app, "PeacockMainWindow/tab_plugin") self.assertEqual(len(peacock_tab_widgets), 1) tabs = peacock_tab_widgets[0] for i in range(tabs.count()): if tabs.tabText(i) == tab_name: tab_bar = tabs.tabBar() rect = tab_bar.tabRect(i) QTest.mouseMove(tab_bar, rect.center()) QTest.mouseClick(tab_bar, Qt.LeftButton, pos=rect.center(), delay=100) Testing.process_events(self.qapp, t=PROCESS_EVENT_TIME) return
def clickOnTree(self, w, path, expand=False, include=False): tree = self.getTreeWidget(w) item = tree.findPathItem(path) self.assertNotEqual(item, None) tree.scrollToItem(item) tree.setCurrentItem(item) rect = tree.visualItemRect(item) viewport = tree.viewport() pos = rect.center() if expand or include: pos = rect.bottomLeft() pos.setY(pos.y() - rect.height() / 2) if include: pos.setX(pos.x() + 10) QTest.mouseMove(tree, pos) Testing.process_events(self.qapp, t=PROCESS_EVENT_TIME) QTest.mouseClick(viewport, Qt.LeftButton, delay=100, pos=pos) Testing.process_events(self.qapp, t=PROCESS_EVENT_TIME)
def clickOnTree(self, w, path, expand=False, include=False): tree = self.getTreeWidget(w) item = tree.findPathItem(path) self.assertNotEqual(item, None) tree.scrollToItem(item) tree.setCurrentItem(item) rect = tree.visualItemRect(item) viewport = tree.viewport() pos = rect.center() if expand or include: pos = rect.bottomLeft() pos.setY(pos.y() - rect.height()/2) if include: pos.setX(pos.x() + 10) QTest.mouseMove(tree, pos) Testing.process_events(self.qapp, t=PROCESS_EVENT_TIME) QTest.mouseClick(viewport, Qt.LeftButton, delay=100, pos=pos) Testing.process_events(self.qapp, t=PROCESS_EVENT_TIME)
def drag_slider(self, slider): ''' Click *slider*, drag from one side to the other, release mouse button repeat to restore inital state''' position = self.get_slider_position(slider) QTest.mouseMove(slider, pos=position.topLeft()) QTest.mousePress(slider, Qt.LeftButton) QTest.mouseMove(slider, pos=position.bottomRight()) QTest.mouseRelease(slider, Qt.LeftButton) QTest.mousePress(slider, Qt.LeftButton) QTest.mouseMove(slider, pos=position.topLeft()) QTest.mouseRelease(slider, Qt.LeftButton)
def hover_click(self, delay, widget): QTest.mouseMove(widget) QTest.qWait(int(gauss(delay, 3))) QTest.mouseClick(widget, Qt.LeftButton) QTest.qWait(int(gauss(delay, 3)))
def clickButton(self, button_objs): self.assertEqual(len(button_objs), 1) QTest.mouseMove(button_objs[0]) QTest.mouseClick(button_objs[0], Qt.LeftButton, delay=100) Testing.process_events(self.qapp, t=PROCESS_EVENT_TIME)
def test_enter_and_exit_events(self): # TODO: this is not causing what I want to happen, the style changes aren't happening. QTest.mouseMove(self.fig1.toolbar_custom_.btn_next_plot, delay=100) QTest.mouseMove(self.fig1.toolbar_custom_.btn_prev_plot, delay=100)
def _click_card_helper(self, card): rects = dict(self._hand_panel.cards()) point = (rects[card].topLeft() + QPointF(1, 1)).toPoint() QTest.mouseMove(self._hand_panel, point) QTest.mouseClick(self._hand_panel, Qt.LeftButton, Qt.NoModifier, point)