Remove superfluous statusChanged signal
authorDamian Jansen <damian.jansen@nokia.com>
Thu, 14 Jun 2012 06:19:02 +0000 (16:19 +1000)
committerQt by Nokia <qt-info@nokia.com>
Mon, 25 Jun 2012 06:59:12 +0000 (08:59 +0200)
If the file name is empty, or is a local file, statusChanged would be
emitted twice.

Task-number: QTBUG-26155
Change-Id: Id341d1c76d45e3fca19260293f632b0b51a34e90
Reviewed-by: Andrew den Exter <andrew.den-exter@nokia.com>
src/quick/items/qquickborderimage.cpp
tests/auto/quick/qquickborderimage/tst_qquickborderimage.cpp

index 5d4ce7f..87d423f 100644 (file)
@@ -305,6 +305,7 @@ void QQuickBorderImage::load()
         setImplicitSize(0, 0);
         emit statusChanged(d->status);
         update();
+        return;
     } else {
         d->status = Loading;
         if (d->url.path().endsWith(QLatin1String("sci"))) {
@@ -347,6 +348,7 @@ void QQuickBorderImage::load()
                 emit statusChanged(d->status);
                 emit progressChanged(d->progress);
                 update();
+                return;
             }
         }
     }
index c6c3f6c..9bffdbc 100644 (file)
@@ -44,6 +44,7 @@
 #include <QTcpSocket>
 #include <QDir>
 #include <QPainter>
+#include <QSignalSpy>
 
 #include <QtQml/qqmlengine.h>
 #include <QtQml/qqmlcomponent.h>
@@ -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
 
 {
@@ -84,6 +87,9 @@ private slots:
     void pendingRemoteRequest();
     void pendingRemoteRequest_data();
 
+    void statusChanges();
+    void statusChanges_data();
+
 private:
     QQmlEngine engine;
 };
@@ -396,6 +402,51 @@ void tst_qquickborderimage::pendingRemoteRequest_data()
     QTest::newRow("sci file") << "http://localhost/none.sci";
 }
 
+//QTBUG-26155
+void tst_qquickborderimage::statusChanges_data()
+{
+    QTest::addColumn<QString>("source");
+    QTest::addColumn<int>("emissions");
+    QTest::addColumn<bool>("remote");
+    QTest::addColumn<QQuickImageBase::Status>("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<QQuickBorderImage*>(component.create());
+    qRegisterMetaType<QQuickImageBase::Status>();
+    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;
+}
+
 QTEST_MAIN(tst_qquickborderimage)
 
 #include "tst_qquickborderimage.moc"