summaryrefslogtreecommitdiffstats
path: root/tests/auto/q3combobox/tst_q3combobox.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tests/auto/q3combobox/tst_q3combobox.cpp')
-rw-r--r--tests/auto/q3combobox/tst_q3combobox.cpp1041
1 files changed, 1041 insertions, 0 deletions
diff --git a/tests/auto/q3combobox/tst_q3combobox.cpp b/tests/auto/q3combobox/tst_q3combobox.cpp
new file mode 100644
index 0000000..f0a6b1c
--- /dev/null
+++ b/tests/auto/q3combobox/tst_q3combobox.cpp
@@ -0,0 +1,1041 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: Qt Software Information (qt-info@nokia.com)
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the either Technology Preview License Agreement or the
+** Beta Release License Agreement.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain
+** additional rights. These rights are described in the Nokia Qt LGPL
+** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
+** package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you are unsure which license is appropriate for your use, please
+** contact the sales department at qt-sales@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+
+#include <QtTest/QtTest>
+#include <q3combobox.h>
+#include <q3listbox.h>
+#include <qlineedit.h>
+#include <QValidator>
+
+class tst_Q3ComboBox : public QObject
+{
+ Q_OBJECT
+
+public slots:
+ void initTestCase();
+ void cleanupTestCase();
+ void init();
+ void cleanup();
+
+private slots:
+ void q3combobox_data();
+ void q3combobox();
+ void autoCompletion_data();
+ void autoCompletion();
+ void autoResize_data();
+ void autoResize();
+ void changeItem_data();
+ void changeItem();
+ void clear_data();
+ void clear();
+ void clearEdit_data();
+ void clearEdit();
+ void count_data();
+ void count();
+ void currentItem_data();
+ void currentItem();
+ void currentText_data();
+ void currentText();
+ void duplicatesEnabled_data();
+ void duplicatesEnabled();
+ void editable_data();
+ void editable();
+ void insertItem_data();
+ void insertItem();
+ void insertStringList_data();
+ void insertStringList();
+ void insertStrList_data();
+ void insertStrList();
+ void maxCount_data();
+ void maxCount();
+ void pixmap();
+ void removeItem_data();
+ void removeItem();
+ void setValidator();
+ void keyPressEvent_data();
+ void keyPressEvent();
+ void wheelEvent_data();
+ void wheelEvent();
+
+ void task231724_clear();
+};
+
+// Subclass that exposes the protected functions.
+class SubQ3ComboBox : public Q3ComboBox
+{
+public:
+ void call_activated(int index)
+ { return SubQ3ComboBox::activated(index); }
+
+ void call_activated(QString const& str)
+ { return SubQ3ComboBox::activated(str); }
+
+ void call_focusInEvent(QFocusEvent* e)
+ { return SubQ3ComboBox::focusInEvent(e); }
+
+ void call_focusOutEvent(QFocusEvent* e)
+ { return SubQ3ComboBox::focusOutEvent(e); }
+
+ void call_highlighted(QString const& str)
+ { return SubQ3ComboBox::highlighted(str); }
+
+ void call_highlighted(int index)
+ { return SubQ3ComboBox::highlighted(index); }
+
+ void call_keyPressEvent(QKeyEvent* e)
+ { return SubQ3ComboBox::keyPressEvent(e); }
+
+ void call_mouseDoubleClickEvent(QMouseEvent* e)
+ { return SubQ3ComboBox::mouseDoubleClickEvent(e); }
+
+ void call_mouseMoveEvent(QMouseEvent* e)
+ { return SubQ3ComboBox::mouseMoveEvent(e); }
+
+ void call_mousePressEvent(QMouseEvent* e)
+ { return SubQ3ComboBox::mousePressEvent(e); }
+
+ void call_mouseReleaseEvent(QMouseEvent* e)
+ { return SubQ3ComboBox::mouseReleaseEvent(e); }
+
+ void call_paintEvent(QPaintEvent* e)
+ { return SubQ3ComboBox::paintEvent(e); }
+
+ void call_resizeEvent(QResizeEvent* e)
+ { return SubQ3ComboBox::resizeEvent(e); }
+
+ void call_styleChange(QStyle& style)
+ { return SubQ3ComboBox::styleChange(style); }
+
+ void call_textChanged(QString const& str)
+ { return SubQ3ComboBox::textChanged(str); }
+
+ void call_updateMask()
+ { return SubQ3ComboBox::updateMask(); }
+
+ void call_wheelEvent(QWheelEvent* e)
+ { return SubQ3ComboBox::wheelEvent(e); }
+};
+
+// This will be called before the first test function is executed.
+// It is only called once.
+void tst_Q3ComboBox::initTestCase()
+{
+}
+
+// This will be called after the last test function is executed.
+// It is only called once.
+void tst_Q3ComboBox::cleanupTestCase()
+{
+}
+
+// This will be called before each test function is executed.
+void tst_Q3ComboBox::init()
+{
+}
+
+// This will be called after every test function.
+void tst_Q3ComboBox::cleanup()
+{
+}
+
+void tst_Q3ComboBox::q3combobox_data()
+{
+}
+
+void tst_Q3ComboBox::q3combobox()
+{
+ SubQ3ComboBox box;
+ box.autoCompletion();
+ box.autoResize();
+ box.changeItem(QString(), 0);
+ box.changeItem(QPixmap(), 0);
+ box.changeItem(QPixmap(), QString(), 0);
+ box.clear();
+ box.clearEdit();
+ box.clearValidator();
+ box.count();
+ box.currentItem();
+ box.currentText();
+ box.duplicatesEnabled();
+ box.editable();
+ box.hide();
+ box.insertionPolicy();
+ box.insertItem(QString());
+ box.insertItem(QPixmap(), -1);
+ box.insertItem(QPixmap(), QString(), -1);
+ box.insertStringList(QStringList());
+ static const char* items[] = { "red", "green", "blue", 0 };
+ box.insertStrList(items);
+ box.lineEdit();
+ box.listBox();
+ box.maxCount();
+ box.pixmap(0);
+ box.popup();
+ box.removeItem(0);
+ box.setAutoCompletion(false);
+ box.setAutoResize(false);
+ box.setCurrentItem(0);
+ box.setCurrentText(QString());
+ box.setDuplicatesEnabled(true);
+ box.setEditable(false);
+ box.setEditText(false);
+ box.setEnabled(false);
+ box.setFont(QFont());
+ box.setInsertionPolicy(Q3ComboBox::NoInsertion);
+ box.setLineEdit(0);
+ //box.setListBox(0);
+ box.setMaxCount(0);
+ box.setPalette(QPalette());
+ box.setSizeLimit(0);
+ box.setValidator(0);
+ box.sizeHint();
+ box.sizeLimit();
+ box.text(0);
+ box.validator();
+ box.call_activated(0);
+ box.call_activated(QString());
+ box.call_highlighted(0);
+ box.call_highlighted(QString());
+ box.call_textChanged(QString());
+ box.call_updateMask();
+}
+
+void tst_Q3ComboBox::autoCompletion_data()
+{
+ QTest::addColumn<bool>("autoCompletion");
+ QTest::newRow("false") << false;
+ QTest::newRow("true") << true;
+}
+
+// public bool autoCompletion() const
+void tst_Q3ComboBox::autoCompletion()
+{
+ QFETCH(bool, autoCompletion);
+
+ SubQ3ComboBox box;
+
+ QSignalSpy spy0(&box, SIGNAL(activated(int)));
+ QSignalSpy spy1(&box, SIGNAL(activated(QString)));
+ QSignalSpy spy2(&box, SIGNAL(highlighted(int)));
+ QSignalSpy spy3(&box, SIGNAL(highlighted(QString)));
+ QSignalSpy spy4(&box, SIGNAL(textChanged(QString)));
+
+ box.setAutoCompletion(autoCompletion);
+
+ QCOMPARE(spy0.count(), 0);
+ QCOMPARE(spy1.count(), 0);
+ QCOMPARE(spy2.count(), 0);
+ QCOMPARE(spy3.count(), 0);
+ QCOMPARE(spy4.count(), 0);
+
+ QCOMPARE(box.autoCompletion(), autoCompletion);
+}
+
+void tst_Q3ComboBox::autoResize_data()
+{
+ QTest::addColumn<bool>("autoResize");
+ QTest::newRow("false") << false;
+ QTest::newRow("true") << true;
+}
+
+// public bool autoResize() const
+void tst_Q3ComboBox::autoResize()
+{
+ QFETCH(bool, autoResize);
+
+ SubQ3ComboBox box;
+
+ QSignalSpy spy0(&box, SIGNAL(activated(int)));
+ QSignalSpy spy1(&box, SIGNAL(activated(QString)));
+ QSignalSpy spy2(&box, SIGNAL(highlighted(int)));
+ QSignalSpy spy3(&box, SIGNAL(highlighted(QString)));
+ QSignalSpy spy4(&box, SIGNAL(textChanged(QString)));
+
+ QSize oldSize = box.size();
+ box.setAutoResize(autoResize);
+
+ QCOMPARE(spy0.count(), 0);
+ QCOMPARE(spy1.count(), 0);
+ QCOMPARE(spy2.count(), 0);
+ QCOMPARE(spy3.count(), 0);
+ QCOMPARE(spy4.count(), 0);
+ QCOMPARE(box.autoResize(), autoResize);
+
+ if (autoResize)
+ QVERIFY(oldSize != box.size());
+ else
+ QCOMPARE(oldSize, box.size());
+}
+
+void tst_Q3ComboBox::changeItem_data()
+{
+ QTest::addColumn<QPixmap>("pixmap");
+ QTest::addColumn<QString>("text");
+ QTest::addColumn<int>("index");
+ QTest::newRow("null") << QPixmap() << QString("foo") << 0;
+}
+
+// public void changeItem(QPixmap const& pixmap, QString const& text, int index)
+void tst_Q3ComboBox::changeItem()
+{
+ QFETCH(QPixmap, pixmap);
+ QFETCH(QString, text);
+ QFETCH(int, index);
+
+ SubQ3ComboBox box;
+ box.insertItem("stub");
+
+ QSignalSpy spy0(&box, SIGNAL(activated(int)));
+ QSignalSpy spy1(&box, SIGNAL(activated(QString)));
+ QSignalSpy spy2(&box, SIGNAL(highlighted(int)));
+ QSignalSpy spy3(&box, SIGNAL(highlighted(QString)));
+ QSignalSpy spy4(&box, SIGNAL(textChanged(QString)));
+
+ box.changeItem(pixmap, text, index);
+
+ QCOMPARE(spy0.count(), 0);
+ QCOMPARE(spy1.count(), 0);
+ QCOMPARE(spy2.count(), box.listBox() ? 1 : 0);
+ QCOMPARE(spy3.count(), box.listBox() ? 1 : 0);
+ QCOMPARE(spy4.count(), 0);
+
+ QCOMPARE(box.text(index), text);
+ if (pixmap.isNull()) {
+ QVERIFY(!box.pixmap(index) || box.pixmap(index)->isNull());
+ } else {
+ QCOMPARE(*box.pixmap(index), pixmap);
+ }
+}
+
+void tst_Q3ComboBox::clear_data()
+{
+ QTest::addColumn<QStringList>("list");
+ QTest::newRow("null") << QStringList();
+ QTest::newRow("1") << (QStringList() << "x");
+ QTest::newRow("2") << (QStringList() << "x" << "y");
+ QTest::newRow("3") << (QStringList() << "x" << "y" << "z");
+}
+
+// public void clear()
+void tst_Q3ComboBox::clear()
+{
+ QFETCH(QStringList, list);
+
+ SubQ3ComboBox box;
+ box.insertStringList(list);
+
+ QSignalSpy spy0(&box, SIGNAL(activated(int)));
+ QSignalSpy spy1(&box, SIGNAL(activated(QString)));
+ QSignalSpy spy2(&box, SIGNAL(highlighted(int)));
+ QSignalSpy spy3(&box, SIGNAL(highlighted(QString)));
+ QSignalSpy spy4(&box, SIGNAL(textChanged(QString)));
+
+ box.clear();
+ QCOMPARE(box.count(), 0);
+
+ QCOMPARE(spy0.count(), 0);
+ QCOMPARE(spy1.count(), 0);
+ QCOMPARE(spy2.count(), 0);
+ QCOMPARE(spy3.count(), 0);
+ QCOMPARE(spy4.count(), 0);
+}
+
+void tst_Q3ComboBox::clearEdit_data()
+{
+ QTest::addColumn<bool>("editable");
+ QTest::addColumn<QStringList>("list");
+ QTest::newRow("non-editable") << false << QStringList();
+ QTest::newRow("editable-empty") << true << QStringList();
+ QTest::newRow("editable-3") << true << (QStringList() << "x" << "y" << "z");
+}
+
+// public void clearEdit()
+void tst_Q3ComboBox::clearEdit()
+{
+ QFETCH(QStringList, list);
+ QFETCH(bool, editable);
+
+ SubQ3ComboBox box;
+ box.setEditable(editable);
+ box.insertStringList(list);
+
+ QSignalSpy spy0(&box, SIGNAL(activated(int)));
+ QSignalSpy spy1(&box, SIGNAL(activated(QString)));
+ QSignalSpy spy2(&box, SIGNAL(highlighted(int)));
+ QSignalSpy spy3(&box, SIGNAL(highlighted(QString)));
+ QSignalSpy spy4(&box, SIGNAL(textChanged(QString)));
+
+ box.clearEdit();
+ QCOMPARE(box.count(), list.count());
+ for (int i = 0; i < list.count(); ++i)
+ QCOMPARE(box.text(i), list.at(i));
+ if (editable) {
+ QVERIFY(box.lineEdit());
+ QVERIFY(box.lineEdit()->text().isEmpty());
+ }
+ QCOMPARE(spy0.count(), 0);
+ QCOMPARE(spy1.count(), 0);
+ QCOMPARE(spy2.count(), 0);
+ QCOMPARE(spy3.count(), 0);
+ QCOMPARE(spy4.count(), (editable && !list.isEmpty())? 1 : 0);
+}
+
+void tst_Q3ComboBox::count_data()
+{
+ QTest::addColumn<bool>("useListBox");
+ QTest::addColumn<QStringList>("list");
+ QTest::newRow("popup-empty") << false << QStringList();
+ QTest::newRow("popup-3") << false << (QStringList() << "x" << "y" << "z");
+ QTest::newRow("listbox-empty") << true << QStringList();
+ QTest::newRow("listbox-3") << true << (QStringList() << "x" << "y" << "z");
+}
+
+// public int count() const
+void tst_Q3ComboBox::count()
+{
+ QFETCH(bool, useListBox);
+ QFETCH(QStringList, list);
+
+ SubQ3ComboBox box;
+ box.insertStringList(list);
+ Q3ListBox *listBox = new Q3ListBox(&box);
+ if (useListBox) {
+ box.setListBox(listBox);
+ QCOMPARE(box.listBox(), listBox);
+ QCOMPARE(box.count(), 0);
+ listBox->insertStringList(list);
+ QCOMPARE(box.count(), list.count());
+ }
+ QSignalSpy spy0(&box, SIGNAL(activated(int)));
+ QSignalSpy spy1(&box, SIGNAL(activated(QString)));
+ QSignalSpy spy2(&box, SIGNAL(highlighted(int)));
+ QSignalSpy spy3(&box, SIGNAL(highlighted(QString)));
+ QSignalSpy spy4(&box, SIGNAL(textChanged(QString)));
+
+ QCOMPARE(box.count(), list.count());
+
+ QCOMPARE(spy0.count(), 0);
+ QCOMPARE(spy1.count(), 0);
+ QCOMPARE(spy2.count(), 0);
+ QCOMPARE(spy3.count(), 0);
+ QCOMPARE(spy4.count(), 0);
+}
+
+void tst_Q3ComboBox::currentItem_data()
+{
+ QTest::addColumn<QStringList>("list");
+ QTest::addColumn<int>("setCurrentItem");
+ QTest::addColumn<int>("currentItem");
+ QTest::addColumn<bool>("signal");
+ QStringList list = (QStringList() << "x" << "y" << "z");
+ QTest::newRow("3 0,0") << list << 0 << 0 << false;
+ QTest::newRow("3 1,1") << list << 1 << 1 << true;
+ QTest::newRow("3 2,2") << list << 2 << 2 << true;
+ QTest::newRow("3 3,0") << list << 3 << 0 << false;
+ QTest::newRow("- 1,0") << QStringList() << 1 << 0 << false;
+}
+
+// public int currentItem() const
+void tst_Q3ComboBox::currentItem()
+{
+ QFETCH(QStringList, list);
+ QFETCH(int, setCurrentItem);
+ QFETCH(int, currentItem);
+ QFETCH(bool, signal);
+
+ SubQ3ComboBox box;
+ box.insertStringList(list);
+
+ QSignalSpy spy0(&box, SIGNAL(activated(int)));
+ QSignalSpy spy1(&box, SIGNAL(activated(QString)));
+ QSignalSpy spy2(&box, SIGNAL(highlighted(int)));
+ QSignalSpy spy3(&box, SIGNAL(highlighted(QString)));
+ QSignalSpy spy4(&box, SIGNAL(textChanged(QString)));
+
+ box.setCurrentItem(setCurrentItem);
+ QCOMPARE(box.currentItem(), currentItem);
+
+ QCOMPARE(spy0.count(), 0);
+ QCOMPARE(spy1.count(), 0);
+ QCOMPARE(spy2.count(), signal ? 1 : 0);
+ QCOMPARE(spy3.count(), signal ? 1 : 0);
+ QCOMPARE(spy4.count(), 0);
+}
+
+void tst_Q3ComboBox::currentText_data()
+{
+ QTest::addColumn<QStringList>("list");
+ QTest::addColumn<int>("currentItem");
+ QTest::addColumn<QString>("currentText");
+ QTest::addColumn<int>("expectedCurrentItem");
+ QTest::addColumn<bool>("signal");
+ QTest::newRow("null") << QStringList() << 0 << QString("foo") << 0 << false;
+ QStringList list = (QStringList() << "x" << "y" << "z");
+ QTest::newRow("3,0") << list << 0 << QString("x") << 0 << false;
+ QTest::newRow("3,1") << list << 0 << QString("y") << 1 << true;
+ QTest::newRow("3,2") << list << 0 << QString("z") << 2 << true;
+}
+
+// public QString currentText() const
+void tst_Q3ComboBox::currentText()
+{
+ QFETCH(QStringList, list);
+ QFETCH(int, currentItem);
+ QFETCH(QString, currentText);
+ QFETCH(int, expectedCurrentItem);
+ QFETCH(bool, signal);
+
+ SubQ3ComboBox box;
+ QVERIFY(box.currentText().isEmpty());
+ box.insertStringList(list);
+ box.setCurrentItem(currentItem);
+
+ QSignalSpy spy0(&box, SIGNAL(activated(int)));
+ QSignalSpy spy1(&box, SIGNAL(activated(QString)));
+ QSignalSpy spy2(&box, SIGNAL(highlighted(int)));
+ QSignalSpy spy3(&box, SIGNAL(highlighted(QString)));
+ QSignalSpy spy4(&box, SIGNAL(textChanged(QString)));
+
+ box.setCurrentText(currentText);
+ if (list.isEmpty())
+ QVERIFY(box.currentText().isEmpty());
+ else {
+ QCOMPARE(box.currentText(), currentText);
+ QCOMPARE(box.currentItem(), expectedCurrentItem);
+ }
+ QCOMPARE(spy0.count(), 0);
+ QCOMPARE(spy1.count(), 0);
+ QCOMPARE(spy2.count(), signal ? 1 : 0);
+ QCOMPARE(spy3.count(), signal ? 1 : 0);
+ QCOMPARE(spy4.count(), 0);
+}
+
+Q_DECLARE_METATYPE(Q3ComboBox::Policy)
+void tst_Q3ComboBox::duplicatesEnabled_data()
+{
+ QTest::addColumn<QStringList>("list");
+ QTest::addColumn<bool>("duplicatesEnabled");
+ QTest::addColumn<int>("count");
+ QTest::addColumn<QString>("string");
+ QTest::addColumn<int>("postCount");
+ QTest::addColumn<Q3ComboBox::Policy>("policy");
+ QTest::addColumn<bool>("activatedSignal");
+ QTest::addColumn<bool>("highlightedSignal");
+
+ QStringList list = (QStringList() << "x" << "y" << "z");
+
+ QTest::newRow("null") << QStringList() << false << 0 << QString() << 0 << Q3ComboBox::AtTop << false << false;
+ QTest::newRow("3, no-dup-3") << list << false << list.count() << QString() << list.count() << Q3ComboBox::AtTop << false << false;
+ QTest::newRow("3, dup-3") << list << true << list.count() << QString() << list.count() << Q3ComboBox::AtTop << false << false;
+ QStringList duplist = list;
+ duplist << list[0];
+
+ int c = duplist.count();
+ QTest::newRow("4, no-dup-wdup-4") << duplist << false << c << "x" << c << Q3ComboBox::AtTop << true << true;
+
+ QTest::newRow("4, dup-wdup-4 noIn") << duplist << true << c << "x" << c << Q3ComboBox::NoInsertion << true << false;
+ QTest::newRow("4, dup-wdup-4 atTop") << duplist << true << c << "x" << c + 1 << Q3ComboBox::AtTop << true << true;
+}
+
+// public bool duplicatesEnabled() const
+void tst_Q3ComboBox::duplicatesEnabled()
+{
+ QFETCH(QStringList, list);
+ QFETCH(bool, duplicatesEnabled);
+ QFETCH(int, count);
+ QFETCH(QString, string);
+ QFETCH(int, postCount);
+ QFETCH(Q3ComboBox::Policy, policy);
+ QFETCH(bool, activatedSignal);
+ QFETCH(bool, highlightedSignal);
+
+ SubQ3ComboBox box;
+ box.setEditable(true);
+ box.insertStringList(list);
+ box.setInsertionPolicy(policy);
+ box.setCurrentItem(1);
+ QCOMPARE(box.insertionPolicy(), policy);
+
+ QSignalSpy spy0(&box, SIGNAL(activated(int)));
+ QSignalSpy spy1(&box, SIGNAL(activated(QString)));
+ QSignalSpy spy2(&box, SIGNAL(highlighted(int)));
+ QSignalSpy spy3(&box, SIGNAL(highlighted(QString)));
+ QSignalSpy spy4(&box, SIGNAL(textChanged(QString)));
+
+ box.setDuplicatesEnabled(duplicatesEnabled);
+ QCOMPARE(box.duplicatesEnabled(), duplicatesEnabled);
+ QCOMPARE(box.count(), count);
+
+ box.setEditText(string);
+ QCOMPARE(box.lineEdit()->text(), string);
+ QTest::keyPress(box.lineEdit(), Qt::Key_Return);
+ QCOMPARE(box.count(), postCount);
+ if (postCount != list.count()) {
+ switch (policy) {
+ case Q3ComboBox::InsertBeforeCurrent:
+ QCOMPARE(box.text(0), string);
+ break;
+ case Q3ComboBox::InsertAtCurrent:
+ QCOMPARE(box.text(1), string);
+ break;
+ case Q3ComboBox::InsertAfterCurrent:
+ QCOMPARE(box.text(2), string);
+ break;
+ case Q3ComboBox::InsertAtTop:
+ QCOMPARE(box.text(0), string);
+ break;
+ case Q3ComboBox::InsertAtBottom:
+ QCOMPARE(box.text(box.count() - 1), string);
+ break;
+ case Q3ComboBox::NoInsert:
+ break;
+ }
+ }
+
+ //QCOMPARE(spy0.count(), activatedSignal ? 1 : 0);
+ //QCOMPARE(spy1.count(), activatedSignal ? 1 : 0);
+ QCOMPARE(spy2.count(), highlightedSignal ? 1 : 0);
+ QCOMPARE(spy3.count(), highlightedSignal ? 1 : 0);
+ QCOMPARE(spy4.count(), !list.isEmpty() ? 1 : 0);
+}
+
+void tst_Q3ComboBox::editable_data()
+{
+ QTest::addColumn<QStringList>("list");
+ QTest::addColumn<bool>("editable");
+ QTest::newRow("empty-noneditable") << QStringList() << false;
+ QTest::newRow("empty-editable") << QStringList() << true;
+}
+
+// public bool editable() const
+void tst_Q3ComboBox::editable()
+{
+ QFETCH(QStringList, list);
+ QFETCH(bool, editable);
+
+ SubQ3ComboBox box;
+ box.insertStringList(list);
+
+ QSignalSpy spy0(&box, SIGNAL(activated(int)));
+ QSignalSpy spy1(&box, SIGNAL(activated(QString)));
+ QSignalSpy spy2(&box, SIGNAL(highlighted(int)));
+ QSignalSpy spy3(&box, SIGNAL(highlighted(QString)));
+ QSignalSpy spy4(&box, SIGNAL(textChanged(QString)));
+
+ box.setEditable(editable);
+ QCOMPARE(box.editable(), editable);
+ if (box.editable()) {
+ QVERIFY(box.lineEdit());
+ if (!list.empty())
+ QCOMPARE(box.lineEdit()->text(), list[box.currentItem()]);
+
+ box.setEditable(false);
+ QVERIFY(!box.lineEdit());
+ }
+
+ QCOMPARE(spy0.count(), 0);
+ QCOMPARE(spy1.count(), 0);
+ QCOMPARE(spy2.count(), 0);
+ QCOMPARE(spy3.count(), 0);
+ QCOMPARE(spy4.count(), 0);
+}
+
+void tst_Q3ComboBox::insertItem_data()
+{
+ QTest::addColumn<QStringList>("init");
+ QTest::addColumn<QString>("string");
+ QTest::addColumn<int>("index");
+ QTest::addColumn<QStringList>("expected");
+ QTest::newRow("null") << QStringList() << QString() << 0 << (QStringList() << QString());
+ QTest::newRow("front") << (QStringList() << "x") << QString() << 0 << (QStringList() << QString() << "x");
+ QTest::newRow("back") << (QStringList() << "x") << QString() << 1 << (QStringList() << "x" << QString());
+}
+
+// public void insertItem(QPixmap const& pixmap, int index = -1)
+void tst_Q3ComboBox::insertItem()
+{
+ QFETCH(QStringList, init);
+ QFETCH(QString, string);
+ QFETCH(int, index);
+ QFETCH(QStringList, expected);
+
+ SubQ3ComboBox box;
+ box.insertStringList(init);
+
+ QSignalSpy spy0(&box, SIGNAL(activated(int)));
+ QSignalSpy spy1(&box, SIGNAL(activated(QString)));
+ QSignalSpy spy2(&box, SIGNAL(highlighted(int)));
+ QSignalSpy spy3(&box, SIGNAL(highlighted(QString)));
+ QSignalSpy spy4(&box, SIGNAL(textChanged(QString)));
+
+ box.insertItem(string, index);
+ for (int i = 0; i < expected.count(); ++i)
+ QCOMPARE(box.text(i), expected.at(i));
+
+ QCOMPARE(spy0.count(), 0);
+ QCOMPARE(spy1.count(), 0);
+ QCOMPARE(spy2.count(), 0);
+ QCOMPARE(spy3.count(), 0);
+ QCOMPARE(spy4.count(), 0);
+}
+
+Q_DECLARE_METATYPE(QStringList)
+void tst_Q3ComboBox::insertStringList_data()
+{
+ QTest::addColumn<QStringList>("init");
+ QTest::addColumn<QStringList>("stringlist");
+ QTest::addColumn<int>("index");
+ QTest::addColumn<QStringList>("expected");
+ QTest::newRow("null") << QStringList() << QStringList() << 0 << (QStringList() << QString());
+ QTest::newRow("front") << (QStringList() << "x") << (QStringList() << "y") << 0 << (QStringList() << "y" << "x");
+ QTest::newRow("back") << (QStringList() << "x") << (QStringList() << "y") << 1 << (QStringList() << "x" << "y");
+}
+
+// public void insertStringList(QStringList const& , int index = -1)
+void tst_Q3ComboBox::insertStringList()
+{
+ QFETCH(QStringList, init);
+ QFETCH(QStringList, stringlist);
+ QFETCH(int, index);
+ QFETCH(QStringList, expected);
+
+ SubQ3ComboBox box;
+ box.insertStringList(init);
+
+ QSignalSpy spy0(&box, SIGNAL(activated(int)));
+ QSignalSpy spy1(&box, SIGNAL(activated(QString)));
+ QSignalSpy spy2(&box, SIGNAL(highlighted(int)));
+ QSignalSpy spy3(&box, SIGNAL(highlighted(QString)));
+ QSignalSpy spy4(&box, SIGNAL(textChanged(QString)));
+
+ box.insertStringList(stringlist, index);
+ for (int i = 0; i < expected.count(); ++i)
+ QCOMPARE(box.text(i), expected.at(i));
+
+ QCOMPARE(spy0.count(), 0);
+ QCOMPARE(spy1.count(), 0);
+ QCOMPARE(spy2.count(), 0);
+ QCOMPARE(spy3.count(), 0);
+ QCOMPARE(spy4.count(), 0);
+}
+
+void tst_Q3ComboBox::insertStrList_data()
+{
+ QTest::addColumn<QStringList>("init");
+ QTest::addColumn<int>("index");
+ QTest::addColumn<QStringList>("expected");
+ QTest::newRow("front") << (QStringList() << "x") << 0 << (QStringList() << "y" << "x");
+ QTest::newRow("back") << (QStringList() << "x") << 1 << (QStringList() << "x" << "y");
+}
+
+// public void insertStrList(Q3StrList const* , int index = -1)
+void tst_Q3ComboBox::insertStrList()
+{
+ QFETCH(QStringList, init);
+ static const char* strings[] = { "y", 0 };
+ QFETCH(int, index);
+ QFETCH(QStringList, expected);
+
+ SubQ3ComboBox box;
+ box.insertStringList(init);
+
+ QSignalSpy spy0(&box, SIGNAL(activated(int)));
+ QSignalSpy spy1(&box, SIGNAL(activated(QString)));
+ QSignalSpy spy2(&box, SIGNAL(highlighted(int)));
+ QSignalSpy spy3(&box, SIGNAL(highlighted(QString)));
+ QSignalSpy spy4(&box, SIGNAL(textChanged(QString)));
+
+ box.insertStrList(strings, -1, index);
+ for (int i = 0; i < expected.count(); ++i)
+ QCOMPARE(box.text(i), expected.at(i));
+
+ QCOMPARE(spy0.count(), 0);
+ QCOMPARE(spy1.count(), 0);
+ QCOMPARE(spy2.count(), 0);
+ QCOMPARE(spy3.count(), 0);
+ QCOMPARE(spy4.count(), 0);
+}
+
+void tst_Q3ComboBox::maxCount_data()
+{
+ QTest::addColumn<QStringList>("init");
+ QTest::addColumn<int>("maxCount");
+ QTest::addColumn<QStringList>("expected");
+ QStringList empty;
+ QTest::newRow("remove-all-1") << (QStringList(empty) << "x") << 0 << (QStringList(empty));
+ QTest::newRow("remove-all-2") << (QStringList(empty) << "x" << "y") << 0 << (QStringList(empty));
+ QTest::newRow("remove-one") << (QStringList(empty) << "x" << "y") << 1 << (QStringList(empty) << "x");
+ QTest::newRow("remove-two") << (QStringList(empty) << "x" << "y" << "z") << 1 << (QStringList(empty) << "x");
+ QTest::newRow("do-nothing-1") << (QStringList(empty) << "x") << 1 << (QStringList(empty) << "x");
+ QTest::newRow("do-nothing-2") << (QStringList(empty) << "x") << 2 << (QStringList(empty) << "x");
+ QTest::newRow("do-nothing-3") << (QStringList(empty) << "x" << "y") << 2 << (QStringList(empty) << "x" << "y");
+}
+
+// public int maxCount() const
+void tst_Q3ComboBox::maxCount()
+{
+ QFETCH(QStringList, init);
+ QFETCH(int, maxCount);
+ QFETCH(QStringList, expected);
+
+ SubQ3ComboBox box;
+ box.insertStringList(init);
+
+ QSignalSpy spy0(&box, SIGNAL(activated(int)));
+ QSignalSpy spy1(&box, SIGNAL(activated(QString)));
+ QSignalSpy spy2(&box, SIGNAL(highlighted(int)));
+ QSignalSpy spy3(&box, SIGNAL(highlighted(QString)));
+ QSignalSpy spy4(&box, SIGNAL(textChanged(QString)));
+
+ box.setMaxCount(maxCount);
+ QCOMPARE(box.maxCount(), maxCount);
+ //QCOMPARE(box.count(), expected.count());
+ for (int i = 0; i < expected.count(); ++i)
+ QCOMPARE(box.text(i), expected.at(i));
+
+ QCOMPARE(spy0.count(), 0);
+ QCOMPARE(spy1.count(), 0);
+ QCOMPARE(spy2.count(), 0);
+ QCOMPARE(spy3.count(), 0);
+ QCOMPARE(spy4.count(), 0);
+
+ //box.setEditable(true);
+ //box.lineEdit()->setText("foo");
+ //QTest::keyPress(box.lineEdit(), Qt::Key_Return);
+ //QVERIFY(box.count() <= maxCount);
+}
+
+// public QPixmap const* pixmap(int index) const
+void tst_Q3ComboBox::pixmap()
+{
+ SubQ3ComboBox box;
+ QCOMPARE(box.pixmap(0), static_cast<const QPixmap*>(0));
+ QPixmap pixmap(1, 1);
+ box.insertItem(pixmap, "foo", 0);
+ QVERIFY(box.pixmap(0) != 0);
+}
+
+void tst_Q3ComboBox::removeItem_data()
+{
+ QTest::addColumn<QStringList>("init");
+ QTest::addColumn<int>("removeItem");
+ QTest::addColumn<QStringList>("expected");
+ QStringList empty;
+ QTest::newRow("remove-1") << (QStringList(empty) << "x") << 0 << (QStringList(empty));
+ QTest::newRow("remove-2") << (QStringList(empty) << "x" << "y") << 0 << (QStringList(empty) << "y");
+ QTest::newRow("remove-3") << (QStringList(empty) << "x" << "y") << 1 << (QStringList(empty) << "x");
+ QTest::newRow("remove-4") << (QStringList(empty) << "x" << "y" << "z") << 1 << (QStringList(empty) << "x" << "z");
+ QTest::newRow("do-nothing") << (QStringList(empty) << "x" << "y") << -2 << (QStringList(empty) << "x" << "y");
+}
+
+// public void removeItem(int index)
+void tst_Q3ComboBox::removeItem()
+{
+ QFETCH(QStringList, init);
+ QFETCH(int, removeItem);
+ QFETCH(QStringList, expected);
+
+ SubQ3ComboBox box;
+ box.insertStringList(init);
+
+ QSignalSpy spy0(&box, SIGNAL(activated(int)));
+ QSignalSpy spy1(&box, SIGNAL(activated(QString)));
+ QSignalSpy spy2(&box, SIGNAL(highlighted(int)));
+ QSignalSpy spy3(&box, SIGNAL(highlighted(QString)));
+ QSignalSpy spy4(&box, SIGNAL(textChanged(QString)));
+
+ box.removeItem(removeItem);
+ QCOMPARE(box.count(), expected.count());
+ for (int i = 0; i < expected.count(); ++i)
+ QCOMPARE(box.text(i), expected.at(i));
+
+ QCOMPARE(spy0.count(), 0);
+ QCOMPARE(spy1.count(), 0);
+ QCOMPARE(spy2.count(), 0);
+ QCOMPARE(spy3.count(), 0);
+ QCOMPARE(spy4.count(), 0);
+}
+
+// public void setValidator(QValidator const* )
+void tst_Q3ComboBox::setValidator()
+{
+ SubQ3ComboBox box;
+ const QValidator *v = new QRegExpValidator(&box);
+ box.setValidator(v);
+ QCOMPARE(box.validator(), static_cast<const QValidator*>(0));
+ box.setEditable(true);
+ box.setValidator(v);
+ QCOMPARE(box.validator(), v);
+}
+
+Q_DECLARE_METATYPE(Qt::Key)
+void tst_Q3ComboBox::keyPressEvent_data()
+{
+ QTest::addColumn<QStringList>("init");
+ QTest::addColumn<int>("currentItem");
+ QTest::addColumn<Qt::Key>("key");
+ QTest::addColumn<int>("expectedCurrent");
+ QTest::newRow("go-nowhere-1") << (QStringList() << "x") << 0 << Qt::Key_Up << 0;
+ QTest::newRow("go-nowhere-1") << (QStringList() << "x") << 0 << Qt::Key_Down << 0;
+
+ QTest::newRow("move-1") << (QStringList() << "x" << "y") << 1 << Qt::Key_Up << 0;
+ QTest::newRow("move-2") << (QStringList() << "x" << "y") << 0 << Qt::Key_Down << 1;
+ QTest::newRow("move-3") << (QStringList() << "x" << "y") << 1 << Qt::Key_Home << 0;
+ QTest::newRow("move-4") << (QStringList() << "x" << "y") << 0 << Qt::Key_End << 1;
+
+ QTest::newRow("move-let-1") << (QStringList() << "x" << "y") << 0 << Qt::Key_X << 0;
+ QTest::newRow("move-let-2") << (QStringList() << "x" << "y") << 0 << Qt::Key_Y << 1;
+ QTest::newRow("move-let-3") << (QStringList() << "x" << "y") << 1 << Qt::Key_X << 0;
+ QTest::newRow("move-let-4") << (QStringList() << "x" << "y") << 1 << Qt::Key_Y << 1;
+}
+
+// protected void keyPressEvent(QKeyEvent* e)
+void tst_Q3ComboBox::keyPressEvent()
+{
+ QFETCH(QStringList, init);
+ QFETCH(int, currentItem);
+ QFETCH(Qt::Key, key);
+ QFETCH(int, expectedCurrent);
+
+ SubQ3ComboBox box;
+ box.insertStringList(init);
+ box.setCurrentItem(currentItem);
+
+ QSignalSpy spy0(&box, SIGNAL(activated(int)));
+ QSignalSpy spy1(&box, SIGNAL(activated(QString)));
+ QSignalSpy spy2(&box, SIGNAL(highlighted(int)));
+ QSignalSpy spy3(&box, SIGNAL(highlighted(QString)));
+ QSignalSpy spy4(&box, SIGNAL(textChanged(QString)));
+
+ QTest::keyPress(&box, key);
+ QCOMPARE(box.currentItem(), expectedCurrent);
+
+ // Signal behavior is inconsistent :( so only check that the two signals
+ // match if it ever emits, sometimes it does, sometimes it doesn't.
+ QCOMPARE(spy0.count(), spy1.count());
+
+ int spyCount = (currentItem == expectedCurrent) ? 0 : 1;
+ QCOMPARE(spy2.count(), spyCount);
+ QCOMPARE(spy3.count(), spyCount);
+ QCOMPARE(spy4.count(), 0);
+}
+
+void tst_Q3ComboBox::wheelEvent_data()
+{
+ QTest::addColumn<QStringList>("init");
+ QTest::addColumn<int>("currentItem");
+ QTest::addColumn<int>("delta");
+ QTest::addColumn<int>("expectedCurrent");
+ QTest::newRow("go-nowhere-1") << (QStringList() << "x") << 0 << 10 << 0;
+ QTest::newRow("go-nowhere-1") << (QStringList() << "x") << 0 << -10 << 0;
+
+ QTest::newRow("move-1") << (QStringList() << "x" << "y") << 1 << 10 << 0;
+ QTest::newRow("move-2") << (QStringList() << "x" << "y") << 0 << -10 << 1;
+}
+
+// protected void wheelEvent(QWheelEvent* e)
+void tst_Q3ComboBox::wheelEvent()
+{
+ QFETCH(QStringList, init);
+ QFETCH(int, currentItem);
+ QFETCH(int, delta);
+ QFETCH(int, expectedCurrent);
+
+ SubQ3ComboBox box;
+ box.insertStringList(init);
+ box.setCurrentItem(currentItem);
+
+ QSignalSpy spy0(&box, SIGNAL(activated(int)));
+ QSignalSpy spy1(&box, SIGNAL(activated(QString)));
+ QSignalSpy spy2(&box, SIGNAL(highlighted(int)));
+ QSignalSpy spy3(&box, SIGNAL(highlighted(QString)));
+ QSignalSpy spy4(&box, SIGNAL(textChanged(QString)));
+
+ QWheelEvent event(QPoint(0,0), delta, Qt::LeftButton, Qt::NoModifier);
+ box.call_wheelEvent(&event);
+ QCOMPARE(box.currentItem(), expectedCurrent);
+
+ int spyCount = (currentItem == expectedCurrent) ? 0 : 1;
+ QCOMPARE(spy0.count(), spyCount);
+ QCOMPARE(spy1.count(), spyCount);
+ QCOMPARE(spy2.count(), spyCount);
+ QCOMPARE(spy3.count(), spyCount);
+ QCOMPARE(spy4.count(), 0);
+}
+
+void tst_Q3ComboBox::task231724_clear()
+{
+ Q3ComboBox box;
+
+ for ( int i = 0; i <50; i++ ) {
+ box.insertItem(QString( "value %1" ).arg( i ));
+ }
+
+ box.show();
+ QTest::qWait(20);
+ QTest::mouseClick (&box, Qt::LeftButton);
+ QTest::qWait(500);
+ Q3ListBox *popup = box.findChild<Q3ListBox *>("in-combo");
+ QVERIFY(popup);
+ QVERIFY(popup->isVisible());
+ QVERIFY(!popup->testAttribute(Qt::WA_OutsideWSRange));
+ QTest::qWait(20);
+
+ box.clear();
+ for ( int i = 0; i <50; i++ ) {
+ box.insertItem(QString( "value %1" ).arg( i ));
+ }
+
+ QTest::qWait(20);
+ QTest::mouseClick (&box, Qt::LeftButton);
+ QTest::qWait(500);
+
+ popup = box.findChild<Q3ListBox *>("in-combo");
+ QVERIFY(popup);
+ QVERIFY(popup->isVisible());
+ QVERIFY(!popup->testAttribute(Qt::WA_OutsideWSRange));
+
+}
+
+QTEST_MAIN(tst_Q3ComboBox)
+#include "tst_q3combobox.moc"
+