tests/auto/qlineedit/tst_qlineedit.cpp
branchGCC_SURGE
changeset 31 5daf16870df6
parent 30 5dc02b23752f
child 37 758a864f9613
--- a/tests/auto/qlineedit/tst_qlineedit.cpp	Mon Jun 21 22:38:13 2010 +0100
+++ b/tests/auto/qlineedit/tst_qlineedit.cpp	Thu Jul 22 16:41:55 2010 +0100
@@ -271,8 +271,16 @@
     void taskQTBUG_4401_enterKeyClearsPassword();
     void taskQTBUG_4679_moveToStartEndOfBlock();
     void taskQTBUG_4679_selectToStartEndOfBlock();
+#ifndef QT_NO_CONTEXTMENU
+    void taskQTBUG_7902_contextMenuCrash();
+#endif
     void taskQTBUG_7395_readOnlyShortcut();
 
+#ifdef QT3_SUPPORT
+    void validateAndSet_data();
+    void validateAndSet();
+#endif
+
 protected slots:
 #ifdef QT3_SUPPORT
     void lostFocus();
@@ -1488,6 +1496,34 @@
 {
     editingFinished();
 }
+
+void tst_QLineEdit::validateAndSet_data()
+{
+    QTest::addColumn<QString>("newText");
+    QTest::addColumn<int>("newPos");
+    QTest::addColumn<int>("newMarkAnchor");
+    QTest::addColumn<int>("newMarkDrag");
+
+    QTest::newRow("1") << QString("Hello World") << 3 << 3 << 5;
+    QTest::newRow("2") << QString("Hello World") << 5 << 3 << 5;
+}
+
+void tst_QLineEdit::validateAndSet()
+{
+    QFETCH(QString, newText);
+    QFETCH(int, newPos);
+    QFETCH(int, newMarkAnchor);
+    QFETCH(int, newMarkDrag);
+
+    QLineEdit e;
+    e.validateAndSet(newText, newPos, newMarkAnchor, newMarkDrag);
+    QCOMPARE(e.text(), newText);
+    QCOMPARE(e.cursorPosition(), newPos);
+    QCOMPARE(e.selectedText(), newText.mid(newMarkAnchor, newMarkDrag-newMarkAnchor));
+}
+
+
+
 #endif
 void tst_QLineEdit::editingFinished()
 {
@@ -3637,6 +3673,26 @@
 #endif // Q_OS_MAC
 }
 
+#ifndef QT_NO_CONTEXTMENU
+void tst_QLineEdit::taskQTBUG_7902_contextMenuCrash()
+{
+    // Would pass before the associated commit, but left as a guard.
+    QLineEdit *w = new QLineEdit;
+    w->show();
+    QTest::qWaitForWindowShown(w);
+
+    QTimer ti;
+    w->connect(&ti, SIGNAL(timeout()), w, SLOT(deleteLater()));
+    ti.start(200);
+
+    QContextMenuEvent *cme = new QContextMenuEvent(QContextMenuEvent::Mouse, w->rect().center());
+    qApp->postEvent(w, cme);
+
+    QTest::qWait(300);
+    // No crash, it's allright.
+}
+#endif
+
 void tst_QLineEdit::taskQTBUG_7395_readOnlyShortcut()
 {
     //ReadOnly QLineEdit should not intercept shortcut.