def test_enter(self): R = SigRecorder() self.F.fileChanged.connect(R.string) #self.F.ui.fileBox.setFocus(Qt.MouseFocusReason) QTest.keyClicks(self.F.ui.fileBox, "testing") QTest.keyClick(self.F.ui.fileBox, Qt.Key_Enter) self.assertEqual('testing', str(self.F.file)) self.assertEqual(['testing'], R.S) R.clear() self.assertEqual(1, self.F.ui.fileBox.count()) self.assertEqual('testing', self.F.ui.fileBox.itemText(0)) for n in range(7): QTest.keyClick(self.F.ui.fileBox, Qt.Key_Backspace) QTest.keyClicks(self.F.ui.fileBox, "another") QTest.keyClick(self.F.ui.fileBox, Qt.Key_Enter) self.assertEqual('another', str(self.F.file)) self.assertEqual(['another'], R.S) self.assertEqual(2, self.F.ui.fileBox.count()) self.assertEqual('another', self.F.ui.fileBox.itemText(0)) self.assertEqual('testing', self.F.ui.fileBox.itemText(1))
def testEnterUrl(self): webtab = self.mainwin.tab_widget.currentWidget() #QTest.keyClicks(webtab.webkit, "LA", Qt.ControlModifier) QTest.keyClicks(webtab.address_bar, "http://theospark.net") QTest.keyClick(webtab.address_bar, "J", Qt.ControlModifier) #QTest.keyClick(webtab.address_bar, Qt.Key_Return) self.assertEqual(webtab.address_bar.text(), "http://theospark.net")
def test_whole_word(self): qpart = core.workspace().currentDocument().qutepart qpart.text = _TEXT_WHOLE_WORD # select first 'string' QTest.keyClick(core.mainWindow(), Qt.Key_F, Qt.ControlModifier) QTest.keyClicks(self.app.focusWidget(), "bar") self.assertEqual(qpart.cursorPosition[0], 1) # 2 items found QTest.keyClick(self.app.focusWidget(), Qt.Key_F3) self.assertEqual(qpart.cursorPosition[0], 2) QTest.keyClick(self.app.focusWidget(), Qt.Key_F3) self.assertEqual(qpart.cursorPosition[0], 1) # only 1 item found QTest.mouseClick(_findSearchController()._widget.cbWholeWord, Qt.LeftButton) self.assertEqual(qpart.cursorPosition[0], 2) QTest.keyClick(self.app.focusWidget(), Qt.Key_F3) self.assertEqual(qpart.cursorPosition[0], 2) # not moved, only line 2 # only 1 item found in reg exp mode qpart.cursorPosition = (0, 0) QTest.mouseClick(_findSearchController()._widget.cbRegularExpression, Qt.LeftButton) self.assertEqual(qpart.cursorPosition[0], 2) QTest.keyClick(self.app.focusWidget(), Qt.Key_F3) self.assertEqual(qpart.cursorPosition[0], 2) # not moved, only line 2
def test_click_selects_first(self): self.qpart.text = 'aaaa\nbbbb\ncccX\ndddd\ncccY' QTest.keyClicks(self.qpart, "ccc") QTest.mouseClick(self.qpart, Qt.LeftButton) QTest.keyClick(self.qpart, Qt.Key_Enter) self.assertEqual(self.qpart.text, 'cccY\naaaa\nbbbb\ncccX\ndddd\ncccY')
def test_upstream_calibration_controls(self): QTest.mouseClick(self.widget.us_etalon_rb, QtCore.Qt.LeftButton, pos=QtCore.QPoint( 2, self.widget.us_etalon_rb.height() / 2)) self.assertTrue(self.widget.us_etalon_rb.isChecked()) self.assertEqual( self.model.us_temperature_model.calibration_parameter.modus, 1) QTest.mouseClick(self.widget.us_temperature_rb, QtCore.Qt.LeftButton, pos=QtCore.QPoint( 2, self.widget.us_etalon_rb.height() / 2)) self.assertEqual( self.model.us_temperature_model.calibration_parameter.modus, 0) self.widget.us_temperature_txt.setText('') QTest.keyClicks(self.widget.us_temperature_txt, '1800') QTest.keyPress(self.widget.us_temperature_txt, QtCore.Qt.Key_Enter) self.assertEqual( self.model.us_temperature_model.calibration_parameter.temperature, 1800) filename = os.path.join(temperature_fitting_path, '15A_lamp.txt') self.controller.load_us_etalon_file(filename) self.assertEqual( self.model.us_temperature_model.calibration_parameter. etalon_file_name, filename) self.assertEqual(str(self.widget.us_etalon_filename_lbl.text()), os.path.basename(filename))
def keyClicks(self, text, modifiers=Qt.NoModifier, widget=None): """Alias for ``QTest.keyClicks``. If widget is none - focused widget will be keyclicked""" if widget is not None: QTest.keyClicks(widget, text, modifiers) else: QTest.keyClicks(self.app.focusWidget(), text, modifiers)
def test_adding_tags_in_the_widget(self): tw = TagsWidget() QTest.keyClicks(tw.lineEdit, 'lourd') # Called manually because we would need an event loop otherwise tw.addTag() self.assertEqual(tw.listWidget.count(), 1)
def test_remove_tag_with_delete_key(self): tw = TagsWidget() QTest.keyClicks(tw.lineEdit, 'lourd') tw.addTag() tw.listWidget.setCurrentRow(0) tw.keyPressEvent(QKeyEvent(QEvent.KeyPress, Qt.Key_Delete, Qt.NoModifier)) self.assertEqual(tw.listWidget.count(), 0)
def runInDialog(dialog): QTest.keyClicks(self.app.focusWidget(), NEW_PATH) def nextRunInDialog(nextDialog): self.assertEqual(nextDialog.windowTitle(), 'Failed to rename file') self.keyClick(Qt.Key_Return) self.openDialog(lambda: self.keyClick(Qt.Key_Return), nextRunInDialog)
def runInDialog(dialog): QTest.keyClicks(self.app.focusWidget(), '/dev/null') def runInNextDialog(nextDialog): self.assertTrue(nextDialog.windowTitle(), 'Not this time') self.keyClick(Qt.Key_Return) self.openDialog(lambda: self.keyClick(Qt.Key_Return), runInNextDialog)
def test_dwell_dialog(dwell_time): #Open the dialog for inputing the dwell time. assert win_obj.diag.dialog_dwell_win.isVisible() == True assert win_obj.diag.input_text.isVisible() == True assert str( win_obj.diag.label.text()) == 'Enter the pixel dwell time (us):' QTest.keyClicks(win_obj.diag.input_text, str(dwell_time)) assert win_obj.diag.input_text.text() == str(dwell_time) QTest.mouseClick(win_obj.diag.ok, QtCore.Qt.LeftButton)
def test_laser_line(self): x, y = self.widget.graph_widget.get_data() self.widget.laser_line_txt.setText('') QTest.keyClicks(self.widget.laser_line_txt, "415") QTest.keyClick(self.widget.laser_line_txt, QtCore.Qt.Key_Enter) new_x, new_y = self.widget.graph_widget.get_data() self.assertFalse(np.array_equal(new_x, x)) self.assertTrue(np.array_equal(new_y, y))
def test_type_and_search(self): QTest.keyClick(core.mainWindow(), Qt.Key_F, Qt.ControlModifier) qpart = core.workspace().currentDocument().qutepart QTest.keyClicks(self.app.focusWidget(), "string") self.assertEqual(qpart.cursorPosition, (6, 18)) self.assertEqual(qpart.selectedText, "string")
def test_threshold(self): self._assertNotVisible() self.qpart.completionThreshold = 8 QTest.keyClicks(self.qpart, "complet") self._assertNotVisible() QTest.keyClicks(self.qpart, "a") self._assertVisible()
def test_cant_add_twice_the_same(self): tw = TagsWidget() QTest.keyClicks(tw.lineEdit, 'lourd') tw.addTag() QTest.keyClicks(tw.lineEdit, 'lourd') tw.addTag() self.assertEqual(tw.listWidget.count(), 1)
def test_remove_tag_with_delete_key(self): tw = TagsWidget() QTest.keyClicks(tw.lineEdit, 'lourd') tw.addTag() tw.listWidget.setCurrentRow(0) tw.keyPressEvent( QKeyEvent(QEvent.KeyPress, Qt.Key_Delete, Qt.NoModifier)) self.assertEqual(tw.listWidget.count(), 0)
def test_pyconsole_history(self): """ Is there a history of commands send to the Python console that can be cycled through? :return: """ test_strs = [ascii_letters, digits, punctuation] # Load the history for ts in test_strs: QTest.keyClicks(self.form.pyconsole_output, "i = '{0}'".format(ts), delay=50) QTest.keyClick(self.form.pyconsole_output, Qt.Key_Return, delay=200)
def test_changing_roi(self): self.controller.load_data_file(os.path.join(unittest_files_path, 'temper_009.spe')) x, y = self.model.spectrum.data self.widget.roi_widget.roi_gbs[0].x_min_txt.setText("") QTest.keyClicks(self.widget.roi_widget.roi_gbs[0].x_min_txt, "0") QTest.keyPress(self.widget.roi_widget.roi_gbs[0].x_min_txt, QtCore.Qt.Key_Enter) new_x, new_y = self.model.spectrum.data self.assertNotEqual(len(x), len(new_x))
def test_line_sampling_dialog(sample_rate): #Open the dialog for the line sampling (Hz): assert win_obj.diag.line_sampling_win.isVisible() == True assert win_obj.diag.input_text.isVisible() == True assert str(win_obj.diag.label.text()) == 'Enter the line sampling (Hz):' win_obj.diag.input_text.clear() QTest.keyClicks(win_obj.diag.input_text, str(sample_rate)) assert win_obj.diag.input_text.text() == str(sample_rate) QTest.mouseClick(win_obj.diag.ok, QtCore.Qt.LeftButton) assert win_obj.diag.line_sampling_win.isVisible() == False
def test_getting_the_entered_tags(self): tw = TagsWidget() QTest.keyClicks(tw.lineEdit, 'lourd') tw.addTag() expected = [t.id for t in Session.query(Tag.id) .filter(Tag.name == u'lourd') .all()] self.assertEqual(tw.tags(), expected)
def test_cant_add_twice_the_same_even_after_reload(self): tw = TagsWidget() QTest.keyClicks(tw.lineEdit, 'lourd') tw.addTag() Session.add(Tag(u'Another tag')) tw.reload() QTest.keyClicks(tw.lineEdit, 'lourd') tw.addTag() self.assertEqual(tw.listWidget.count(), 1)
def test002_getFilePaths(self): """Test the the return layers of the method getFilePaths with 2 paths""" data = [('/home/shape/file.shp', 'fondo'), ('/home/shape/file.shp', 'secciones')] QTest.keyClicks(self.dialog.capaFondo, "/home/shape/file.shp") QTest.keyClicks(self.dialog.capaSecciones, "/home/shape/file.shp") result = self.dialog.getFilePaths() self.assertEqual(result, data)
def test_7(self): """Smartly indent python""" self.qpart.detectSyntax(language='Python') QTest.keyClicks(self.qpart, "def main():") QTest.keyClick(self.qpart, Qt.Key_Enter) self.assertEqual(self.qpart.cursorPosition, (1, 4)) QTest.keyClicks(self.qpart, "return 7") QTest.keyClick(self.qpart, Qt.Key_Enter) self.assertEqual(self.qpart.cursorPosition, (2, 0))
def test_down_selects_first(self): self.qpart.text = 'aaaa\nbbbb\ncccX\ndddd\ncccY' while self.app.hasPendingEvents(): self.app.processEvents() QTest.keyClicks(self.qpart, "ccc") QTest.keyClick(self.qpart, Qt.Key_Down) QTest.keyClick(self.qpart, Qt.Key_Enter) QTest.keyClick(self.qpart, Qt.Key_Enter) self.assertEqual(self.qpart.text, 'cccX\naaaa\nbbbb\ncccX\ndddd\ncccY')
def test_reset_by_edit(self): self.qpart.show() self.qpart.text = 'abcd\nef\nghkl\nmnop' QTest.keyClick(self.qpart, Qt.Key_Right) QTest.keyClick(self.qpart, Qt.Key_Right, Qt.AltModifier | Qt.ShiftModifier) QTest.keyClick(self.qpart, Qt.Key_Right, Qt.AltModifier | Qt.ShiftModifier) QTest.keyClick(self.qpart, Qt.Key_Down, Qt.AltModifier | Qt.ShiftModifier) QTest.keyClick(self.qpart, Qt.Key_Down, Qt.AltModifier | Qt.ShiftModifier) QTest.keyClicks(self.qpart, 'x') QTest.keyClick(self.qpart, Qt.Key_Backspace) self.assertEqual(self.qpart.text, 'abcd\nef\nghkl\nmnop')
def paramWidgetClose(self): aw = QApplication.activeWindow() mb = QApplication.activeModalWidget() self.assertTrue(isinstance(mb, AttributeDlg)) QTest.keyClicks(mb.ui.nameLineEdit, self.aname) self.assertEqual(mb.ui.nameLineEdit.text(),self.aname) QTest.keyClicks(mb.ui.valueLineEdit, self.avalue) self.assertEqual(mb.ui.valueLineEdit.text(),self.avalue) mb.reject()
def test_tab_completes(self): self.qpart.text = 'aaaaa\naaaaaXXXXX\n' base._processPendingEvents(self.app) self.qpart.cursorPosition = (2, 0) QTest.keyClicks(self.qpart, "aaa") QTest.keyClick(self.qpart, Qt.Key_Tab) self.assertEqual(self.qpart.text, 'aaaaa\naaaaaXXXXX\naaaaa') QTest.keyClick(self.qpart, Qt.Key_Tab) self.assertEqual(self.qpart.text, 'aaaaa\naaaaaXXXXX\naaaaaXXXXX')
def test_down_selects_first(self): self.qpart.text = 'aaaa\nbbbb\ncccX\ndddd\ncccY' while QApplication.hasPendingEvents(): QApplication.processEvents() QTest.keyClicks(self.qpart, "ccc") QTest.keyClick(self.qpart, Qt.Key_Down) QTest.keyClick(self.qpart, Qt.Key_Enter) QTest.keyClick(self.qpart, Qt.Key_Enter) self.assertEqual(self.qpart.text, 'cccX\naaaa\nbbbb\ncccX\ndddd\ncccY')
def test_getting_the_entered_tags(self): tw = TagsWidget() QTest.keyClicks(tw.lineEdit, 'lourd') tw.addTag() expected = [ t.id for t in Session.query(Tag.id).filter(Tag.name == u'lourd').all() ] self.assertEqual(tw.tags(), expected)
def test_implicit_fair_group(self): App = self.__class__._App self.set_form_to_zero() App.DNEOptionsWindow.fairvgroup.setChecked(1) self.assertTrue(App.DNEOptionsWindow.fairvgroup.isChecked()) QTest.keyClicks(App.DNEOptionsWindow.dneiteration, "10") self.assertEqual(App.DNEOptionsWindow.dneiteration.text(), "10") QTest.keyClicks(App.DNEOptionsWindow.dnestepsize, "0.5") self.assertEqual(App.DNEOptionsWindow.dnestepsize.text(), "0.5")
def ttest_constructor_accept_setFocus(self): fun = sys._getframe().f_code.co_name print "Run: %s.%s() " % (self.__class__.__name__, fun) parent = None form = DataSourceDlg(parent) form.show() self.assertEqual(form.dbParam, {}) self.assertEqual(form.node, None) self.assertEqual(form.root, None) self.assertEqual(form.view, None) self.assertEqual(form.subItems, [ 'record', 'doc', 'device', 'database', 'query', 'datasource', 'result' ]) self.assertTrue(isinstance(form.ui, Ui_DataSourceDlg)) self.assertTrue(isinstance(form, NodeDlg)) self.assertEqual(form.externalApply, None) self.assertEqual(form.externalDSLink, None) self.assertEqual(form.replaceText, super(DataSourceDlg, form).replaceText) self.assertEqual(form.removeElement, super(DataSourceDlg, form).removeElement) self.assertEqual(form.replaceElement, super(DataSourceDlg, form).replaceElement) self.assertTrue( form.appendElement is not super(DataSourceDlg, form).appendElement) self.assertEqual(form.reset, super(DataSourceDlg, form).reset) form.ui.setupUi(form) form.show() self.assertTrue(form.ui.nameLineEdit.text().isEmpty()) self.assertEqual(form.ui.typeComboBox.currentText(), "CLIENT") self.assertTrue(form.ui.applyPushButton.isEnabled()) self.assertTrue(form.ui.resetPushButton.isEnabled()) name = "myname" nType = "NXEntry" QTest.keyClicks(form.ui.nameLineEdit, name) self.assertEqual(form.ui.nameLineEdit.text(), name) self.assertTrue(not form.ui.nameLineEdit.text().isEmpty()) QTest.mouseClick(form.ui.applyPushButton, Qt.LeftButton) self.assertEqual(form.result(), 0) form.ui.savePushButton = FocusedWidget() self.assertTrue(not form.ui.savePushButton.focused) form.setSaveFocus() self.assertTrue(form.ui.savePushButton.focused)
def test_down_selects_second(self): self.qpart.text = 'aaaa\nbbbb\ncccX\ndddd\ncccY' base._processPendingEvents(self.app) QTest.keyClicks(self.qpart, "ccc") QTest.keyClick(self.qpart, Qt.Key_Down) QTest.keyClick(self.qpart, Qt.Key_Down) QTest.keyClick(self.qpart, Qt.Key_Enter) QTest.keyClick(self.qpart, Qt.Key_Enter) self.assertEqual(self.qpart.text, 'cccY\naaaa\nbbbb\ncccX\ndddd\ncccY')
def test_tab_completes(self): self.qpart.text = 'aaaaa\naaaaaXXXXX\n' while QApplication.hasPendingEvents(): QApplication.processEvents() self.qpart.cursorPosition = (2, 0) QTest.keyClicks(self.qpart, "aaa") QTest.keyClick(self.qpart, Qt.Key_Tab) self.assertEqual(self.qpart.text, 'aaaaa\naaaaaXXXXX\naaaaa') QTest.keyClick(self.qpart, Qt.Key_Tab) self.assertEqual(self.qpart.text, 'aaaaa\naaaaaXXXXX\naaaaaXXXXX')
def test_outlier_group(self): App = self.__class__._App self.set_form_to_zero() App.DNEOptionsWindow.outliervgroup.setChecked(1) self.assertTrue(App.DNEOptionsWindow.outliervgroup.isChecked()) QTest.mouseClick(App.DNEOptionsWindow.dneoutliertype2, Qt.LeftButton, pos=QPoint(2, App.DNEOptionsWindow.dneoutliertype2.height()/2)) self.assertTrue(App.DNEOptionsWindow.dneoutliertype2.isChecked()) self.assertFalse(App.DNEOptionsWindow.dneoutliertype1.isChecked()) QTest.keyClicks(App.DNEOptionsWindow.dneoutlierval, "10.0") self.assertEqual(App.DNEOptionsWindow.dneoutlierval.text(), "10.0")
def click(key): clockBefore = time.clock() if isinstance(key, basestring): QTest.keyClicks(q, key) else: QTest.keyClick(q, key) while app.hasPendingEvents(): app.processEvents() clockAfter = time.clock() ms = int((clockAfter - clockBefore) * 1000) clickTimes[ms] = clickTimes.get(ms, 0) + 1
def test_interpolation_parameters(self): QTest.mouseClick(self.interpolation_widget.activate_cb, QtCore.Qt.LeftButton, pos=QtCore.QPoint(2,self.interpolation_widget.activate_cb.height()/2)) QTest.mouseClick(self.interpolation_widget.spline_interpolation_rb, QtCore.Qt.LeftButton, pos=QtCore.QPoint(2,self.interpolation_widget.spline_interpolation_rb.height()/2)) QtGui.QApplication.processEvents() self.interpolation_widget.spline_interpolation_cutoff_txt.setText('') QTest.keyClicks(self.interpolation_widget.spline_interpolation_cutoff_txt, '0.7') QTest.keyClick(self.interpolation_widget.spline_interpolation_cutoff_txt, QtCore.Qt.Key_Enter) QtGui.QApplication.processEvents() q, sq = self.data.sq_spectrum.data self.assertAlmostEqual(np.sum(sq[np.where(q<0.6)]),0)
def keyClicks(self, text, modifiers=Qt.NoModifier, widget=None): """Alias for ``QTest.keyClicks``. If widget is none - focused widget will be keyclicked""" if widget is None: widget = self.app.focusWidget() if widget is None: widget = core.mainWindow() assert widget is not None QTest.keyClicks(widget, text, modifiers)
def test_limeJuiceLineEdit(self): '''Test the lime juice line edit. Testing the minimum and maximum is left as an exercise for the reader. ''' self.setFormToZero() # Clear and then type "3.5" into the lineEdit widget self.form.ui.limeJuiceLineEdit.clear() QTest.keyClicks(self.form.ui.limeJuiceLineEdit, "3.5") # Push OK with the left mouse button okWidget = self.form.ui.buttonBox.button(self.form.ui.buttonBox.Ok) QTest.mouseClick(okWidget, Qt.LeftButton) self.assertEqual(self.form.getJiggers(), 3.5)
def test_limeJuiceLineEdit(self): '''Test the lime juice line edit. Testing the minimum and maximum is left as an exercise for the reader. ''' self.setFormToZero() # Clear and then type "3.5" into the lineEdit widget self.form.ui.limeJuiceLineEdit.clear() QTest.keyClicks(self.form.ui.limeJuiceLineEdit, "3.5") # Push OK with the left mouse button okWidget = self.form.ui.buttonBox.button(self.form.ui.buttonBox.Ok) QTest.mouseClick(okWidget, Qt.LeftButton) self.assertEqual(self.form.jiggers, 3.5)
def test_pyconsole_insert_ascii(self): """ Can ASCII text be sent to the Python console from the input widget? :return: """ self.form.pyconsole_output.clear() console_pre_txt = self.form.pyconsole_output.toPlainText() test_str = ascii_letters + digits + punctuation QTest.keyClicks(self.form.pyconsole_output, "i = '{0}'".format(test_str)) QTest.keyClick(self.form.pyconsole_output, Qt.Key_Return) console_post_txt = self.form.pyconsole_output.toPlainText() self.assertNotEqual(console_pre_txt, console_post_txt) self.assertTrue(test_str in console_post_txt)
def test_completion_enabled(self): self._assertNotVisible() self.qpart.completionEnabled = True QTest.keyClicks(self.qpart, "comple") self._assertVisible() for i in range(len('comple')): QTest.keyClick(self.qpart, Qt.Key_Backspace) self._assertNotVisible() self.qpart.completionEnabled = False QTest.keyClicks(self.qpart, "comple") self._assertNotVisible()
def test_constructor_accept_chars(self): fun = sys._getframe().f_code.co_name print "Run: %s.%s() " % (self.__class__.__name__, fun) chars = '!"#$%&\'()*+,/;<=>?@[\\]^`{|}~' for ch in chars: form = AttributeDlg() form.show() self.assertEqual(form.name, '') self.assertEqual(form.value, '') self.assertTrue(form.ui.nameLineEdit.text().isEmpty()) self.assertTrue(form.ui.valueLineEdit.text().isEmpty()) self.assertTrue( not form.ui.buttonBox.button(form.ui.buttonBox.Ok).isEnabled()) self.assertTrue( form.ui.buttonBox.button(form.ui.buttonBox.Cancel).isEnabled()) name = "myname" value = "myentry" pos = self.__rnd.randint(0, len(name) - 1) name = name[:pos] + ch + name[pos:] QTest.keyClicks(form.ui.nameLineEdit, name) QTest.keyClicks(form.ui.valueLineEdit, value) self.assertEqual(form.ui.nameLineEdit.text(), name) self.assertEqual(form.ui.valueLineEdit.text(), value) self.assertTrue(not form.ui.nameLineEdit.text().isEmpty()) self.assertTrue(not form.ui.valueLineEdit.text().isEmpty()) self.assertTrue( form.ui.buttonBox.button(form.ui.buttonBox.Ok).isEnabled()) self.assertTrue( form.ui.buttonBox.button(form.ui.buttonBox.Cancel).isEnabled()) QTimer.singleShot(0, self.checkMessageBox) okWidget = form.ui.buttonBox.button(form.ui.buttonBox.Ok) QTest.mouseClick(okWidget, Qt.LeftButton) # self.assertEqual(self.title, 'Character Error') self.assertEqual(self.text, 'Name contains one of forbidden characters') self.assertEqual(form.name, '') self.assertEqual(form.value, '') self.assertEqual(form.result(), 0)
def test_manual(self): self._window.show() self.qpart.text = 'aaaaa\naaaaaXXXXX\n' base._processPendingEvents(self.app) self.qpart.cursorPosition = (2, 0) QTest.keyClicks(self.qpart, "a") QTest.keyPress(self.qpart, Qt.Key_Space, Qt.ControlModifier, 100) QTest.keyClicks(self.qpart, "a") QTest.keyClick(self.qpart, Qt.Key_Tab) self.assertEqual(self.qpart.text, 'aaaaa\naaaaaXXXXX\naaaaa')