diff options
-rw-r--r-- | autotests/CMakeLists.txt | 4 | ||||
-rw-r--r-- | autotests/fallbackconfigresources.qrc | 5 | ||||
-rw-r--r-- | autotests/fallbackconfigresourcestest.cpp | 49 | ||||
-rw-r--r-- | src/core/kconfig.cpp | 6 |
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 { |