aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristoph Cullmann <cullmann@kde.org>2015-10-17 14:32:47 +0200
committerChristoph Cullmann <cullmann@kde.org>2015-10-17 14:32:47 +0200
commitc79edee12bfc7ef50ce9587ce2beb419b3e14f45 (patch)
tree36736562f2699420c9083e3e81c0cf865f5e616a
parent0e618f832e5ec3862a4acbbfd475153b7ec3c12d (diff)
downloadkconfig-c79edee12bfc7ef50ce9587ce2beb419b3e14f45.tar.gz
kconfig-c79edee12bfc7ef50ce9587ce2beb419b3e14f45.tar.bz2
Allow KConfig to use resources as fallback config files
Fallback will be :/kconfig/ REVIEW: 125598
-rw-r--r--autotests/CMakeLists.txt4
-rw-r--r--autotests/fallbackconfigresources.qrc5
-rw-r--r--autotests/fallbackconfigresourcestest.cpp49
-rw-r--r--src/core/kconfig.cpp6
4 files changed, 63 insertions, 1 deletions
diff --git a/autotests/CMakeLists.txt b/autotests/CMakeLists.txt
index 8213bc41..96c7b65e 100644
--- a/autotests/CMakeLists.txt
+++ b/autotests/CMakeLists.txt
@@ -35,7 +35,9 @@ qt5_add_resources(sharedconfigresources sharedconfigresources.qrc)
ecm_add_test(ksharedconfigtest ${sharedconfigresources} TEST_NAME kconfigcore-ksharedconfigtest LINK_LIBRARIES KF5::ConfigCore Qt5::Test Qt5::Concurrent)
-
+# test for fallback to :/kconfig/xxxx config resource
+qt5_add_resources(fallbackconfigresources fallbackconfigresources.qrc)
+ecm_add_test(fallbackconfigresourcestest ${fallbackconfigresources} TEST_NAME kconfigcore-fallbackconfigresourcestest LINK_LIBRARIES KF5::ConfigCore Qt5::Test Qt5::Concurrent)
ecm_add_tests(
kconfignokdehometest.cpp
diff --git a/autotests/fallbackconfigresources.qrc b/autotests/fallbackconfigresources.qrc
new file mode 100644
index 00000000..0a395717
--- /dev/null
+++ b/autotests/fallbackconfigresources.qrc
@@ -0,0 +1,5 @@
+<!DOCTYPE RCC><RCC version="1.0">
+ <qresource prefix="/kconfig">
+ <file alias="kconfigtesting">test.ini</file>
+ </qresource>
+</RCC>
diff --git a/autotests/fallbackconfigresourcestest.cpp b/autotests/fallbackconfigresourcestest.cpp
new file mode 100644
index 00000000..f921031e
--- /dev/null
+++ b/autotests/fallbackconfigresourcestest.cpp
@@ -0,0 +1,49 @@
+/*
+ This file is part of the KDE libraries
+ Copyright (c) 2015 Christoph Cullmann <cullmann@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+
+#include <QtTest>
+#include <ksharedconfig.h>
+#include <kconfiggroup.h>
+
+class FallbackConfigResourcesTest : public QObject
+{
+ Q_OBJECT
+private Q_SLOTS:
+ void initTestCase();
+ void testResourceFallbackFile();
+};
+
+void FallbackConfigResourcesTest::initTestCase()
+{
+ QStandardPaths::enableTestMode(true);
+}
+
+void FallbackConfigResourcesTest::testResourceFallbackFile()
+{
+ KSharedConfig::Ptr sharedConfig = KSharedConfig::openConfig(QStringLiteral("kconfigtesting"), KConfig::NoGlobals);
+ QVERIFY(sharedConfig);
+
+ KConfigGroup cfg(sharedConfig, QStringLiteral("MainSection"));
+ QCOMPARE(cfg.readEntry(QStringLiteral("TestEntry"), QStringLiteral("UnexpectedData")), QStringLiteral("ExpectedData"));
+}
+
+QTEST_MAIN(FallbackConfigResourcesTest)
+
+#include "fallbackconfigresourcestest.moc"
diff --git a/src/core/kconfig.cpp b/src/core/kconfig.cpp
index 7f03869b..07fa6f55 100644
--- a/src/core/kconfig.cpp
+++ b/src/core/kconfig.cpp
@@ -713,6 +713,12 @@ void KConfigPrivate::parseConfigFiles()
Q_FOREACH (const QString &f, QStandardPaths::locateAll(resourceType, fileName)) {
files.prepend(f);
}
+
+ // allow fallback to config files bundled in resources
+ const QString resourceFile(QStringLiteral(":/kconfig/") + fileName);
+ if (QFile::exists(resourceFile)) {
+ files.prepend(resourceFile);
+ }
}
}
} else {