def test_cycling(self): text = 'e den ' alt_text = 'i den ' QTest.keyClicks(self.editor, text) self.editor.handle_mode_toggle() # wordcheck mode cur = self.editor.textCursor() default_col = cur.charFormat().background().color().getRgb() cur.setPosition(0) self.editor.setTextCursor(cur) selection = self.editor.extraSelections()[0] col0 = selection.format.background().color().getRgb() QTest.keyClick(self.editor, Qt.Key_R) new_text = self.editor.toPlainText() selection = self.editor.extraSelections()[0] col1 = selection.format.background().color().getRgb() self.assertEqual(alt_text, new_text, msg="e to i") self.assertNotEqual(col1, default_col, msg="non-default color") self.assertNotEqual(col1, col0, msg="changed color") QTest.keyClick(self.editor, Qt.Key_E) new_text = self.editor.toPlainText() selection = self.editor.extraSelections()[0] col2 = selection.format.background().color().getRgb() self.assertEqual(text, new_text, msg="i to e") self.assertEqual(col2, col0, msg="back to same color")
def keyClick(self, widget, key, modifier=qt.Qt.NoModifier, delay=-1): """Simulate clicking a key. See QTest.keyClick for details. """ QTest.keyClick(widget, key, modifier, delay) self.qWait(20)
def test_word_replace_trigger(self): QTest.keyClicks(self.editor, 'i') self.assertEqual(self.editor.textCursor().block().text(), "i", msg="plain i stays i") self.editor.document().clear() QTest.keyClicks(self.editor, 'e') self.assertEqual(self.editor.textCursor().block().text(), "e", msg="plain e stays e") self.editor.document().clear() # for whatever reason, python puts e before i, so e is default. QTest.keyClicks(self.editor, 'i ') self.assertEqual(self.editor.textCursor().block().text(), "e ", msg="space bar coersion") self.editor.document().clear() QTest.keyClicks(self.editor, 'i') QTest.keyClick(self.editor, Qt.Key_Return) self.assertEqual(self.editor.textCursor().block().previous().text(), "e", msg="return btn coersion") self.editor.document().clear() QTest.keyClicks(self.editor, 'i/') self.assertEqual(self.editor.textCursor().block().text(), "e/", msg="slash coersion")
def testKeyEvent(self): widget = QLineEdit() key = Qt.Key_A eventFilter = KeyEventFilter(widget, QEvent.KeyPress, key) widget.installEventFilter(eventFilter) QTest.keyClick(widget, key) self.assert_(eventFilter.processed)
def test_typing(self): self.editor.handle_mode_toggle() QTest.keyClicks(self.editor, 'xza,.;') self.assertEqual(self.editor.textCursor().block().text(), ',.;,.;') self.editor.clear() QTest.keyClicks(self.editor, 'XZA<>:', modifier=Qt.ShiftModifier) self.assertEqual(self.editor.textCursor().block().text(), '<>:<>:') QTest.keyClick(self.editor, Qt.Key_Backspace, modifier=Qt.NoModifier) self.assertEqual(self.editor.textCursor().block().text(), '<>:<>')
def testKeyEvent(self): widget = QLineEdit() key = Qt.Key_A eventFilter = KeyEventFilter(widget, QEvent.KeyPress, key) widget.installEventFilter(eventFilter) QTest.keyClick(widget, key) self.assertTrue(eventFilter.processed)
def test_modify_edit(self, data_instance, form, new_value): target = new_value(data_instance.value) assert target != data_instance.value for w in (form.edit, form.otheredit): w.clear() QTest.keyClicks(w, str(target)) QTest.keyClick(w, Qt.Key_Enter) assert data_instance.value == form.edit.value() assert data_instance.value == form.otheredit.value() assert data_instance.value == target
def test_missing_word(self): text = 'jkljkl e den ' QTest.keyClicks(self.editor, text) self.editor.handle_mode_toggle() # wordcheck mode cur = self.editor.textCursor() cur.setPosition(0) self.editor.setTextCursor(cur) QTest.keyClick(self.editor, Qt.Key_U) new_text = self.editor.toPlainText() self.assertEqual(text, new_text)
def test_hot_word_replacement(self): # this test handles getting to "hi," from its default coersion to "hex" QTest.keyClicks(self.editor, 'hi, ') # coerced to "hex" self.editor.handle_mode_toggle() cur = self.editor.textCursor() cur.setPosition(3) self.editor.setTextCursor(cur) QTest.keyClick(self.editor, Qt.Key_Backspace, modifier=Qt.NoModifier) # "he| " (| = cursor) QTest.keyClick(self.editor, Qt.Key_U) self.assertEqual(self.editor.textCursor().block().text(), 'hi ')
def test_index_preservation(self): text = 'e den ' alt_text = 'i den ' QTest.keyClicks(self.editor, text) self.editor.handle_mode_toggle() # wordcheck mode cur = self.editor.textCursor() cur.setPosition(0) self.editor.setTextCursor(cur) QTest.keyClick(self.editor, Qt.Key_R) new_text = self.editor.toPlainText() self.assertEqual(alt_text, new_text, msg="e to i") # Move to other word and back. cur = self.editor.textCursor() cur.setPosition(4) self.editor.setTextCursor(cur) cur = self.editor.textCursor() cur.setPosition(0) self.editor.setTextCursor(cur) QTest.keyClick(self.editor, Qt.Key_R) QTest.keyClick(self.editor, Qt.Key_R) QTest.keyClick(self.editor, Qt.Key_R) new_text = self.editor.toPlainText() self.assertEqual(text, new_text, msg="i to e")
def test_basic(self): text = 'En ' QTest.keyClicks(self.editor, text) self.editor.handle_mode_toggle() # wordcheck mode cur = self.editor.textCursor() cur.setPosition(0) self.editor.setTextCursor(cur) QTest.keyClick(self.editor, Qt.Key_R) self.assertEqual(self.editor.toPlainText(), "In ", msg="upper case options maintained") QTest.keyClick(self.editor, Qt.Key_R) self.assertEqual(self.editor.toPlainText(), "en ", msg="lower case options maintained")
def test_move_up(self): QTest.keyClick(self.editor, Qt.Key_Return) QTest.keyClick(self.editor, Qt.Key_Return) self.editor.handle_mode_toggle() QTest.keyClick(self.editor, Qt.Key_K) QTest.keyClick(self.editor, Qt.Key_D) self.assertEqual(self.editor.textCursor().blockNumber(), 0) self.assertEqual(self.editor.toPlainText(), "\n\n", msg="text modified")
def test_move_down(self): QTest.keyClick(self.editor, Qt.Key_Return) QTest.keyClick(self.editor, Qt.Key_Return) start_cur = self.editor.textCursor() start_cur.setPosition(0) self.editor.setTextCursor(start_cur) self.editor.handle_mode_toggle() QTest.keyClick(self.editor, Qt.Key_F) QTest.keyClick(self.editor, Qt.Key_J) self.assertEqual(self.editor.textCursor().blockNumber(), 2) self.assertEqual(self.editor.toPlainText(), "\n\n", msg="text modified")
def test_move_left_then_right(self): QTest.keyClicks(self.editor, 'the box') self.editor.handle_mode_toggle() QTest.keyClick(self.editor, Qt.Key_S) QTest.keyClick(self.editor, Qt.Key_H) self.assertEqual(self.editor.textCursor().position(), 0, msg="move by word") QTest.keyClick(self.editor, Qt.Key_V) QTest.keyClick(self.editor, Qt.Key_M) self.assertEqual(self.editor.textCursor().position(), 2, msg="move by char") self.assertEqual(self.editor.toPlainText(), "the box", msg="text modified")
def test_move_right_then_left(self): QTest.keyClicks(self.editor, 'the box is') self.editor.handle_mode_toggle() start_cur = self.editor.textCursor() start_cur.setPosition(0) self.editor.setTextCursor(start_cur) QTest.keyClick(self.editor, Qt.Key_G) QTest.keyClick(self.editor, Qt.Key_L) self.assertEqual(self.editor.textCursor().position(), 8, msg="move by word") QTest.keyClick(self.editor, Qt.Key_C) QTest.keyClick(self.editor, Qt.Key_N) self.assertEqual(self.editor.textCursor().position(), 6, msg="move by char") self.assertEqual(self.editor.toPlainText(), "the box is", msg="text modified")
def test_btns(self): self.assertFalse(self.vd.ok_btn.isEnabled()) self.assertFalse(self.vd.ok_btn.isDefault()) self.assertTrue(self.vd.help_btn.isDefault()) QTest.keyClick(self.vd.line_edit, Qt.Key_X) self.assertTrue(self.vd.ok_btn.isEnabled()) self.assertTrue(self.vd.ok_btn.isDefault()) self.assertFalse(self.vd.help_btn.isDefault()) QTest.keyClick(self.vd.line_edit, Qt.Key_X) self.assertFalse(self.vd.ok_btn.isEnabled()) self.assertFalse(self.vd.ok_btn.isDefault()) self.assertTrue(self.vd.help_btn.isDefault()) QTest.keyClick(self.vd.line_edit, Qt.Key_X) self.assertTrue(self.vd.ok_btn.isEnabled()) self.assertTrue(self.vd.ok_btn.isDefault()) self.assertFalse(self.vd.help_btn.isDefault())
class TestBasic(unittest.TestCase): def setUp(self): class Data(HasQtlets): value = Integer(default_value=1, min=0, max=10) class Form(QWidget): def __init__(self, parent=None, data=None): super().__init__(parent) self.data = data self.edit = IntEdit("...") self.otheredit = IntEdit("???") # self.otheredit.setEnabled(False) self.button = QPushButton("Roll!") layout = QVBoxLayout() for w in [self.edit, self.otheredit, self.button]: layout.addWidget(w) self.setLayout(layout) data.link_widget(self.edit, "value") data.link_widget(self.otheredit, "value") self.button.clicked.connect(self.on_btn_click) self.setWindowTitle("Directional connection") def on_btn_click(self): #print("Roll!!") # this is done in the calling thread. # We're not exploiting Qt's queued events in this direction self.data.value = randint(0, 10) d = Data(value=3) form = Form(data=d) self.form = form self.data = d def test_external(self): self.data.value += 1 self.assertEqual(self.data.value, self.form.edit.value()) self.assertEqual(self.data.value, self.form.otheredit.value()) def test_roll(self): old = self.data.value while self.data.value == old: QTest.mouseClick(self.form.button, Qt.LeftButton) self.assertNotEqual(old, self.data.value) self.assertEqual(self.data.value, self.form.edit.value()) self.assertEqual(self.data.value, self.form.otheredit.value()) def test_modify_edit(self): while (target := randint(0, 10)) == self.data.value: pass self.assertNotEqual(target, self.data.value) for w in (self.form.edit, self.form.otheredit): w.clear() QTest.keyClicks(w, str(target)) QTest.keyClick(w, Qt.Key_Enter) self.assertEqual(target, self.form.edit.value()) self.assertEqual(target, self.form.otheredit.value()) self.assertEqual(target, self.data.value)
def test_ok(self): # Relies on default buttons clickable via Enter QTest.keyClick(self.vd.line_edit, Qt.Key_X) QTest.keyClick(self.vd.line_edit, Qt.Key_Enter) self.assertTrue(self.vd.isHidden()) self.assertEqual(self.label.text(), 'x')