diff options
Diffstat (limited to 'tests/auto/testlib/selftests/findtestdata')
3 files changed, 156 insertions, 0 deletions
diff --git a/tests/auto/testlib/selftests/findtestdata/findtestdata.cpp b/tests/auto/testlib/selftests/findtestdata/findtestdata.cpp new file mode 100644 index 0000000000..473ba19798 --- /dev/null +++ b/tests/auto/testlib/selftests/findtestdata/findtestdata.cpp @@ -0,0 +1,144 @@ +/**************************************************************************** +** +** 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$ +** +****************************************************************************/ + + +#include <QtCore/QtCore> +#include <QtTest/QtTest> + +#define TESTFILE "testfile" + +class FindTestData: public QObject +{ + Q_OBJECT +private slots: + void initTestCase(); + void cleanupTestCase(); + + void paths(); + +private: + bool touch(QString const&); +}; + +void FindTestData::initTestCase() +{ + // verify that our qt.conf is working as expected. + QString app_path = QCoreApplication::applicationDirPath(); + QString install_path = app_path + "/tests"; + QVERIFY(QDir("/").mkpath(install_path)); + QVERIFY(QDir("/").mkpath(install_path + "/findtestdata")); + QCOMPARE(QLibraryInfo::location(QLibraryInfo::TestsPath), install_path); + + // make fake source and build directories + QVERIFY(QDir("/").mkpath(app_path + "/fakesrc")); + QVERIFY(QDir("/").mkpath(app_path + "/fakebuild")); +} + +void FindTestData::cleanupTestCase() +{ + QString app_path = QCoreApplication::applicationDirPath(); + QFile(app_path + "/tests/findtestdata/" TESTFILE).remove(); + QFile(app_path + "/tests/" TESTFILE).remove(); + QFile(app_path + "/fakesrc/" TESTFILE).remove(); + QDir("/").rmpath(app_path + "/tests/findtestdata"); + QDir("/").rmpath(app_path + "/fakesrc"); + QDir("/").rmpath(app_path + "/fakebuild"); +} + +// Create an empty file at the specified path (or return false) +bool FindTestData::touch(QString const& path) +{ + QFile file(path); + if (!file.open(QIODevice::WriteOnly)) { + qWarning("Failed to create %s: %s", qPrintable(path), qPrintable(file.errorString())); + return false; + } + return true; +} + +void FindTestData::paths() +{ + // There are three possible locations for the testdata. + // In this test, we will put the testdata at all three locations, + // then remove it from one location at a time and verify that + // QFINDTESTDATA correctly falls back each time. + + // 1. relative to test binary. + QString app_path = QCoreApplication::applicationDirPath(); + QString testfile_path1 = app_path + "/" TESTFILE; + QVERIFY(touch(testfile_path1)); + + // 2. at the test install path (faked via qt.conf) + QString testfile_path2 = app_path + "/tests/findtestdata/" TESTFILE; + QVERIFY(touch(testfile_path2)); + + // 3. at the source path (which we will fake later on) + QString testfile_path3 = app_path + "/fakesrc/" TESTFILE; + QVERIFY(touch(testfile_path3)); + + // OK, all testdata created. Verify that they are found in correct priority order. + + QCOMPARE(QFINDTESTDATA(TESTFILE), testfile_path1); + QVERIFY(QFile(testfile_path1).remove()); + + QCOMPARE(QFINDTESTDATA(TESTFILE), testfile_path2); + QVERIFY(QFile(testfile_path2).remove()); + + // We cannot reasonably redefine __FILE__, so we call the underlying function instead. + // __FILE__ may be absolute or relative path; test both. + + // absolute: + QCOMPARE(QTest::qFindTestData(TESTFILE, qPrintable(app_path + "/fakesrc/fakefile.cpp"), __LINE__), testfile_path3); + + // relative: (pretend that we were compiled within fakebuild directory, pointing at files in ../fakesrc) + QCOMPARE(QTest::qFindTestData(TESTFILE, "../fakesrc/fakefile.cpp", __LINE__, qPrintable(app_path + "/fakebuild")), testfile_path3); + + QVERIFY(QFile(testfile_path3).remove()); + + // Note, this is expected to generate a warning. + // We can't use ignoreMessage, because the warning comes from testlib, + // not via a "normal" qWarning. But it's OK, our caller (tst_selftests) + // will verify that the warning is printed. + QCOMPARE(QFINDTESTDATA(TESTFILE), QString()); +} + +QTEST_MAIN(FindTestData) +#include "findtestdata.moc" diff --git a/tests/auto/testlib/selftests/findtestdata/findtestdata.pro b/tests/auto/testlib/selftests/findtestdata/findtestdata.pro new file mode 100644 index 0000000000..6e072aeb6f --- /dev/null +++ b/tests/auto/testlib/selftests/findtestdata/findtestdata.pro @@ -0,0 +1,8 @@ +SOURCES += findtestdata.cpp +QT = core testlib + +mac:CONFIG -= app_bundle +CONFIG -= debug_and_release_target + + +TARGET = findtestdata diff --git a/tests/auto/testlib/selftests/findtestdata/qt.conf b/tests/auto/testlib/selftests/findtestdata/qt.conf new file mode 100644 index 0000000000..f65543c63c --- /dev/null +++ b/tests/auto/testlib/selftests/findtestdata/qt.conf @@ -0,0 +1,4 @@ +# This file does not need to contain anything. +# Its mere presence will cause this directory to be treated as the +# Qt install prefix. The findtestdata test uses this to "fake" the +# tests install path. |