summaryrefslogtreecommitdiffstats
path: root/tests/auto/gui
diff options
context:
space:
mode:
Diffstat (limited to 'tests/auto/gui')
-rw-r--r--tests/auto/gui/kernel/qguiapplication/tst_qguiapplication.cpp179
-rw-r--r--tests/auto/gui/text/qfont/tst_qfont.cpp60
2 files changed, 221 insertions, 18 deletions
diff --git a/tests/auto/gui/kernel/qguiapplication/tst_qguiapplication.cpp b/tests/auto/gui/kernel/qguiapplication/tst_qguiapplication.cpp
index 1dc2e551b4..c0242d95c5 100644
--- a/tests/auto/gui/kernel/qguiapplication/tst_qguiapplication.cpp
+++ b/tests/auto/gui/kernel/qguiapplication/tst_qguiapplication.cpp
@@ -56,6 +56,7 @@ private slots:
void abortQuitOnShow();
void changeFocusWindow();
void keyboardModifiers();
+ void modalWindow();
};
class DummyWindow : public QWindow
@@ -315,5 +316,183 @@ void tst_QGuiApplication::keyboardModifiers()
delete window;
}
+class BlockableWindow : public QWindow
+{
+ Q_OBJECT
+public:
+ int blocked;
+
+ inline BlockableWindow()
+ : QWindow()
+ {
+ blocked = false;
+ }
+
+ bool event(QEvent *e)
+ {
+ switch (e->type()) {
+ case QEvent::WindowBlocked:
+ ++blocked;
+ break;
+ case QEvent::WindowUnblocked:
+ --blocked;
+ break;
+ default:
+ break;
+ }
+ return QWindow::event(e);
+ }
+};
+
+void tst_QGuiApplication::modalWindow()
+{
+ int argc = 0;
+ QGuiApplication app(argc, 0);
+
+ BlockableWindow *window1 = new BlockableWindow;
+
+ BlockableWindow *window2 = new BlockableWindow;
+
+ BlockableWindow *windowModalWindow1 = new BlockableWindow;
+ windowModalWindow1->setTransientParent(window1);
+ windowModalWindow1->setWindowModality(Qt::WindowModal);
+
+ BlockableWindow *windowModalWindow2 = new BlockableWindow;
+ windowModalWindow2->setTransientParent(windowModalWindow1);
+ windowModalWindow2->setWindowModality(Qt::WindowModal);
+
+ BlockableWindow *applicationModalWindow1 = new BlockableWindow;
+ applicationModalWindow1->setWindowModality(Qt::ApplicationModal);
+
+ // show the 2 windows, nothing is blocked
+ window1->show();
+ window2->show();
+ QTest::qWaitForWindowShown(window1);
+ QTest::qWaitForWindowShown(window2);
+ QCOMPARE(app.modalWindow(), static_cast<QWindow *>(0));
+ QCOMPARE(window1->blocked, 0);
+ QCOMPARE(window2->blocked, 0);
+ QCOMPARE(windowModalWindow1->blocked, 0);
+ QCOMPARE(windowModalWindow2->blocked, 0);
+ QCOMPARE(applicationModalWindow1->blocked, 0);
+
+ // show applicationModalWindow1, everything is blocked
+ applicationModalWindow1->show();
+ QCOMPARE(app.modalWindow(), applicationModalWindow1);
+ QCOMPARE(window1->blocked, 1);
+ QCOMPARE(window2->blocked, 1);
+ QCOMPARE(windowModalWindow1->blocked, 1);
+ QCOMPARE(windowModalWindow2->blocked, 1);
+ QCOMPARE(applicationModalWindow1->blocked, 0);
+
+ // everything is unblocked when applicationModalWindow1 is hidden
+ applicationModalWindow1->hide();
+ QCOMPARE(app.modalWindow(), static_cast<QWindow *>(0));
+ QCOMPARE(window1->blocked, 0);
+ QCOMPARE(window2->blocked, 0);
+ QCOMPARE(windowModalWindow1->blocked, 0);
+ QCOMPARE(windowModalWindow2->blocked, 0);
+ QCOMPARE(applicationModalWindow1->blocked, 0);
+
+ // show the windowModalWindow1, only window1 is blocked
+ windowModalWindow1->show();
+ QCOMPARE(app.modalWindow(), windowModalWindow1);
+ QCOMPARE(window1->blocked, 1);
+ QCOMPARE(window2->blocked, 0);
+ QCOMPARE(windowModalWindow1->blocked, 0);
+ QCOMPARE(windowModalWindow2->blocked, 0);
+ QCOMPARE(applicationModalWindow1->blocked, 0);
+
+ // show the windowModalWindow2, windowModalWindow1 is blocked as well
+ windowModalWindow2->show();
+ QCOMPARE(app.modalWindow(), windowModalWindow2);
+ QCOMPARE(window1->blocked, 1);
+ QCOMPARE(window2->blocked, 0);
+ QCOMPARE(windowModalWindow1->blocked, 1);
+ QCOMPARE(windowModalWindow2->blocked, 0);
+ QCOMPARE(applicationModalWindow1->blocked, 0);
+
+ // hide windowModalWindow1, nothing is unblocked
+ windowModalWindow1->hide();
+ QCOMPARE(app.modalWindow(), windowModalWindow2);
+ QCOMPARE(window1->blocked, 1);
+ QCOMPARE(window2->blocked, 0);
+ QCOMPARE(windowModalWindow1->blocked, 1);
+ QCOMPARE(windowModalWindow2->blocked, 0);
+ QCOMPARE(applicationModalWindow1->blocked, 0);
+
+ // hide windowModalWindow2, windowModalWindow1 and window1 are unblocked
+ windowModalWindow2->hide();
+ QCOMPARE(app.modalWindow(), static_cast<QWindow *>(0));
+ QCOMPARE(window1->blocked, 0);
+ QCOMPARE(window2->blocked, 0);
+ QCOMPARE(windowModalWindow1->blocked, 0);
+ QCOMPARE(windowModalWindow2->blocked, 0);
+ QCOMPARE(applicationModalWindow1->blocked, 0);
+
+ // show windowModalWindow1 again, window1 is blocked
+ windowModalWindow1->show();
+ QCOMPARE(app.modalWindow(), windowModalWindow1);
+ QCOMPARE(window1->blocked, 1);
+ QCOMPARE(window2->blocked, 0);
+ QCOMPARE(windowModalWindow1->blocked, 0);
+ QCOMPARE(windowModalWindow2->blocked, 0);
+ QCOMPARE(applicationModalWindow1->blocked, 0);
+
+ // show windowModalWindow2 again, windowModalWindow1 is also blocked
+ windowModalWindow2->show();
+ QCOMPARE(app.modalWindow(), windowModalWindow2);
+ QCOMPARE(window1->blocked, 1);
+ QCOMPARE(window2->blocked, 0);
+ QCOMPARE(windowModalWindow1->blocked, 1);
+ QCOMPARE(windowModalWindow2->blocked, 0);
+ QCOMPARE(applicationModalWindow1->blocked, 0);
+
+ // show applicationModalWindow1, everything is blocked
+ applicationModalWindow1->show();
+ QCOMPARE(app.modalWindow(), applicationModalWindow1);
+ QCOMPARE(window1->blocked, 1);
+ QCOMPARE(window2->blocked, 1);
+ QCOMPARE(windowModalWindow1->blocked, 1);
+ QCOMPARE(windowModalWindow2->blocked, 1);
+ QCOMPARE(applicationModalWindow1->blocked, 0);
+
+ // hide applicationModalWindow1, windowModalWindow1 and window1 are blocked
+ applicationModalWindow1->hide();
+ QCOMPARE(app.modalWindow(), windowModalWindow2);
+ QCOMPARE(window1->blocked, 1);
+ QCOMPARE(window2->blocked, 0);
+ QCOMPARE(windowModalWindow1->blocked, 1);
+ QCOMPARE(windowModalWindow2->blocked, 0);
+ QCOMPARE(applicationModalWindow1->blocked, 0);
+
+ // hide windowModalWindow2, window1 is blocked
+ windowModalWindow2->hide();
+ QCOMPARE(app.modalWindow(), windowModalWindow1);
+ QCOMPARE(window1->blocked, 1);
+ QCOMPARE(window2->blocked, 0);
+ QCOMPARE(windowModalWindow1->blocked, 0);
+ QCOMPARE(windowModalWindow2->blocked, 0);
+ QCOMPARE(applicationModalWindow1->blocked, 0);
+
+ // hide windowModalWindow1, everything is unblocked
+ windowModalWindow1->hide();
+ QCOMPARE(app.modalWindow(), static_cast<QWindow *>(0));
+ QCOMPARE(window1->blocked, 0);
+ QCOMPARE(window2->blocked, 0);
+ QCOMPARE(windowModalWindow1->blocked, 0);
+ QCOMPARE(windowModalWindow2->blocked, 0);
+ QCOMPARE(applicationModalWindow1->blocked, 0);
+
+ window2->hide();
+ window1->hide();
+
+ delete applicationModalWindow1;
+ delete windowModalWindow2;
+ delete windowModalWindow1;
+ delete window2;
+ delete window1;
+}
+
QTEST_APPLESS_MAIN(tst_QGuiApplication)
#include "tst_qguiapplication.moc"
diff --git a/tests/auto/gui/text/qfont/tst_qfont.cpp b/tests/auto/gui/text/qfont/tst_qfont.cpp
index 1cedfa5c01..ea26b9262b 100644
--- a/tests/auto/gui/text/qfont/tst_qfont.cpp
+++ b/tests/auto/gui/text/qfont/tst_qfont.cpp
@@ -75,10 +75,8 @@ private slots:
void serializeSpacing();
void lastResortFont();
void styleName();
-#ifdef QT_BUILD_INTERNAL
void defaultFamily_data();
void defaultFamily();
-#endif
};
// Testing get/set functions
@@ -623,36 +621,62 @@ void tst_QFont::styleName()
#endif
}
-#ifdef QT_BUILD_INTERNAL
+QString getPlatformGenericFont(const char* genericName)
+{
+#if defined(Q_OS_UNIX) && !defined(QT_NO_FONTCONFIG)
+ QProcess p;
+ p.start(QLatin1String("fc-match"), (QStringList() << "-f%{family}" << genericName));
+ if (!p.waitForStarted())
+ qWarning("fc-match cannot be started: %s", qPrintable(p.errorString()));
+ if (p.waitForFinished())
+ return QString::fromLatin1(p.readAllStandardOutput());
+#endif
+ return QLatin1String(genericName);
+}
+
+static inline QByteArray msgNotAcceptableFont(const QString &defaultFamily, const QStringList &acceptableFamilies)
+{
+ QString res = QString::fromLatin1("Font family '%1' is not one of the following accaptable results: ").arg(defaultFamily);
+ Q_FOREACH (const QString &family, acceptableFamilies)
+ res += QString::fromLatin1("\n %1").arg(family);
+ return res.toLocal8Bit();
+}
+
Q_DECLARE_METATYPE(QFont::StyleHint)
void tst_QFont::defaultFamily_data()
{
QTest::addColumn<QFont::StyleHint>("styleHint");
- QTest::addColumn<QString>("defaultFamily");
-
- QTest::newRow("serif") << QFont::Times << "serif";
- QTest::newRow("monospace") << QFont::Monospace << "monospace";
- QTest::newRow("sans-serif") << QFont::SansSerif << "sans-serif";
- QTest::newRow("cursive") << QFont::Cursive << "cursive";
- QTest::newRow("fantasy") << QFont::Fantasy << "fantasy";
- QTest::newRow("old english") << QFont::OldEnglish << "Old English";
+ QTest::addColumn<QStringList>("acceptableFamilies");
+
+ QTest::newRow("serif") << QFont::Serif << (QStringList() << "Times New Roman" << "Times" << getPlatformGenericFont("serif"));
+ QTest::newRow("monospace") << QFont::Monospace << (QStringList() << "Courier New" << "Monaco" << getPlatformGenericFont("monospace"));
+ QTest::newRow("cursive") << QFont::Cursive << (QStringList() << "Comic Sans MS" << "Apple Chancery" << getPlatformGenericFont("cursive"));
+ QTest::newRow("fantasy") << QFont::Fantasy << (QStringList() << "Impact" << "Zapfino" << getPlatformGenericFont("fantasy"));
+ QTest::newRow("sans-serif") << QFont::SansSerif << (QStringList() << "Arial" << "Lucida Grande" << getPlatformGenericFont("sans-serif"));
}
void tst_QFont::defaultFamily()
{
QFETCH(QFont::StyleHint, styleHint);
- QFETCH(QString, defaultFamily);
-
- QFontDatabase db;
- if (!db.hasFamily(defaultFamily))
- QSKIP("Font family is not available on the system");
+ QFETCH(QStringList, acceptableFamilies);
QFont f;
+ QFontDatabase db;
f.setStyleHint(styleHint);
- QCOMPARE(QFontDatabase::resolveFontFamilyAlias(f.defaultFamily()), QFontDatabase::resolveFontFamilyAlias(defaultFamily));
+ const QString familyForHint(f.defaultFamily());
+ // it should at least return a family that is available.
+ QVERIFY(db.hasFamily(familyForHint));
+
+ bool isAcceptable = false;
+ Q_FOREACH (const QString& family, acceptableFamilies) {
+ if (!familyForHint.compare(family, Qt::CaseInsensitive)) {
+ isAcceptable = true;
+ break;
+ }
+ }
+ QVERIFY2(isAcceptable, msgNotAcceptableFont(familyForHint, acceptableFamilies));
}
-#endif // QT_BUILD_INTERNAL
QTEST_MAIN(tst_QFont)
#include "tst_qfont.moc"