From 2d832326bd1b6257849b23a86527c12a19d120b9 Mon Sep 17 00:00:00 2001 From: Tim Jenssen Date: Tue, 23 Apr 2013 13:09:38 +0200 Subject: fix messageboxhandler with help of new autotests - fix setDefaultAction (use std::reverse directly) - fix missing Ok MessageBox value in script context Change-Id: I82fa5a06d83b6c8659c60a3e56a1d4bd91e70c14 Reviewed-by: Karsten Heimrich --- .../messageboxhandler/tst_messageboxhandler.cpp | 108 +++++++++++++++++++++ 1 file changed, 108 insertions(+) create mode 100644 tests/auto/installer/messageboxhandler/tst_messageboxhandler.cpp (limited to 'tests/auto/installer/messageboxhandler/tst_messageboxhandler.cpp') 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 +#include +#include +#include + +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(enumValue), + metaEnum.valueToKey(metaEnum.value(i))); + m_maxStandardButtons += enumValue; + if (enumValue == QMessageBox::LastButton) + break; + } + QInstaller::registerMessageBox(&m_scriptEngine); + } + + void testScriptButtonValues() + { + QMapIterator 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(evaluatedValue), i.key()); + } + } + + void testDefaultAction() + { + int standardButtons = QMessageBox::FirstButton; + QList 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( + messageBoxHandler->critical(testidentifier, testTitle, testMessage, + static_cast(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 m_standardButtonValueMap; + int m_maxStandardButtons; + QScriptEngine m_scriptEngine; +}; + +QTEST_MAIN(tst_MessageBoxHandler) + +#include "tst_messageboxhandler.moc" -- cgit v1.2.3