X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=tests%2Fauto%2Fquick%2Fqquickborderimage%2Ftst_qquickborderimage.cpp;h=30994b729e8770819b19d06002fe9ae974e14d91;hb=feb996e3ab44e68082c97102556ea396f5df3f44;hp=173f2302030de2791d9991926e7590c5be7a1aa3;hpb=16e29f30e3483568a36dba7b37520ea1645d9a2e;p=profile%2Fivi%2Fqtdeclarative.git diff --git a/tests/auto/quick/qquickborderimage/tst_qquickborderimage.cpp b/tests/auto/quick/qquickborderimage/tst_qquickborderimage.cpp index 173f230..30994b7 100644 --- a/tests/auto/quick/qquickborderimage/tst_qquickborderimage.cpp +++ b/tests/auto/quick/qquickborderimage/tst_qquickborderimage.cpp @@ -44,6 +44,7 @@ #include #include #include +#include #include #include @@ -60,6 +61,8 @@ #define SERVER_PORT 14446 #define SERVER_ADDR "http://127.0.0.1:14446" +Q_DECLARE_METATYPE(QQuickImageBase::Status) + class tst_qquickborderimage : public QQmlDataTest { @@ -68,6 +71,7 @@ public: tst_qquickborderimage(); private slots: + void cleanup(); void noSource(); void imageSource(); void imageSource_data(); @@ -79,13 +83,26 @@ private slots: void sciSource(); void sciSource_data(); void invalidSciFile(); + void validSciFiles_data(); + void validSciFiles(); void pendingRemoteRequest(); void pendingRemoteRequest_data(); + void statusChanges(); + void statusChanges_data(); + void sourceSizeChanges(); + void progressAndStatusChanges(); private: QQmlEngine engine; }; +void tst_qquickborderimage::cleanup() +{ + QQuickWindow window; + window.releaseResources(); + engine.clearComponentCache(); +} + tst_qquickborderimage::tst_qquickborderimage() { } @@ -181,6 +198,8 @@ void tst_qquickborderimage::clearSource() QVERIFY(obj->status() == QQuickBorderImage::Null); QCOMPARE(obj->width(), 0.); QCOMPARE(obj->height(), 0.); + + delete obj; } void tst_qquickborderimage::resized() @@ -218,12 +237,12 @@ void tst_qquickborderimage::smooth() void tst_qquickborderimage::mirror() { - QQuickView *canvas = new QQuickView; - canvas->setSource(testFileUrl("mirror.qml")); - QQuickBorderImage *image = qobject_cast(canvas->rootObject()); + QQuickView *window = new QQuickView; + window->setSource(testFileUrl("mirror.qml")); + QQuickBorderImage *image = qobject_cast(window->rootObject()); QVERIFY(image != 0); - QImage screenshot = canvas->grabFrameBuffer(); + QImage screenshot = window->grabWindow(); QImage srcPixmap(screenshot); QTransform transform; @@ -231,10 +250,10 @@ void tst_qquickborderimage::mirror() srcPixmap = srcPixmap.transformed(transform); image->setProperty("mirror", true); - screenshot = canvas->grabFrameBuffer(); + screenshot = window->grabWindow(); QCOMPARE(screenshot, srcPixmap); - delete canvas; + delete window; } void tst_qquickborderimage::tileModes() @@ -342,6 +361,33 @@ void tst_qquickborderimage::invalidSciFile() delete obj; } +void tst_qquickborderimage::validSciFiles_data() +{ + QTest::addColumn("source"); + + QTest::newRow("valid1") << testFileUrl("valid1.sci").toString(); + QTest::newRow("valid2") << testFileUrl("valid2.sci").toString(); + QTest::newRow("valid3") << testFileUrl("valid3.sci").toString(); + QTest::newRow("valid4") << testFileUrl("valid4.sci").toString(); +} + +void tst_qquickborderimage::validSciFiles() +{ + QFETCH(QString, source); + + QString componentStr = "import QtQuick 2.0\nBorderImage { source: \"" + source +"\"; width: 300; height: 300 }"; + QQmlComponent component(&engine); + component.setData(componentStr.toLatin1(), QUrl::fromLocalFile("")); + QQuickBorderImage *obj = qobject_cast(component.create()); + QVERIFY(obj != 0); + QCOMPARE(obj->width(), 300.); + QCOMPARE(obj->height(), 300.); + QCOMPARE(obj->horizontalTileMode(), QQuickBorderImage::Round); + QCOMPARE(obj->verticalTileMode(), QQuickBorderImage::Repeat); + + delete obj; +} + void tst_qquickborderimage::pendingRemoteRequest() { QFETCH(QString, source); @@ -367,6 +413,175 @@ void tst_qquickborderimage::pendingRemoteRequest_data() QTest::newRow("sci file") << "http://localhost/none.sci"; } +//QTBUG-26155 +void tst_qquickborderimage::statusChanges_data() +{ + QTest::addColumn("source"); + QTest::addColumn("emissions"); + QTest::addColumn("remote"); + QTest::addColumn("finalStatus"); + + QTest::newRow("localfile") << testFileUrl("colors.png").toString() << 1 << false << QQuickImageBase::Ready; + QTest::newRow("nofile") << "" << 0 << false << QQuickImageBase::Null; + QTest::newRow("nonexistent") << testFileUrl("thisfiledoesnotexist.png").toString() << 1 << false << QQuickImageBase::Error; + QTest::newRow("noprotocol") << QString("thisfiledoesnotexisteither.png") << 2 << false << QQuickImageBase::Error; + QTest::newRow("remote") << "http://localhost:14446/colors.png" << 2 << true << QQuickImageBase::Ready; +} + +void tst_qquickborderimage::statusChanges() +{ + QFETCH(QString, source); + QFETCH(int, emissions); + QFETCH(bool, remote); + QFETCH(QQuickImageBase::Status, finalStatus); + + TestHTTPServer *server = 0; + if (remote) { + server = new TestHTTPServer(SERVER_PORT); + QVERIFY(server->isValid()); + server->serveDirectory(dataDirectory(), TestHTTPServer::Delay); + } + + QString componentStr = "import QtQuick 2.0\nBorderImage { width: 300; height: 300 }"; + QQmlComponent component(&engine); + component.setData(componentStr.toLatin1(), QUrl("")); + + QQuickBorderImage *obj = qobject_cast(component.create()); + qRegisterMetaType(); + QSignalSpy spy(obj, SIGNAL(statusChanged(QQuickImageBase::Status))); + QVERIFY(obj != 0); + obj->setSource(source); + QTRY_VERIFY(obj->status() == finalStatus); + QCOMPARE(spy.count(), emissions); + + delete obj; + delete server; +} + +void tst_qquickborderimage::sourceSizeChanges() +{ + TestHTTPServer server(14449); + QVERIFY(server.isValid()); + server.serveDirectory(dataDirectory()); + + QQmlEngine engine; + QQmlComponent component(&engine); + component.setData("import QtQuick 2.0\nBorderImage { source: srcImage }", QUrl::fromLocalFile("")); + QTRY_VERIFY(component.isReady()); + QQmlContext *ctxt = engine.rootContext(); + ctxt->setContextProperty("srcImage", ""); + QQuickBorderImage *obj = qobject_cast(component.create()); + QVERIFY(obj != 0); + + QSignalSpy sourceSizeSpy(obj, SIGNAL(sourceSizeChanged())); + + // Local + ctxt->setContextProperty("srcImage", QUrl("")); + QTRY_COMPARE(obj->status(), QQuickBorderImage::Null); + QTRY_COMPARE(sourceSizeSpy.count(), 0); + + ctxt->setContextProperty("srcImage", testFileUrl("heart200.png")); + QTRY_COMPARE(obj->status(), QQuickBorderImage::Ready); + QTRY_COMPARE(sourceSizeSpy.count(), 1); + + ctxt->setContextProperty("srcImage", testFileUrl("heart200.png")); + QTRY_COMPARE(obj->status(), QQuickBorderImage::Ready); + QTRY_COMPARE(sourceSizeSpy.count(), 1); + + ctxt->setContextProperty("srcImage", testFileUrl("heart200_copy.png")); + QTRY_COMPARE(obj->status(), QQuickBorderImage::Ready); + QTRY_COMPARE(sourceSizeSpy.count(), 1); + + ctxt->setContextProperty("srcImage", testFileUrl("colors.png")); + QTRY_COMPARE(obj->status(), QQuickBorderImage::Ready); + QTRY_COMPARE(sourceSizeSpy.count(), 2); + + ctxt->setContextProperty("srcImage", QUrl("")); + QTRY_COMPARE(obj->status(), QQuickBorderImage::Null); + QTRY_COMPARE(sourceSizeSpy.count(), 3); + + // Remote + ctxt->setContextProperty("srcImage", QUrl("http://127.0.0.1:14449/heart200.png")); + QTRY_COMPARE(obj->status(), QQuickBorderImage::Ready); + QTRY_COMPARE(sourceSizeSpy.count(), 4); + + ctxt->setContextProperty("srcImage", QUrl("http://127.0.0.1:14449/heart200.png")); + QTRY_COMPARE(obj->status(), QQuickBorderImage::Ready); + QTRY_COMPARE(sourceSizeSpy.count(), 4); + + ctxt->setContextProperty("srcImage", QUrl("http://127.0.0.1:14449/heart200_copy.png")); + QTRY_COMPARE(obj->status(), QQuickBorderImage::Ready); + QTRY_COMPARE(sourceSizeSpy.count(), 4); + + ctxt->setContextProperty("srcImage", QUrl("http://127.0.0.1:14449/colors.png")); + QTRY_COMPARE(obj->status(), QQuickBorderImage::Ready); + QTRY_COMPARE(sourceSizeSpy.count(), 5); + + ctxt->setContextProperty("srcImage", QUrl("")); + QTRY_COMPARE(obj->status(), QQuickBorderImage::Null); + QTRY_COMPARE(sourceSizeSpy.count(), 6); + + delete obj; +} + +void tst_qquickborderimage::progressAndStatusChanges() +{ + TestHTTPServer server(14449); + QVERIFY(server.isValid()); + server.serveDirectory(dataDirectory()); + + QQmlEngine engine; + QString componentStr = "import QtQuick 2.0\nBorderImage { source: srcImage }"; + QQmlContext *ctxt = engine.rootContext(); + ctxt->setContextProperty("srcImage", testFileUrl("heart200.png")); + QQmlComponent component(&engine); + component.setData(componentStr.toLatin1(), QUrl::fromLocalFile("")); + QQuickBorderImage *obj = qobject_cast(component.create()); + QVERIFY(obj != 0); + QVERIFY(obj->status() == QQuickBorderImage::Ready); + QTRY_VERIFY(obj->progress() == 1.0); + + qRegisterMetaType(); + QSignalSpy sourceSpy(obj, SIGNAL(sourceChanged(const QUrl &))); + QSignalSpy progressSpy(obj, SIGNAL(progressChanged(qreal))); + QSignalSpy statusSpy(obj, SIGNAL(statusChanged(QQuickImageBase::Status))); + + // Same file + ctxt->setContextProperty("srcImage", testFileUrl("heart200.png")); + QTRY_VERIFY(obj->status() == QQuickBorderImage::Ready); + QTRY_VERIFY(obj->progress() == 1.0); + QTRY_COMPARE(sourceSpy.count(), 0); + QTRY_COMPARE(progressSpy.count(), 0); + QTRY_COMPARE(statusSpy.count(), 0); + + // Loading local file + ctxt->setContextProperty("srcImage", testFileUrl("colors.png")); + QTRY_VERIFY(obj->status() == QQuickBorderImage::Ready); + QTRY_VERIFY(obj->progress() == 1.0); + QTRY_COMPARE(sourceSpy.count(), 1); + QTRY_COMPARE(progressSpy.count(), 0); + QTRY_COMPARE(statusSpy.count(), 1); + + // Loading remote file + ctxt->setContextProperty("srcImage", "http://127.0.0.1:14449/heart200.png"); + QTRY_VERIFY(obj->status() == QQuickBorderImage::Loading); + QTRY_VERIFY(obj->progress() == 0.0); + QTRY_VERIFY(obj->status() == QQuickBorderImage::Ready); + QTRY_VERIFY(obj->progress() == 1.0); + QTRY_COMPARE(sourceSpy.count(), 2); + QTRY_VERIFY(progressSpy.count() > 1); + QTRY_COMPARE(statusSpy.count(), 3); + + ctxt->setContextProperty("srcImage", ""); + QTRY_VERIFY(obj->status() == QQuickBorderImage::Null); + QTRY_VERIFY(obj->progress() == 0.0); + QTRY_COMPARE(sourceSpy.count(), 3); + QTRY_VERIFY(progressSpy.count() > 2); + QTRY_COMPARE(statusSpy.count(), 4); + + delete obj; +} + QTEST_MAIN(tst_qquickborderimage) #include "tst_qquickborderimage.moc"