summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorCaroline Chao <caroline.chao@theqtcompany.com>2015-04-28 13:40:26 +0200
committerCaroline Chao <caroline.chao@theqtcompany.com>2015-05-05 07:06:52 +0000
commit96527f74e253817ce1c7ac67346d6bfd849802ab (patch)
treebffdd874b93e001ec737df2ca7e12708b5c22edd /src
parent4c8bbf8dda02a2e1f40d8b13911dbf055fbb5fcc (diff)
TestCase: Also check main source path when looking for test data
This is for example useful when looking for a possible BLACKLIST file while doing a shadow build. Add autotests for blacklist. Change-Id: I41d3939d31d21d10187fefcb82604736d911b6ad Reviewed-by: Friedemann Kleint <Friedemann.Kleint@theqtcompany.com> Reviewed-by: Simon Hausmann <simon.hausmann@theqtcompany.com>
Diffstat (limited to 'src')
-rw-r--r--src/testlib/qtest.h11
-rw-r--r--src/testlib/qtestcase.cpp21
-rw-r--r--src/testlib/qtestcase.h2
3 files changed, 34 insertions, 0 deletions
diff --git a/src/testlib/qtest.h b/src/testlib/qtest.h
index 81cc07c410..70e923927b 100644
--- a/src/testlib/qtest.h
+++ b/src/testlib/qtest.h
@@ -274,10 +274,17 @@ inline bool qCompare(quint32 const &t1, quint64 const &t2, const char *actual,
}
QT_END_NAMESPACE
+#ifdef QT_TESTCASE_BUILDDIR
+# define QTEST_SET_MAIN_SOURCE_PATH QTest::setMainSourcePath(__FILE__, QT_TESTCASE_BUILDDIR);
+#else
+# define QTEST_SET_MAIN_SOURCE_PATH QTest::setMainSourcePath(__FILE__);
+#endif
+
#define QTEST_APPLESS_MAIN(TestObject) \
int main(int argc, char *argv[]) \
{ \
TestObject tc; \
+ QTEST_SET_MAIN_SOURCE_PATH \
return QTest::qExec(&tc, argc, argv); \
}
@@ -300,6 +307,7 @@ int main(int argc, char *argv[]) \
app.setAttribute(Qt::AA_Use96Dpi, true); \
QTEST_DISABLE_KEYPAD_NAVIGATION \
TestObject tc; \
+ QTEST_SET_MAIN_SOURCE_PATH \
return QTest::qExec(&tc, argc, argv); \
}
@@ -313,6 +321,7 @@ int main(int argc, char *argv[]) \
QGuiApplication app(argc, argv); \
app.setAttribute(Qt::AA_Use96Dpi, true); \
TestObject tc; \
+ QTEST_SET_MAIN_SOURCE_PATH \
return QTest::qExec(&tc, argc, argv); \
}
@@ -324,6 +333,7 @@ int main(int argc, char *argv[]) \
QCoreApplication app(argc, argv); \
app.setAttribute(Qt::AA_Use96Dpi, true); \
TestObject tc; \
+ QTEST_SET_MAIN_SOURCE_PATH \
return QTest::qExec(&tc, argc, argv); \
}
@@ -335,6 +345,7 @@ int main(int argc, char *argv[]) \
QCoreApplication app(argc, argv); \
app.setAttribute(Qt::AA_Use96Dpi, true); \
TestObject tc; \
+ QTEST_SET_MAIN_SOURCE_PATH \
return QTest::qExec(&tc, argc, argv); \
}
diff --git a/src/testlib/qtestcase.cpp b/src/testlib/qtestcase.cpp
index e2f98c2f04..b76e5544ba 100644
--- a/src/testlib/qtestcase.cpp
+++ b/src/testlib/qtestcase.cpp
@@ -1332,6 +1332,7 @@ static bool installCoverageTool(const char * appname, const char * testname)
namespace QTest
{
static QObject *currentTestObject = 0;
+ static QString mainSourcePath;
class TestFunction {
public:
@@ -2932,6 +2933,13 @@ QString QTest::qFindTestData(const QString& base, const char *file, int line, co
found = candidate;
}
+ // 6. Try main source directory
+ if (found.isEmpty()) {
+ QString candidate = QTest::mainSourcePath % QLatin1Char('/') % base;
+ if (QFileInfo(candidate).exists())
+ found = candidate;
+ }
+
if (found.isEmpty()) {
QTest::qWarn(qPrintable(
QString::fromLatin1("testdata %1 could not be located!").arg(base)),
@@ -3119,6 +3127,19 @@ QObject *QTest::testObject()
}
/*! \internal
+ */
+void QTest::setMainSourcePath(const char *file, const char *builddir)
+{
+ QString mainSourceFile = QFile::decodeName(file);
+ QFileInfo fi;
+ if (builddir)
+ fi.setFile(QDir(QFile::decodeName(builddir)), mainSourceFile);
+ else
+ fi.setFile(mainSourceFile);
+ QTest::mainSourcePath = fi.absolutePath();
+}
+
+/*! \internal
This function is called by various specializations of QTest::qCompare
to decide whether to report a failure and to produce verbose test output.
diff --git a/src/testlib/qtestcase.h b/src/testlib/qtestcase.h
index 45290de6de..2c6a94faa1 100644
--- a/src/testlib/qtestcase.h
+++ b/src/testlib/qtestcase.h
@@ -236,6 +236,8 @@ namespace QTest
Q_TESTLIB_EXPORT int qExec(QObject *testObject, int argc = 0, char **argv = 0);
Q_TESTLIB_EXPORT int qExec(QObject *testObject, const QStringList &arguments);
+ Q_TESTLIB_EXPORT void setMainSourcePath(const char *file, const char *builddir = 0);
+
Q_TESTLIB_EXPORT bool qVerify(bool statement, const char *statementStr, const char *description,
const char *file, int line);
Q_TESTLIB_EXPORT void qFail(const char *statementStr, const char *file, int line);