From: Michael Brasser Date: Fri, 7 Oct 2011 03:19:13 +0000 (+1000) Subject: Generic solution for finding QtDeclarative test data. X-Git-Url: http://git.silmor.de/gitweb/?a=commitdiff_plain;h=a97b909363b28ce20c753558ba730e759b9ed285;p=konrad%2Fqtdeclarative.git Generic solution for finding QtDeclarative test data. Also implemented changes for qsgrepeater test to verify. Task-number: QTBUG-21721 Change-Id: Ia5a839d1a23ba0f6ee144450ec026b74ee72134b Reviewed-on: http://codereview.qt-project.org/6203 Sanity-Review: Qt Sanity Bot Reviewed-by: Rohan McGovern --- diff --git a/tests/auto/declarative/qsgrepeater/qsgrepeater.pro b/tests/auto/declarative/qsgrepeater/qsgrepeater.pro index f6ef6e8..aa6e44d 100644 --- a/tests/auto/declarative/qsgrepeater/qsgrepeater.pro +++ b/tests/auto/declarative/qsgrepeater/qsgrepeater.pro @@ -4,7 +4,9 @@ macx:CONFIG -= app_bundle SOURCES += tst_qsgrepeater.cpp -DEFINES += SRCDIR=\\\"$$PWD\\\" +testFiles.files = data +testFiles.path = . +DEPLOYMENT += testFiles CONFIG += parallel_test QT += core-private gui-private declarative-private diff --git a/tests/auto/declarative/qsgrepeater/tst_qsgrepeater.cpp b/tests/auto/declarative/qsgrepeater/tst_qsgrepeater.cpp index 7143ff8..cb8b81e 100644 --- a/tests/auto/declarative/qsgrepeater/tst_qsgrepeater.cpp +++ b/tests/auto/declarative/qsgrepeater/tst_qsgrepeater.cpp @@ -49,9 +49,11 @@ #include #include +#include "../shared/util.h" + inline QUrl TEST_FILE(const QString &filename) { - return QUrl::fromLocalFile(QLatin1String(SRCDIR) + QLatin1String("/data/") + filename); + return QUrl::fromLocalFile(TESTDATA(filename)); } class tst_QSGRepeater : public QObject @@ -178,7 +180,7 @@ void tst_QSGRepeater::numberModel() TestObject *testObject = new TestObject; ctxt->setContextProperty("testObject", testObject); - canvas->setSource(QUrl::fromLocalFile(SRCDIR "/data/intmodel.qml")); + canvas->setSource(TEST_FILE("intmodel.qml")); qApp->processEvents(); QSGRepeater *repeater = findItem(canvas->rootObject(), "repeater"); @@ -219,7 +221,7 @@ void tst_QSGRepeater::objectList() QDeclarativeContext *ctxt = canvas->rootContext(); ctxt->setContextProperty("testData", QVariant::fromValue(data)); - canvas->setSource(QUrl::fromLocalFile(SRCDIR "/data/objlist.qml")); + canvas->setSource(TEST_FILE("objlist.qml")); qApp->processEvents(); QSGRepeater *repeater = findItem(canvas->rootObject(), "repeater"); @@ -260,7 +262,7 @@ void tst_QSGRepeater::stringList() QDeclarativeContext *ctxt = canvas->rootContext(); ctxt->setContextProperty("testData", data); - canvas->setSource(QUrl::fromLocalFile(SRCDIR "/data/repeater1.qml")); + canvas->setSource(TEST_FILE("repeater1.qml")); qApp->processEvents(); QSGRepeater *repeater = findItem(canvas->rootObject(), "repeater"); @@ -308,7 +310,7 @@ void tst_QSGRepeater::dataModel_adding() TestModel testModel; ctxt->setContextProperty("testData", &testModel); - canvas->setSource(QUrl::fromLocalFile(SRCDIR "/data/repeater2.qml")); + canvas->setSource(TEST_FILE("repeater2.qml")); qApp->processEvents(); QSGRepeater *repeater = findItem(canvas->rootObject(), "repeater"); @@ -378,7 +380,7 @@ void tst_QSGRepeater::dataModel_removing() testModel.addItem("five", "5"); ctxt->setContextProperty("testData", &testModel); - canvas->setSource(QUrl::fromLocalFile(SRCDIR "/data/repeater2.qml")); + canvas->setSource(TEST_FILE("repeater2.qml")); qApp->processEvents(); QSGRepeater *repeater = findItem(canvas->rootObject(), "repeater"); @@ -444,7 +446,7 @@ void tst_QSGRepeater::dataModel_changes() testModel.addItem("three", "3"); ctxt->setContextProperty("testData", &testModel); - canvas->setSource(QUrl::fromLocalFile(SRCDIR "/data/repeater2.qml")); + canvas->setSource(TEST_FILE("repeater2.qml")); qApp->processEvents(); QSGRepeater *repeater = findItem(canvas->rootObject(), "repeater"); @@ -478,7 +480,7 @@ void tst_QSGRepeater::itemModel() TestObject *testObject = new TestObject; ctxt->setContextProperty("testObject", testObject); - canvas->setSource(QUrl::fromLocalFile(SRCDIR "/data/itemlist.qml")); + canvas->setSource(TEST_FILE("itemlist.qml")); qApp->processEvents(); QSGRepeater *repeater = findItem(canvas->rootObject(), "repeater"); @@ -522,7 +524,7 @@ void tst_QSGRepeater::resetModel() QDeclarativeContext *ctxt = canvas->rootContext(); ctxt->setContextProperty("testData", dataA); - canvas->setSource(QUrl::fromLocalFile(SRCDIR "/data/repeater1.qml")); + canvas->setSource(TEST_FILE("repeater1.qml")); qApp->processEvents(); QSGRepeater *repeater = findItem(canvas->rootObject(), "repeater"); QVERIFY(repeater != 0); @@ -584,7 +586,7 @@ void tst_QSGRepeater::resetModel() void tst_QSGRepeater::modelChanged() { QDeclarativeEngine engine; - QDeclarativeComponent component(&engine, TEST_FILE("/modelChanged.qml")); + QDeclarativeComponent component(&engine, TEST_FILE("modelChanged.qml")); QSGItem *rootObject = qobject_cast(component.create()); QVERIFY(rootObject); @@ -607,7 +609,7 @@ void tst_QSGRepeater::modelChanged() void tst_QSGRepeater::properties() { QDeclarativeEngine engine; - QDeclarativeComponent component(&engine, TEST_FILE("/properties.qml")); + QDeclarativeComponent component(&engine, TEST_FILE("properties.qml")); QSGItem *rootObject = qobject_cast(component.create()); QVERIFY(rootObject); diff --git a/tests/auto/declarative/shared/util.h b/tests/auto/declarative/shared/util.h new file mode 100644 index 0000000..f353eab --- /dev/null +++ b/tests/auto/declarative/shared/util.h @@ -0,0 +1,84 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the test suite of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** GNU Lesser General Public License Usage +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this +** file. Please review the following information to ensure the GNU Lesser +** General Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU General +** Public License version 3.0 as published by the Free Software Foundation +** and appearing in the file LICENSE.GPL included in the packaging of this +** file. Please review the following information to ensure the GNU General +** Public License version 3.0 requirements will be met: +** http://www.gnu.org/copyleft/gpl.html. +** +** Other Usage +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QDECLARATIVETESTUTILS_H +#define QDECLARATIVETESTUTILS_H + +#include + +namespace QDeclarativeTestUtils +{ + /* + Returns the path to some testdata file. + + We first check relative to the binary, and then look in the source tree. + + Note we are looking for a _directory_ which exists, but the _file_ itself need not exist, + to support the case of finding a path to a testdata file which doesn't exist yet (i.e. + a file we are about to create). + */ + QString testdata(QString const& name, const char *sourceFile) + { + // Try to find it relative to the binary. + QFileInfo relative = QDir(QCoreApplication::applicationDirPath()).filePath(QLatin1String("data/") + name); + if (relative.dir().exists()) { + return relative.absoluteFilePath(); + } + + // Else try to find it in the source tree + QFileInfo from_source = QFileInfo(sourceFile).absoluteDir().filePath(QLatin1String("data/") + name); + if (from_source.dir().exists()) { + return from_source.absoluteFilePath(); + } + + qWarning("requested testdata %s could not be found (looked at: %s, %s)", + qPrintable(name), + qPrintable(relative.filePath()), + qPrintable(from_source.filePath()) + ); + + return QString(); + } +} + +#define TESTDATA(name) QDeclarativeTestUtils::testdata(name, __FILE__) + +#endif // QDECLARATIVETESTUTILS_H