aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Richardson <arichardson.kde@gmail.com>2014-05-07 20:40:48 +0200
committerAlex Richardson <arichardson.kde@gmail.com>2014-05-07 20:48:16 +0200
commit94419b6f0cd469dc7cb0184a6fb48c1fe304c4d8 (patch)
tree1171622e05b6c1d4dc2cc02e0ced0f8af7a227bc
parent7544b8344254cc60dc18fac564ca5f24c52ce66b (diff)
downloadkconfig-94419b6f0cd469dc7cb0184a6fb48c1fe304c4d8.tar.gz
kconfig-94419b6f0cd469dc7cb0184a6fb48c1fe304c4d8.tar.bz2
Fix kconf_update test on Windows
We get a CMake warning for reading the LOCATION property, but I don't see how else to do it (generator expressions don't seem to work)
-rw-r--r--autotests/test_kconf_update.cpp32
-rw-r--r--src/kconf_update/CMakeLists.txt5
-rw-r--r--src/kconf_update/config-kconf.h.cmake2
-rw-r--r--src/kconf_update/kconf_update.cpp3
4 files changed, 34 insertions, 8 deletions
diff --git a/autotests/test_kconf_update.cpp b/autotests/test_kconf_update.cpp
index 90faf989..d4f5c52d 100644
--- a/autotests/test_kconf_update.cpp
+++ b/autotests/test_kconf_update.cpp
@@ -49,7 +49,12 @@ static QString readFile(const QString &path)
bool ok = file.open(QIODevice::ReadOnly);
Q_UNUSED(ok) // silence warnings
Q_ASSERT(ok);
- return QString::fromUtf8(file.readAll());
+ QString ret = QString::fromUtf8(file.readAll());
+#ifdef Q_OS_WIN
+ // KConfig always writes files with the native line ending, the test comparison uses \n
+ ret.replace("\r\n", "\n");
+#endif
+ return ret;
}
static QTemporaryFile *writeUpdFile(const QString &content)
@@ -65,9 +70,8 @@ static QTemporaryFile *writeUpdFile(const QString &content)
static void runKConfUpdate(const QString &updPath)
{
- QString exePath = KCONF_UPDATE_BINARY_DIR "/kconf_update";
- QVERIFY(QFile::exists(exePath));
- QProcess::execute(exePath, QStringList() << "--debug" << updPath);
+ QVERIFY(QFile::exists(KCONF_UPDATE_EXECUTABLE));
+ QCOMPARE(0, QProcess::execute(KCONF_UPDATE_EXECUTABLE, QStringList() << "--debug" << updPath));
}
void TestKConfUpdate::test_data()
@@ -265,6 +269,7 @@ void TestKConfUpdate::test()
QFile::remove(newConfPath);
writeFile(oldConfPath, oldConfContent);
+ QCOMPARE(readFile(oldConfPath), oldConfContent);
QSharedPointer<QTemporaryFile> updFile(writeUpdFile(updContent));
runKConfUpdate(updFile->fileName());
@@ -285,6 +290,12 @@ void TestKConfUpdate::test()
void TestKConfUpdate::testScript_data()
{
+#ifdef Q_OS_WIN
+ // add sh.exe and sed.exe to PATH on Windows
+ // uncomment and adapt path to run all tests
+ // qputenv("PATH", qgetenv("PATH") + ";C:\\kde\\msys\\bin");
+#endif
+
QTest::addColumn<QString>("updContent");
QTest::addColumn<QString>("updScript");
QTest::addColumn<QString>("oldConfContent");
@@ -474,7 +485,10 @@ void TestKConfUpdate::testScript_data()
"new=value3\n"
;
- QTest::newRow("filter")
+ if (QStandardPaths::findExecutable("sed").isEmpty()) {
+ qWarning("sed executable not found, cannot run all tests!");
+ } else {
+ QTest::newRow("filter")
<<
"File=testrc\n"
"Script=test.sh,sh\n"
@@ -519,10 +533,16 @@ void TestKConfUpdate::testScript_data()
"changed=VALUE\n"
"unchanged=value\n"
;
+ }
}
void TestKConfUpdate::testScript()
{
+ if (QStandardPaths::findExecutable("sh").isEmpty()) {
+ QSKIP("Could not find sh executable, cannot run test");
+ return;
+ }
+
QFETCH(QString, updContent);
QFETCH(QString, updScript);
QFETCH(QString, oldConfContent);
@@ -537,9 +557,11 @@ void TestKConfUpdate::testScript()
QVERIFY(QDir().mkpath(scriptDir));
QString scriptPath = scriptDir + "/test.sh";
writeFile(scriptPath, updScript);
+ QCOMPARE(readFile(scriptPath), updScript);
QString confPath = QStandardPaths::writableLocation(QStandardPaths::GenericConfigLocation) + QLatin1Char('/') + "testrc";
writeFile(confPath, oldConfContent);
+ QCOMPARE(readFile(confPath), oldConfContent);
runKConfUpdate(updFile->fileName());
diff --git a/src/kconf_update/CMakeLists.txt b/src/kconf_update/CMakeLists.txt
index f75c31c8..fbee74a7 100644
--- a/src/kconf_update/CMakeLists.txt
+++ b/src/kconf_update/CMakeLists.txt
@@ -2,8 +2,6 @@ find_package(Qt5Core 5.2.0 REQUIRED NO_MODULE)
remove_definitions(-DQT_NO_CAST_FROM_ASCII)
-configure_file(config-kconf.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config-kconf.h )
-
########### next target ###############
set(kconf_update_SRCS
@@ -17,6 +15,9 @@ target_link_libraries(kconf_update Qt5::Core KF5::ConfigCore)
include(ECMMarkNonGuiExecutable)
ecm_mark_nongui_executable(kconf_update)
+get_target_property(KCONF_UPDATE_EXECUTABLE kconf_update LOCATION)
+configure_file(config-kconf.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config-kconf.h )
+
# Although this is mostly an internal binary (hence installing it in
# KF5_LIBEXEC_INSTALL_DIR), it is used by kded, and so we export its location
install(TARGETS kconf_update EXPORT KF5ConfigTargets DESTINATION ${KF5_LIBEXEC_INSTALL_DIR})
diff --git a/src/kconf_update/config-kconf.h.cmake b/src/kconf_update/config-kconf.h.cmake
index 0f70f8c8..a71608d2 100644
--- a/src/kconf_update/config-kconf.h.cmake
+++ b/src/kconf_update/config-kconf.h.cmake
@@ -1,4 +1,4 @@
#define CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}"
#define LIBEXEC_INSTALL_DIR "${LIBEXEC_INSTALL_DIR}"
#define LIB_INSTALL_DIR "${LIB_INSTALL_DIR}"
-#define KCONF_UPDATE_BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}"
+#define KCONF_UPDATE_EXECUTABLE "${KCONF_UPDATE_EXECUTABLE}"
diff --git a/src/kconf_update/kconf_update.cpp b/src/kconf_update/kconf_update.cpp
index e82520c7..1bcbf7da 100644
--- a/src/kconf_update/kconf_update.cpp
+++ b/src/kconf_update/kconf_update.cpp
@@ -174,6 +174,7 @@ QTextStream &
KonfUpdate::log()
{
if (!m_textStream) {
+#if 0
QString dir = QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation) + QLatin1Char('/') + "kconf_update/log";
QDir().mkpath(dir);
QString file = dir + "/update.log";
@@ -184,6 +185,8 @@ KonfUpdate::log()
// Error
m_textStream = new QTextStream(stderr, QIODevice::WriteOnly);
}
+#endif
+ m_textStream = new QTextStream(stderr, QIODevice::WriteOnly);
}
(*m_textStream) << QDateTime::currentDateTime().toString(Qt::ISODate) << " ";