1 /****************************************************************************
3 ** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
4 ** Contact: http://www.qt-project.org/legal
6 ** This file is part of the test suite of the Qt Toolkit.
8 ** $QT_BEGIN_LICENSE:LGPL$
9 ** Commercial License Usage
10 ** Licensees holding valid commercial Qt licenses may use this file in
11 ** accordance with the commercial license agreement provided with the
12 ** Software or, alternatively, in accordance with the terms contained in
13 ** a written agreement between you and Digia. For licensing terms and
14 ** conditions see http://qt.digia.com/licensing. For further information
15 ** use the contact form at http://qt.digia.com/contact-us.
17 ** GNU Lesser General Public License Usage
18 ** Alternatively, this file may be used under the terms of the GNU Lesser
19 ** General Public License version 2.1 as published by the Free Software
20 ** Foundation and appearing in the file LICENSE.LGPL included in the
21 ** packaging of this file. Please review the following information to
22 ** ensure the GNU Lesser General Public License version 2.1 requirements
23 ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
25 ** In addition, as a special exception, Digia gives you certain additional
26 ** rights. These rights are described in the Digia Qt LGPL Exception
27 ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
29 ** GNU General Public License Usage
30 ** Alternatively, this file may be used under the terms of the GNU
31 ** General Public License version 3.0 as published by the Free Software
32 ** Foundation and appearing in the file LICENSE.GPL included in the
33 ** packaging of this file. Please review the following information to
34 ** ensure the GNU General Public License version 3.0 requirements will be
35 ** met: http://www.gnu.org/copyleft/gpl.html.
40 ****************************************************************************/
43 #include <QtTest/QtTest>
44 #include <QtGui/QGuiApplication>
45 #include <QtGui/QWindow>
46 #include <qpa/qwindowsysteminterface.h>
47 #include <qgenericplugin.h>
51 class tst_QGuiApplication: public QObject
59 void topLevelWindows();
60 void abortQuitOnShow();
61 void changeFocusWindow();
62 void keyboardModifiers();
64 void quitOnLastWindowClosed();
65 void genericPluginsAndWindowSystemEvents();
68 void tst_QGuiApplication::displayName()
71 char *argv[] = { const_cast<char*>("tst_qguiapplication") };
72 QGuiApplication app(argc, argv);
73 QCOMPARE(::qAppName(), QString::fromLatin1("tst_qguiapplication"));
74 QCOMPARE(QGuiApplication::applicationName(), QString::fromLatin1("tst_qguiapplication"));
75 QCOMPARE(QGuiApplication::applicationDisplayName(), QString::fromLatin1("tst_qguiapplication"));
76 QGuiApplication::setApplicationDisplayName("The GUI Application");
77 QCOMPARE(QGuiApplication::applicationDisplayName(), QString::fromLatin1("The GUI Application"));
80 class DummyWindow : public QWindow
83 DummyWindow() : m_focusObject(0) {}
85 virtual QObject *focusObject() const
90 void setFocusObject(QObject *object)
92 m_focusObject = object;
93 emit focusObjectChanged(object);
96 QObject *m_focusObject;
100 void tst_QGuiApplication::focusObject()
103 QGuiApplication app(argc, 0);
105 QObject obj1, obj2, obj3;
110 QSignalSpy spy(&app, SIGNAL(focusObjectChanged(QObject*)));
113 // verify active window focus propagates to qguiapplication
114 window1.requestActivateWindow();
115 QVERIFY(QTest::qWaitForWindowActive(&window1));
116 QCOMPARE(app.focusWindow(), &window1);
118 window1.setFocusObject(&obj1);
119 QCOMPARE(app.focusObject(), &obj1);
120 QCOMPARE(spy.count(), 1);
123 window1.setFocusObject(&obj2);
124 QCOMPARE(app.focusObject(), &obj2);
125 QCOMPARE(spy.count(), 1);
128 window2.setFocusObject(&obj3);
129 QCOMPARE(app.focusObject(), &obj2); // not yet changed
131 QVERIFY(QTest::qWaitForWindowExposed(&window2));
132 QTRY_COMPARE(app.focusWindow(), &window2);
133 QCOMPARE(app.focusObject(), &obj3);
134 QCOMPARE(spy.count(), 1);
136 // focus change on unfocused window does not show
138 window1.setFocusObject(&obj1);
139 QCOMPARE(spy.count(), 0);
140 QCOMPARE(app.focusObject(), &obj3);
143 void tst_QGuiApplication::allWindows()
146 QGuiApplication app(argc, 0);
147 QWindow *window1 = new QWindow;
148 QWindow *window2 = new QWindow(window1);
149 QVERIFY(app.allWindows().contains(window1));
150 QVERIFY(app.allWindows().contains(window2));
151 QCOMPARE(app.allWindows().count(), 2);
155 QVERIFY(!app.allWindows().contains(window2));
156 QVERIFY(!app.allWindows().contains(window1));
157 QCOMPARE(app.allWindows().count(), 0);
160 void tst_QGuiApplication::topLevelWindows()
163 QGuiApplication app(argc, 0);
164 QWindow *window1 = new QWindow;
165 QWindow *window2 = new QWindow(window1);
166 QVERIFY(app.topLevelWindows().contains(window1));
167 QVERIFY(!app.topLevelWindows().contains(window2));
168 QCOMPARE(app.topLevelWindows().count(), 1);
172 QVERIFY(!app.topLevelWindows().contains(window2));
173 QVERIFY(!app.topLevelWindows().contains(window1));
174 QCOMPARE(app.topLevelWindows().count(), 0);
177 class ShowCloseShowWindow : public QWindow
181 ShowCloseShowWindow(bool showAgain, QWindow *parent = 0)
182 : QWindow(parent), showAgain(showAgain)
184 QTimer::singleShot(0, this, SLOT(doClose()));
185 QTimer::singleShot(500, this, SLOT(exitApp()));
203 void tst_QGuiApplication::abortQuitOnShow()
206 QGuiApplication app(argc, 0);
207 QWindow *window1 = new ShowCloseShowWindow(false);
209 QCOMPARE(app.exec(), 0);
211 QWindow *window2 = new ShowCloseShowWindow(true);
213 QCOMPARE(app.exec(), 1);
217 class FocusChangeWindow: public QWindow
220 virtual bool event(QEvent *ev)
222 if (ev->type() == QEvent::FocusAboutToChange)
223 windowDuringFocusAboutToChange = qGuiApp->focusWindow();
224 return QWindow::event(ev);
227 virtual void focusOutEvent(QFocusEvent *)
229 windowDuringFocusOut = qGuiApp->focusWindow();
233 FocusChangeWindow() : QWindow(), windowDuringFocusAboutToChange(0), windowDuringFocusOut(0) {}
235 QWindow *windowDuringFocusAboutToChange;
236 QWindow *windowDuringFocusOut;
239 void tst_QGuiApplication::changeFocusWindow()
242 QGuiApplication app(argc, 0);
244 // focus is changed between FocusAboutToChange and FocusChanged
245 FocusChangeWindow window1, window2;
248 QVERIFY(QTest::qWaitForWindowExposed(&window1));
249 QVERIFY(QTest::qWaitForWindowExposed(&window2));
250 window1.requestActivateWindow();
251 QTRY_COMPARE(app.focusWindow(), &window1);
253 window2.requestActivateWindow();
254 QTRY_COMPARE(app.focusWindow(), &window2);
255 QCOMPARE(window1.windowDuringFocusAboutToChange, &window1);
256 QCOMPARE(window1.windowDuringFocusOut, &window2);
259 void tst_QGuiApplication::keyboardModifiers()
262 QGuiApplication app(argc, 0);
264 QWindow *window = new QWindow;
266 QVERIFY(QTest::qWaitForWindowExposed(window));
267 QCOMPARE(QGuiApplication::keyboardModifiers(), Qt::NoModifier);
270 QPoint center = window->geometry().center();
271 QTest::mouseEvent(QTest::MousePress, window, Qt::LeftButton, Qt::NoModifier, center);
272 QCOMPARE(QGuiApplication::keyboardModifiers(), Qt::NoModifier);
273 QTest::mouseEvent(QTest::MouseRelease, window, Qt::LeftButton, Qt::NoModifier, center);
274 QCOMPARE(QGuiApplication::keyboardModifiers(), Qt::NoModifier);
275 QTest::mouseEvent(QTest::MousePress, window, Qt::RightButton, Qt::ControlModifier, center);
276 QCOMPARE(QGuiApplication::keyboardModifiers(), Qt::ControlModifier);
277 QTest::mouseEvent(QTest::MouseRelease, window, Qt::RightButton, Qt::ControlModifier, center);
278 QCOMPARE(QGuiApplication::keyboardModifiers(), Qt::ControlModifier);
281 QWindowSystemInterface::tryHandleShortcutEvent(window, Qt::Key_5, Qt::MetaModifier);
282 QCOMPARE(QGuiApplication::keyboardModifiers(), Qt::MetaModifier);
283 QWindowSystemInterface::tryHandleShortcutEvent(window, Qt::Key_Period, Qt::NoModifier);
284 QCOMPARE(QGuiApplication::keyboardModifiers(), Qt::NoModifier);
285 QWindowSystemInterface::tryHandleShortcutEvent(window, Qt::Key_0, Qt::ControlModifier);
286 QCOMPARE(QGuiApplication::keyboardModifiers(), Qt::ControlModifier);
289 QTest::keyEvent(QTest::Press, window, Qt::Key_C);
290 QCOMPARE(QGuiApplication::keyboardModifiers(), Qt::NoModifier);
291 QTest::keyEvent(QTest::Release, window, Qt::Key_C);
292 QCOMPARE(QGuiApplication::keyboardModifiers(), Qt::NoModifier);
294 QTest::keyEvent(QTest::Press, window, Qt::Key_U, Qt::ControlModifier);
295 QCOMPARE(QGuiApplication::keyboardModifiers(), Qt::ControlModifier);
296 QTest::keyEvent(QTest::Release, window, Qt::Key_U, Qt::ControlModifier);
297 QCOMPARE(QGuiApplication::keyboardModifiers(), Qt::ControlModifier);
299 QTest::keyEvent(QTest::Press, window, Qt::Key_T);
300 QCOMPARE(QGuiApplication::keyboardModifiers(), Qt::NoModifier);
301 QTest::keyEvent(QTest::Release, window, Qt::Key_T);
302 QCOMPARE(QGuiApplication::keyboardModifiers(), Qt::NoModifier);
304 QTest::keyEvent(QTest::Press, window, Qt::Key_E, Qt::ControlModifier);
305 QCOMPARE(QGuiApplication::keyboardModifiers(), Qt::ControlModifier);
306 QTest::keyEvent(QTest::Release, window, Qt::Key_E, Qt::ControlModifier);
307 QCOMPARE(QGuiApplication::keyboardModifiers(), Qt::ControlModifier);
310 QPoint global = window->mapToGlobal(center);
312 QWindowSystemInterface::handleWheelEvent(window, center, global, delta, delta, Qt::NoModifier);
313 QWindowSystemInterface::sendWindowSystemEvents(QEventLoop::AllEvents);
314 QCOMPARE(QGuiApplication::keyboardModifiers(), Qt::NoModifier);
315 QWindowSystemInterface::handleWheelEvent(window, center, global, delta, delta, Qt::AltModifier);
316 QWindowSystemInterface::sendWindowSystemEvents(QEventLoop::AllEvents);
317 QCOMPARE(QGuiApplication::keyboardModifiers(), Qt::AltModifier);
318 QWindowSystemInterface::handleWheelEvent(window, center, global, delta, delta, Qt::ControlModifier);
319 QWindowSystemInterface::sendWindowSystemEvents(QEventLoop::AllEvents);
320 QCOMPARE(QGuiApplication::keyboardModifiers(), Qt::ControlModifier);
323 QList<const QTouchDevice *> touchDevices = QTouchDevice::devices();
324 if (!touchDevices.isEmpty()) {
325 QTouchDevice *touchDevice = const_cast<QTouchDevice *>(touchDevices.first());
326 QTest::touchEvent(window, touchDevice).press(1, center).release(1, center);
327 QCOMPARE(QGuiApplication::keyboardModifiers(), Qt::NoModifier);
334 class BlockableWindow : public QWindow
342 inline BlockableWindow()
343 : QWindow(), blocked(false), enters(0), leaves(0) {}
345 bool event(QEvent *e)
348 case QEvent::WindowBlocked:
351 case QEvent::WindowUnblocked:
363 return QWindow::event(e);
373 void tst_QGuiApplication::modalWindow()
376 QGuiApplication app(argc, 0);
378 BlockableWindow *window1 = new BlockableWindow;
380 BlockableWindow *window2 = new BlockableWindow;
382 BlockableWindow *windowModalWindow1 = new BlockableWindow;
383 windowModalWindow1->setTransientParent(window1);
384 windowModalWindow1->setWindowModality(Qt::WindowModal);
386 BlockableWindow *windowModalWindow2 = new BlockableWindow;
387 windowModalWindow2->setTransientParent(windowModalWindow1);
388 windowModalWindow2->setWindowModality(Qt::WindowModal);
390 BlockableWindow *applicationModalWindow1 = new BlockableWindow;
391 applicationModalWindow1->setWindowModality(Qt::ApplicationModal);
393 // show the 2 windows, nothing is blocked
396 QVERIFY(QTest::qWaitForWindowExposed(window1));
397 QVERIFY(QTest::qWaitForWindowExposed(window2));
398 QCOMPARE(app.modalWindow(), static_cast<QWindow *>(0));
399 QCOMPARE(window1->blocked, 0);
400 QCOMPARE(window2->blocked, 0);
401 QCOMPARE(windowModalWindow1->blocked, 0);
402 QCOMPARE(windowModalWindow2->blocked, 0);
403 QCOMPARE(applicationModalWindow1->blocked, 0);
405 // enter mouse in window1
406 QWindowSystemInterface::handleEnterEvent(window1);
407 QGuiApplication::processEvents();
408 QCOMPARE(window1->enters, 1);
409 QCOMPARE(window1->leaves, 0);
411 // show applicationModalWindow1, everything is blocked
412 applicationModalWindow1->show();
413 QCOMPARE(app.modalWindow(), applicationModalWindow1);
414 QCOMPARE(window1->blocked, 1);
415 QCOMPARE(window2->blocked, 1);
416 QCOMPARE(windowModalWindow1->blocked, 1);
417 QCOMPARE(windowModalWindow2->blocked, 1);
418 QCOMPARE(applicationModalWindow1->blocked, 0);
420 // opening modal causes leave for previously entered window, but not others
421 QGuiApplication::processEvents();
422 QCOMPARE(window1->enters, 1);
423 QCOMPARE(window1->leaves, 1);
424 QCOMPARE(window2->enters, 0);
425 QCOMPARE(window2->leaves, 0);
426 QCOMPARE(applicationModalWindow1->enters, 0);
427 QCOMPARE(applicationModalWindow1->leaves, 0);
428 window1->resetCounts();
430 // Try entering/leaving blocked window2 - no events should reach it
431 QWindowSystemInterface::handleEnterEvent(window2);
432 QGuiApplication::processEvents();
433 QWindowSystemInterface::handleLeaveEvent(window2);
434 QGuiApplication::processEvents();
435 QCOMPARE(window2->enters, 0);
436 QCOMPARE(window2->leaves, 0);
438 // everything is unblocked when applicationModalWindow1 is hidden
439 applicationModalWindow1->hide();
440 QCOMPARE(app.modalWindow(), static_cast<QWindow *>(0));
441 QCOMPARE(window1->blocked, 0);
442 QCOMPARE(window2->blocked, 0);
443 QCOMPARE(windowModalWindow1->blocked, 0);
444 QCOMPARE(windowModalWindow2->blocked, 0);
445 QCOMPARE(applicationModalWindow1->blocked, 0);
447 // Enter window2 - should not be blocked
448 QWindowSystemInterface::handleEnterEvent(window2);
449 QGuiApplication::processEvents();
450 QCOMPARE(window2->enters, 1);
451 QCOMPARE(window2->leaves, 0);
453 // show the windowModalWindow1, only window1 is blocked
454 windowModalWindow1->show();
455 QCOMPARE(app.modalWindow(), windowModalWindow1);
456 QCOMPARE(window1->blocked, 1);
457 QCOMPARE(window2->blocked, 0);
458 QCOMPARE(windowModalWindow1->blocked, 0);
459 QCOMPARE(windowModalWindow2->blocked, 0);
460 QCOMPARE(applicationModalWindow1->blocked, 0);
462 // opening window modal window doesn't cause leave for unblocked window
463 QGuiApplication::processEvents();
464 QCOMPARE(window1->enters, 0);
465 QCOMPARE(window1->leaves, 0);
466 QCOMPARE(window2->enters, 1);
467 QCOMPARE(window2->leaves, 0);
468 QCOMPARE(windowModalWindow1->enters, 0);
469 QCOMPARE(windowModalWindow1->leaves, 0);
471 // show the windowModalWindow2, windowModalWindow1 is blocked as well
472 windowModalWindow2->show();
473 QCOMPARE(app.modalWindow(), windowModalWindow2);
474 QCOMPARE(window1->blocked, 1);
475 QCOMPARE(window2->blocked, 0);
476 QCOMPARE(windowModalWindow1->blocked, 1);
477 QCOMPARE(windowModalWindow2->blocked, 0);
478 QCOMPARE(applicationModalWindow1->blocked, 0);
480 // hide windowModalWindow1, nothing is unblocked
481 windowModalWindow1->hide();
482 QCOMPARE(app.modalWindow(), windowModalWindow2);
483 QCOMPARE(window1->blocked, 1);
484 QCOMPARE(window2->blocked, 0);
485 QCOMPARE(windowModalWindow1->blocked, 1);
486 QCOMPARE(windowModalWindow2->blocked, 0);
487 QCOMPARE(applicationModalWindow1->blocked, 0);
489 // hide windowModalWindow2, windowModalWindow1 and window1 are unblocked
490 windowModalWindow2->hide();
491 QCOMPARE(app.modalWindow(), static_cast<QWindow *>(0));
492 QCOMPARE(window1->blocked, 0);
493 QCOMPARE(window2->blocked, 0);
494 QCOMPARE(windowModalWindow1->blocked, 0);
495 QCOMPARE(windowModalWindow2->blocked, 0);
496 QCOMPARE(applicationModalWindow1->blocked, 0);
498 // show windowModalWindow1 again, window1 is blocked
499 windowModalWindow1->show();
500 QCOMPARE(app.modalWindow(), windowModalWindow1);
501 QCOMPARE(window1->blocked, 1);
502 QCOMPARE(window2->blocked, 0);
503 QCOMPARE(windowModalWindow1->blocked, 0);
504 QCOMPARE(windowModalWindow2->blocked, 0);
505 QCOMPARE(applicationModalWindow1->blocked, 0);
507 // show windowModalWindow2 again, windowModalWindow1 is also blocked
508 windowModalWindow2->show();
509 QCOMPARE(app.modalWindow(), windowModalWindow2);
510 QCOMPARE(window1->blocked, 1);
511 QCOMPARE(window2->blocked, 0);
512 QCOMPARE(windowModalWindow1->blocked, 1);
513 QCOMPARE(windowModalWindow2->blocked, 0);
514 QCOMPARE(applicationModalWindow1->blocked, 0);
516 // show applicationModalWindow1, everything is blocked
517 applicationModalWindow1->show();
518 QCOMPARE(app.modalWindow(), applicationModalWindow1);
519 QCOMPARE(window1->blocked, 1);
520 QCOMPARE(window2->blocked, 1);
521 QCOMPARE(windowModalWindow1->blocked, 1);
522 QCOMPARE(windowModalWindow2->blocked, 1);
523 QCOMPARE(applicationModalWindow1->blocked, 0);
525 // window2 gets finally the leave
526 QGuiApplication::processEvents();
527 QCOMPARE(window1->enters, 0);
528 QCOMPARE(window1->leaves, 0);
529 QCOMPARE(window2->enters, 1);
530 QCOMPARE(window2->leaves, 1);
531 QCOMPARE(windowModalWindow1->enters, 0);
532 QCOMPARE(windowModalWindow1->leaves, 0);
533 QCOMPARE(applicationModalWindow1->enters, 0);
534 QCOMPARE(applicationModalWindow1->leaves, 0);
536 // hide applicationModalWindow1, windowModalWindow1 and window1 are blocked
537 applicationModalWindow1->hide();
538 QCOMPARE(app.modalWindow(), windowModalWindow2);
539 QCOMPARE(window1->blocked, 1);
540 QCOMPARE(window2->blocked, 0);
541 QCOMPARE(windowModalWindow1->blocked, 1);
542 QCOMPARE(windowModalWindow2->blocked, 0);
543 QCOMPARE(applicationModalWindow1->blocked, 0);
545 // hide windowModalWindow2, window1 is blocked
546 windowModalWindow2->hide();
547 QCOMPARE(app.modalWindow(), windowModalWindow1);
548 QCOMPARE(window1->blocked, 1);
549 QCOMPARE(window2->blocked, 0);
550 QCOMPARE(windowModalWindow1->blocked, 0);
551 QCOMPARE(windowModalWindow2->blocked, 0);
552 QCOMPARE(applicationModalWindow1->blocked, 0);
554 // hide windowModalWindow1, everything is unblocked
555 windowModalWindow1->hide();
556 QCOMPARE(app.modalWindow(), static_cast<QWindow *>(0));
557 QCOMPARE(window1->blocked, 0);
558 QCOMPARE(window2->blocked, 0);
559 QCOMPARE(windowModalWindow1->blocked, 0);
560 QCOMPARE(windowModalWindow2->blocked, 0);
561 QCOMPARE(applicationModalWindow1->blocked, 0);
566 delete applicationModalWindow1;
567 delete windowModalWindow2;
568 delete windowModalWindow1;
573 void tst_QGuiApplication::quitOnLastWindowClosed()
577 QGuiApplication app(argc, 0);
580 timer.setInterval(100);
582 QSignalSpy spy(&app, SIGNAL(aboutToQuit()));
583 QSignalSpy spy2(&timer, SIGNAL(timeout()));
585 QPointer<QWindow> mainWindow = new QWindow;
586 QPointer<QWindow> dialog = new QWindow;
588 dialog->setTransientParent(mainWindow);
590 QVERIFY(app.quitOnLastWindowClosed());
596 QTimer::singleShot(1000, mainWindow, SLOT(close())); // This should quit the application
597 QTimer::singleShot(2000, &app, SLOT(quit())); // This makes sure we quit even if it didn't
601 QCOMPARE(spy.count(), 1);
602 QVERIFY(spy2.count() < 15); // Should be around 10 if closing caused the quit
606 QGuiApplication app(argc, 0);
609 timer.setInterval(100);
611 QSignalSpy spy(&app, SIGNAL(aboutToQuit()));
612 QSignalSpy spy2(&timer, SIGNAL(timeout()));
614 QPointer<QWindow> mainWindow = new QWindow;
615 QPointer<QWindow> dialog = new QWindow;
617 QVERIFY(!dialog->transientParent());
618 QVERIFY(app.quitOnLastWindowClosed());
624 QTimer::singleShot(1000, mainWindow, SLOT(close())); // This should not quit the application
625 QTimer::singleShot(2000, &app, SLOT(quit()));
629 QCOMPARE(spy.count(), 1);
630 QVERIFY(spy2.count() > 15); // Should be around 20 if closing did not cause the quit
634 static Qt::ScreenOrientation testOrientationToSend = Qt::PrimaryOrientation;
636 class TestPlugin : public QObject
642 QScreen* screen = QGuiApplication::primaryScreen();
643 // Make sure the orientation we want to send doesn't get filtered out.
644 screen->setOrientationUpdateMask(screen->orientationUpdateMask() | testOrientationToSend);
645 QWindowSystemInterface::handleScreenOrientationChange(screen, testOrientationToSend);
649 class TestPluginFactory : public QGenericPlugin
652 Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QGenericPluginFactoryInterface" FILE "testplugin.json")
654 QObject* create(const QString &key, const QString &)
656 if (key == "testplugin")
657 return new TestPlugin;
662 class TestEventReceiver : public QObject
672 virtual void customEvent(QEvent *)
678 #include "tst_qguiapplication.moc"
680 void tst_QGuiApplication::genericPluginsAndWindowSystemEvents()
682 testOrientationToSend = Qt::InvertedLandscapeOrientation;
684 TestEventReceiver testReceiver;
685 QCoreApplication::postEvent(&testReceiver, new QEvent(QEvent::User));
686 QCOMPARE(testReceiver.customEvents, 0);
688 QStaticPlugin testPluginInfo;
689 testPluginInfo.instance = qt_plugin_instance;
690 testPluginInfo.metaData = qt_plugin_query_metadata;
691 qRegisterStaticPluginFunction(testPluginInfo);
693 char *argv[] = { const_cast<char*>("tst_qguiapplication"), const_cast<char*>("-plugin"), const_cast<char*>("testplugin") };
694 QGuiApplication app(argc, argv);
696 QVERIFY(QGuiApplication::primaryScreen());
697 QVERIFY(QGuiApplication::primaryScreen()->orientation() == testOrientationToSend);
699 QCOMPARE(testReceiver.customEvents, 0);
700 QCoreApplication::sendPostedEvents(&testReceiver);
701 QCOMPARE(testReceiver.customEvents, 1);
704 QTEST_APPLESS_MAIN(tst_QGuiApplication)