1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
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"
|