tests/auto/declarative/qdeclarativeviewer/tst_qdeclarativeviewer.cpp
changeset 33 3e2da88830cd
parent 30 5dc02b23752f
child 37 758a864f9613
equal deleted inserted replaced
30:5dc02b23752f 33:3e2da88830cd
    41 
    41 
    42 #include <qtest.h>
    42 #include <qtest.h>
    43 #include <QtDeclarative/qdeclarativeengine.h>
    43 #include <QtDeclarative/qdeclarativeengine.h>
    44 #include <QtDeclarative/qdeclarativeview.h>
    44 #include <QtDeclarative/qdeclarativeview.h>
    45 #include <QtDeclarative/qdeclarativeitem.h>
    45 #include <QtDeclarative/qdeclarativeitem.h>
       
    46 #include <QtGui/qmenubar.h>
       
    47 #include "../../../shared/util.h"
    46 #include "qmlruntime.h"
    48 #include "qmlruntime.h"
       
    49 #include "../../../shared/util.h"
       
    50 
       
    51 #ifdef Q_OS_SYMBIAN
       
    52 // In Symbian OS test data is located in applications private dir
       
    53 #define SRCDIR "."
       
    54 #endif
       
    55 
       
    56 #if defined(Q_OS_MAC) || defined(Q_WS_MAEMO_5) || defined(Q_WS_S60)
       
    57 #  define MENUBAR_HEIGHT(mw) 0
       
    58 #else
       
    59 #  define MENUBAR_HEIGHT(mw) (mw->menuBar()->height())
       
    60 #endif
    47 
    61 
    48 class tst_QDeclarativeViewer : public QObject
    62 class tst_QDeclarativeViewer : public QObject
    49 
    63 
    50 {
    64 {
    51     Q_OBJECT
    65     Q_OBJECT
    52 public:
    66 public:
    53     tst_QDeclarativeViewer();
    67     tst_QDeclarativeViewer();
    54 
    68 
    55 private slots:
    69 private slots:
    56     void orientation();
    70     void orientation();
       
    71     void loading();
       
    72     void fileBrowser();
       
    73     void resizing();
       
    74     void paths();
       
    75     void slowMode();
    57 
    76 
    58 private:
    77 private:
    59     QDeclarativeEngine engine;
    78     QDeclarativeEngine engine;
    60 };
    79 };
    61 
    80 
    62 tst_QDeclarativeViewer::tst_QDeclarativeViewer()
    81 tst_QDeclarativeViewer::tst_QDeclarativeViewer()
    63 {
    82 {
    64 }
    83 }
    65 
    84 
       
    85 #define TEST_INITIAL_SIZES(viewer) { \
       
    86     QDeclarativeItem* rootItem = qobject_cast<QDeclarativeItem*>(viewer->view()->rootObject()); \
       
    87     QVERIFY(rootItem); \
       
    88 \
       
    89     QCOMPARE(rootItem->width(), 200.0); \
       
    90     QCOMPARE(rootItem->height(), 300.0); \
       
    91     QTRY_COMPARE(viewer->view()->size(), QSize(200, 300)); \
       
    92     QCOMPARE(viewer->view()->sceneRect().size(), QSizeF(200, 300)); \
       
    93     QCOMPARE(viewer->size(), QSize(200, 300 + MENUBAR_HEIGHT(viewer))); \
       
    94     QCOMPARE(viewer->size(), viewer->sizeHint()); \
       
    95 }
       
    96 
    66 void tst_QDeclarativeViewer::orientation()
    97 void tst_QDeclarativeViewer::orientation()
    67 {
    98 {
    68     QWidget window;
    99     QDeclarativeViewer *viewer = new QDeclarativeViewer();
    69     QDeclarativeViewer *viewer = new QDeclarativeViewer(&window);
       
    70     QVERIFY(viewer);
   100     QVERIFY(viewer);
    71     viewer->open(SRCDIR "/data/orientation.qml");
   101     viewer->open(SRCDIR "/data/orientation.qml");
    72     QVERIFY(viewer->view());
   102     QVERIFY(viewer->view());
    73     QVERIFY(viewer->menuBar());
   103     QVERIFY(viewer->menuBar());
    74     QDeclarativeItem* rootItem = qobject_cast<QDeclarativeItem*>(viewer->view()->rootObject());
   104     QDeclarativeItem* rootItem = qobject_cast<QDeclarativeItem*>(viewer->view()->rootObject());
    75     QVERIFY(rootItem);
   105     QVERIFY(rootItem);
    76     window.show();
   106     viewer->show();
       
   107 
       
   108     QApplication::setActiveWindow(viewer);
       
   109     QTest::qWaitForWindowShown(viewer);
       
   110     QTRY_COMPARE(QApplication::activeWindow(), static_cast<QWidget *>(viewer));
       
   111 
       
   112     TEST_INITIAL_SIZES(viewer);
       
   113 
       
   114     viewer->rotateOrientation();
       
   115     qApp->processEvents();
       
   116 
       
   117     QCOMPARE(rootItem->width(), 300.0);
       
   118     QCOMPARE(rootItem->height(), 200.0);
       
   119     QTRY_COMPARE(viewer->view()->size(), QSize(300, 200));
       
   120     QCOMPARE(viewer->view()->sceneRect().size(), QSizeF(300, 200));
       
   121     QCOMPARE(viewer->size(), QSize(300, 200 + MENUBAR_HEIGHT(viewer)));
       
   122     QCOMPARE(viewer->size(), viewer->sizeHint());
       
   123 
       
   124     viewer->rotateOrientation();
       
   125     qApp->processEvents();
    77 
   126 
    78     QCOMPARE(rootItem->width(), 200.0);
   127     QCOMPARE(rootItem->width(), 200.0);
    79     QCOMPARE(rootItem->height(), 300.0);
   128     QCOMPARE(rootItem->height(), 300.0);
       
   129     QTRY_COMPARE(viewer->view()->size(), QSize(200, 300));
       
   130     QCOMPARE(viewer->view()->sceneRect().size(), QSizeF(200, 300));
       
   131     QCOMPARE(viewer->size(), QSize(200, 300 + MENUBAR_HEIGHT(viewer)));
       
   132     QCOMPARE(viewer->size(), viewer->sizeHint());
       
   133 
       
   134     delete viewer;
       
   135 }
       
   136 
       
   137 void tst_QDeclarativeViewer::loading()
       
   138 {
       
   139     QDeclarativeViewer *viewer = new QDeclarativeViewer();
       
   140     QVERIFY(viewer);
       
   141     viewer->setSizeToView(true);
       
   142     viewer->open(SRCDIR "/data/orientation.qml");
       
   143     QVERIFY(viewer->view());
       
   144     QVERIFY(viewer->menuBar());
       
   145     QDeclarativeItem* rootItem = qobject_cast<QDeclarativeItem*>(viewer->view()->rootObject());
       
   146     QVERIFY(rootItem);
       
   147     viewer->show();
       
   148 
       
   149     QApplication::setActiveWindow(viewer);
       
   150     QTest::qWaitForWindowShown(viewer);
       
   151     QTRY_COMPARE(QApplication::activeWindow(), static_cast<QWidget *>(viewer));
       
   152 
       
   153     TEST_INITIAL_SIZES(viewer);
       
   154 
       
   155     viewer->resize(QSize(250, 350));
       
   156     qApp->processEvents();
       
   157 
       
   158     // window resized
       
   159     QTRY_COMPARE(rootItem->width(), 250.0);
       
   160     QTRY_COMPARE(rootItem->height(), 350.0 - MENUBAR_HEIGHT(viewer));
       
   161     QCOMPARE(viewer->view()->size(), QSize(250, 350 - MENUBAR_HEIGHT(viewer)));
       
   162     QCOMPARE(viewer->view()->initialSize(), QSize(200, 300));
       
   163     QCOMPARE(viewer->view()->sceneRect().size(), QSizeF(250, 350 - MENUBAR_HEIGHT(viewer)));
       
   164     QCOMPARE(viewer->size(), QSize(250, 350));
       
   165     QCOMPARE(viewer->size(), viewer->sizeHint());
       
   166 
       
   167     viewer->reload();
       
   168     rootItem = qobject_cast<QDeclarativeItem*>(viewer->view()->rootObject());
       
   169     QVERIFY(rootItem);
       
   170 
       
   171     // reload cause the window to return back to initial size
       
   172     QTRY_COMPARE(rootItem->width(), 200.0);
       
   173     QTRY_COMPARE(rootItem->height(), 300.0);
    80     QCOMPARE(viewer->view()->size(), QSize(200, 300));
   174     QCOMPARE(viewer->view()->size(), QSize(200, 300));
       
   175     QCOMPARE(viewer->view()->initialSize(), QSize(200, 300));
    81     QCOMPARE(viewer->view()->sceneRect().size(), QSizeF(200, 300));
   176     QCOMPARE(viewer->view()->sceneRect().size(), QSizeF(200, 300));
    82     QCOMPARE(viewer->size(), QSize(200, 300+viewer->menuBar()->height()));
   177     QCOMPARE(viewer->size(), QSize(200, 300 + MENUBAR_HEIGHT(viewer)));
    83     QCOMPARE(viewer->size(), viewer->sizeHint());
   178     QCOMPARE(viewer->size(), viewer->sizeHint());
    84 
   179 
    85     viewer->toggleOrientation();
   180     viewer->resize(QSize(250, 350));
    86     qApp->processEvents();
   181     qApp->processEvents();
    87 
   182 
    88     QCOMPARE(rootItem->width(), 300.0);
   183     // window resized again
       
   184     QTRY_COMPARE(rootItem->width(), 250.0);
       
   185     QTRY_COMPARE(rootItem->height(), 350.0 - MENUBAR_HEIGHT(viewer));
       
   186     QCOMPARE(viewer->view()->size(), QSize(250, 350 - MENUBAR_HEIGHT(viewer)));
       
   187     QCOMPARE(viewer->view()->initialSize(), QSize(200, 300));
       
   188     QCOMPARE(viewer->view()->sceneRect().size(), QSizeF(250, 350 - MENUBAR_HEIGHT(viewer)));
       
   189     QCOMPARE(viewer->size(), QSize(250, 350));
       
   190     QCOMPARE(viewer->size(), viewer->sizeHint());
       
   191 
       
   192     viewer->open(SRCDIR "/data/orientation.qml");
       
   193     rootItem = qobject_cast<QDeclarativeItem*>(viewer->view()->rootObject());
       
   194     QVERIFY(rootItem);
       
   195 
       
   196     // open also causes the window to return back to initial size
       
   197     QTRY_COMPARE(rootItem->width(), 200.0);
       
   198     QTRY_COMPARE(rootItem->height(), 300.0);
       
   199     QCOMPARE(viewer->view()->size(), QSize(200, 300));
       
   200     QCOMPARE(viewer->view()->initialSize(), QSize(200, 300));
       
   201     QCOMPARE(viewer->view()->sceneRect().size(), QSizeF(200, 300));
       
   202     QCOMPARE(viewer->size(), QSize(200, 300 + MENUBAR_HEIGHT(viewer)));
       
   203     QCOMPARE(viewer->size(), viewer->sizeHint());
       
   204 
       
   205     delete viewer;
       
   206 }
       
   207 
       
   208 void tst_QDeclarativeViewer::fileBrowser()
       
   209 {
       
   210     QDeclarativeViewer *viewer = new QDeclarativeViewer();
       
   211     QVERIFY(viewer);
       
   212     viewer->setUseNativeFileBrowser(false);
       
   213     viewer->openFile();
       
   214     viewer->show();
       
   215 
       
   216     QApplication::setActiveWindow(viewer);
       
   217     QTest::qWaitForWindowShown(viewer);
       
   218     QTRY_COMPARE(QApplication::activeWindow(), static_cast<QWidget *>(viewer));
       
   219 
       
   220     // Browser.qml successfully loaded
       
   221     QDeclarativeItem* browserItem = qobject_cast<QDeclarativeItem*>(viewer->view()->rootObject());
       
   222     QVERIFY(viewer->view());
       
   223     QVERIFY(viewer->menuBar());
       
   224     QVERIFY(browserItem);
       
   225 
       
   226     // load something
       
   227     viewer->open(SRCDIR "/data/orientation.qml");
       
   228     QVERIFY(viewer->view());
       
   229     QVERIFY(viewer->menuBar());
       
   230     QDeclarativeItem* rootItem = qobject_cast<QDeclarativeItem*>(viewer->view()->rootObject());
       
   231     QVERIFY(rootItem);
       
   232     QVERIFY(browserItem != rootItem);
       
   233 
       
   234     // go back to Browser.qml
       
   235     viewer->openFile();
       
   236     browserItem = qobject_cast<QDeclarativeItem*>(viewer->view()->rootObject());
       
   237     QVERIFY(viewer->view());
       
   238     QVERIFY(viewer->menuBar());
       
   239     QVERIFY(browserItem);
       
   240 
       
   241     delete viewer;
       
   242 }
       
   243 
       
   244 void tst_QDeclarativeViewer::resizing()
       
   245 {
       
   246     QDeclarativeViewer *viewer = new QDeclarativeViewer();
       
   247     QVERIFY(viewer);
       
   248     viewer->open(SRCDIR "/data/orientation.qml");
       
   249     QVERIFY(viewer->view());
       
   250     QVERIFY(viewer->menuBar());
       
   251     QDeclarativeItem* rootItem = qobject_cast<QDeclarativeItem*>(viewer->view()->rootObject());
       
   252     QVERIFY(rootItem);
       
   253     viewer->show();
       
   254 
       
   255     QApplication::setActiveWindow(viewer);
       
   256     QTest::qWaitForWindowShown(viewer);
       
   257     QTRY_COMPARE(QApplication::activeWindow(), static_cast<QWidget *>(viewer));
       
   258 
       
   259     TEST_INITIAL_SIZES(viewer);
       
   260 
       
   261     viewer->setSizeToView(false);
       
   262 
       
   263     // size view to root object
       
   264     rootItem->setWidth(150);
       
   265     rootItem->setHeight(200);
       
   266     qApp->processEvents();
       
   267 
       
   268     QCOMPARE(rootItem->width(), 150.0);
    89     QCOMPARE(rootItem->height(), 200.0);
   269     QCOMPARE(rootItem->height(), 200.0);
    90     QCOMPARE(viewer->view()->size(), QSize(300, 200));
   270     QTRY_COMPARE(viewer->view()->size(), QSize(150, 200));
    91     QCOMPARE(viewer->view()->sceneRect().size(), QSizeF(300, 200));
   271     QCOMPARE(viewer->view()->initialSize(), QSize(200, 300));
    92     QCOMPARE(viewer->size(), QSize(300, 200+viewer->menuBar()->height()));
   272     QCOMPARE(viewer->view()->sceneRect().size(), QSizeF(150, 200));
    93     QCOMPARE(viewer->size(), viewer->sizeHint());
   273     QCOMPARE(viewer->size(), QSize(150, 200 + MENUBAR_HEIGHT(viewer)));
    94 
   274 
    95     viewer->toggleOrientation();
   275     // do not size root object to view
    96     qApp->processEvents();
   276     viewer->resize(QSize(180,250));
    97 
   277     QCOMPARE(rootItem->width(), 150.0);
    98     QCOMPARE(rootItem->width(), 200.0);
   278     QCOMPARE(rootItem->height(), 200.0);
    99     QCOMPARE(rootItem->height(), 300.0);
   279 
   100     QCOMPARE(viewer->view()->size(), QSize(200, 300));
   280     viewer->setSizeToView(true);
   101     QCOMPARE(viewer->view()->sceneRect().size(), QSizeF(200, 300));
   281 
   102     QCOMPARE(viewer->size(), QSize(200, 300+viewer->menuBar()->height()));
   282     // size root object to view
   103     QCOMPARE(viewer->size(), viewer->sizeHint());
   283     viewer->resize(QSize(250,350));
       
   284     qApp->processEvents();
       
   285 
       
   286     QTRY_COMPARE(rootItem->width(), 250.0);
       
   287     QTRY_COMPARE(rootItem->height(), 350.0 - MENUBAR_HEIGHT(viewer));
       
   288     QTRY_COMPARE(viewer->view()->size(), QSize(250, 350 - MENUBAR_HEIGHT(viewer)));
       
   289     QCOMPARE(viewer->view()->initialSize(), QSize(200, 300));
       
   290     QCOMPARE(viewer->view()->sceneRect().size(), QSizeF(250, 350 - MENUBAR_HEIGHT(viewer)));
       
   291     QCOMPARE(viewer->size(), QSize(250, 350));
       
   292 
       
   293     // do not size view to root object
       
   294     rootItem->setWidth(150);
       
   295     rootItem->setHeight(200);
       
   296     QTRY_COMPARE(viewer->size(), QSize(250, 350));
       
   297 
       
   298     delete viewer;
       
   299 }
       
   300 
       
   301 void tst_QDeclarativeViewer::paths()
       
   302 {
       
   303     QDeclarativeViewer *viewer = new QDeclarativeViewer();
       
   304     QVERIFY(viewer);
       
   305 
       
   306     viewer->addLibraryPath("miscImportPath");
       
   307     viewer->view()->engine()->importPathList().contains("miscImportPath");
       
   308 
       
   309     viewer->addPluginPath("miscPluginPath");
       
   310     viewer->view()->engine()->pluginPathList().contains("miscPluginPath");
       
   311 
       
   312     delete viewer;
       
   313 }
       
   314 
       
   315 void tst_QDeclarativeViewer::slowMode()
       
   316 {
       
   317     QDeclarativeViewer *viewer = new QDeclarativeViewer();
       
   318     QVERIFY(viewer);
       
   319 
       
   320     viewer->setSlowMode(true);
       
   321     viewer->setSlowMode(false);
       
   322 
       
   323     delete viewer;
   104 }
   324 }
   105 
   325 
   106 QTEST_MAIN(tst_QDeclarativeViewer)
   326 QTEST_MAIN(tst_QDeclarativeViewer)
   107 
   327 
   108 #include "tst_qdeclarativeviewer.moc"
   328 #include "tst_qdeclarativeviewer.moc"