summaryrefslogtreecommitdiffstats
path: root/tests/auto/installer/messageboxhandler/tst_messageboxhandler.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tests/auto/installer/messageboxhandler/tst_messageboxhandler.cpp')
-rw-r--r--tests/auto/installer/messageboxhandler/tst_messageboxhandler.cpp108
1 files changed, 108 insertions, 0 deletions
diff --git a/tests/auto/installer/messageboxhandler/tst_messageboxhandler.cpp b/tests/auto/installer/messageboxhandler/tst_messageboxhandler.cpp
new file mode 100644
index 000000000..4b12507d3
--- /dev/null
+++ b/tests/auto/installer/messageboxhandler/tst_messageboxhandler.cpp
@@ -0,0 +1,108 @@
+#include "messageboxhandler.h"
+#include "qinstallerglobal.h"
+
+#include <QTest>
+#include <QMetaEnum>
+#include <QScriptEngine>
+#include <QDebug>
+
+using namespace QInstaller;
+
+namespace QTest {
+ template<>
+ char *toString(const QMessageBox::StandardButton &button)
+ {
+ QString buttonAsString(QString::number(button));
+ return qstrdup(buttonAsString.toLatin1().data());
+ }
+}
+
+class tst_MessageBoxHandler : public QObject
+{
+ Q_OBJECT
+public:
+private slots:
+ void initTestCase()
+ {
+ m_maxStandardButtons = 0;
+
+ const QMetaObject &messageBoxMetaObject = QMessageBox::staticMetaObject;
+ int index = messageBoxMetaObject.indexOfEnumerator("StandardButtons");
+
+ QMetaEnum metaEnum = messageBoxMetaObject.enumerator(index);
+ for (int i = 0; i < metaEnum.keyCount(); i++) {
+ int enumValue = metaEnum.value(i);
+ if (enumValue < QMessageBox::FirstButton)
+ continue;
+ m_standardButtonValueMap.insert(static_cast<QMessageBox::StandardButton>(enumValue),
+ metaEnum.valueToKey(metaEnum.value(i)));
+ m_maxStandardButtons += enumValue;
+ if (enumValue == QMessageBox::LastButton)
+ break;
+ }
+ QInstaller::registerMessageBox(&m_scriptEngine);
+ }
+
+ void testScriptButtonValues()
+ {
+ QMapIterator<QMessageBox::StandardButton, QString> i(m_standardButtonValueMap);
+ while (i.hasNext()) {
+ i.next();
+ QString scriptString = QString::fromLatin1("QMessageBox.%1").arg(i.value());
+ QScriptValue scriptValue(m_scriptEngine.evaluate(scriptString));
+
+ QVERIFY2(!scriptValue.isUndefined(), qPrintable(
+ QString::fromLatin1("It seems that %1 is undefined.").arg(scriptString)));
+
+ qint32 evaluatedValue = scriptValue.toInt32();
+ QVERIFY2(!m_scriptEngine.hasUncaughtException(), qPrintable(
+ QInstaller::uncaughtExceptionString(&m_scriptEngine)));
+
+ QCOMPARE(static_cast<QMessageBox::StandardButton>(evaluatedValue), i.key());
+ }
+ }
+
+ void testDefaultAction()
+ {
+ int standardButtons = QMessageBox::FirstButton;
+ QList<QMessageBox::Button> orderedButtons = MessageBoxHandler::orderedButtons();
+ MessageBoxHandler *messageBoxHandler = MessageBoxHandler::instance();
+
+ messageBoxHandler->setDefaultAction(MessageBoxHandler::Reject);
+ QString testidentifier(QLatin1String("TestError"));
+ QString testTitle(QLatin1String("A test error"));
+ QString testMessage(QLatin1String("This is a test error message."));
+
+ const char *ignoreMessage("\"created critical message box TestError: 'A test error', This is a test error message.\" ");
+ do {
+ standardButtons += QMessageBox::FirstButton;
+
+ QTest::ignoreMessage(QtDebugMsg, ignoreMessage);
+ const QMessageBox::StandardButton returnButton = static_cast<QMessageBox::StandardButton>(
+ messageBoxHandler->critical(testidentifier, testTitle, testMessage,
+ static_cast<QMessageBox::StandardButton>(standardButtons)));
+
+ QMessageBox::StandardButton wantedButton = QMessageBox::NoButton;
+ // find the last button which is the wanted reject button in the current
+ // standardButtons combination
+ foreach (QMessageBox::StandardButton button, orderedButtons) {
+ if (standardButtons & button)
+ wantedButton = button;
+ }
+
+ QVERIFY2(wantedButton != QMessageBox::NoButton, "Could not find a wantedButton.");
+ QCOMPARE(returnButton, wantedButton);
+
+ } while (standardButtons < m_maxStandardButtons);
+
+ }
+
+private:
+ QMap<QMessageBox::StandardButton, QString> m_standardButtonValueMap;
+ int m_maxStandardButtons;
+ QScriptEngine m_scriptEngine;
+};
+
+QTEST_MAIN(tst_MessageBoxHandler)
+
+#include "tst_messageboxhandler.moc"