diff --git a/src/libs/utils/settingsaccessor.cpp b/src/libs/utils/settingsaccessor.cpp index 902511e1222..c2e328be375 100644 --- a/src/libs/utils/settingsaccessor.cpp +++ b/src/libs/utils/settingsaccessor.cpp @@ -394,6 +394,9 @@ SettingsAccessor::ProceedInfo SettingsAccessor::reportIssues(const QVariantMap & const FileName &path, QWidget *parent) const { + if (!path.exists()) + return Continue; + IssueInfo issue = findIssues(data, path); QMessageBox::Icon icon = QMessageBox::Information; @@ -429,9 +432,7 @@ SettingsAccessor::IssueInfo SettingsAccessor::findIssues(const QVariantMap &data const FileName defaultSettingsPath = userFilePath(d->m_baseFile, d->m_userSuffix); int version = versionFromMap(data); - if (!path.exists()) { - return result; - } else if (data.isEmpty() || version < firstSupportedVersion() || version > currentVersion()) { + if (data.isEmpty() || version < firstSupportedVersion() || version > currentVersion()) { result.title = QApplication::translate("Utils::SettingsAccessor", "No Valid Settings Found"); result.message = QApplication::translate("Utils::SettingsAccessor", "
No valid settings file could be found.
" diff --git a/tests/auto/utils/settings/tst_settings.cpp b/tests/auto/utils/settings/tst_settings.cpp index 7a1db7fe44e..cdc824d4d88 100644 --- a/tests/auto/utils/settings/tst_settings.cpp +++ b/tests/auto/utils/settings/tst_settings.cpp @@ -95,6 +95,7 @@ public: } // Make methods public for the tests: + using Utils::SettingsAccessor::findIssues; using Utils::SettingsAccessor::isValidVersionAndId; using Utils::SettingsAccessor::isBetterMatch; using Utils::SettingsAccessor::upgradeSettings; @@ -134,6 +135,13 @@ private slots: void upgradeSettings_partialUpdate(); void upgradeSettings_targetVersionTooOld(); void upgradeSettings_targetVersionTooNew(); + + void findIssues_ok(); + void findIssues_emptyData(); + void findIssues_tooNew(); + void findIssues_tooOld(); + void findIssues_wrongId(); + void findIssues_nonDefaultPath(); }; static QVariantMap versionedMap(int version, const QByteArray &id = QByteArray(), @@ -459,6 +467,84 @@ void tst_SettingsAccessor::upgradeSettings_targetVersionTooNew() QCOMPARE(result, input); } +void tst_SettingsAccessor::findIssues_ok() +{ + const TestSettingsAccessor accessor; + const QVariantMap data = versionedMap(6, TESTACCESSOR_DEFAULT_ID); + const Utils::FileName path = Utils::FileName::fromString("/foo/bar.user"); + + const Utils::SettingsAccessor::IssueInfo info = accessor.findIssues(data, path); + + QVERIFY(info.title.isEmpty()); + QVERIFY(info.message.isEmpty()); + QVERIFY(info.buttons.isEmpty()); +} + +void tst_SettingsAccessor::findIssues_emptyData() +{ + const TestSettingsAccessor accessor; + const QVariantMap data; + const Utils::FileName path = Utils::FileName::fromString("/foo/bar.user"); + + const Utils::SettingsAccessor::IssueInfo info = accessor.findIssues(data, path); + + QVERIFY(!info.title.isEmpty()); + QVERIFY(!info.message.isEmpty()); + QVERIFY(!info.buttons.isEmpty()); +} + +void tst_SettingsAccessor::findIssues_tooNew() +{ + const TestSettingsAccessor accessor; + const QVariantMap data = versionedMap(42, TESTACCESSOR_DEFAULT_ID); + const Utils::FileName path = Utils::FileName::fromString("/foo/bar.user"); + + const Utils::SettingsAccessor::IssueInfo info = accessor.findIssues(data, path); + + QVERIFY(!info.title.isEmpty()); + QVERIFY(!info.message.isEmpty()); + QVERIFY(!info.buttons.isEmpty()); +} + +void tst_SettingsAccessor::findIssues_tooOld() +{ + const TestSettingsAccessor accessor; + const QVariantMap data = versionedMap(2, TESTACCESSOR_DEFAULT_ID); + const Utils::FileName path = Utils::FileName::fromString("/foo/bar.user"); + + const Utils::SettingsAccessor::IssueInfo info = accessor.findIssues(data, path); + + QVERIFY(!info.title.isEmpty()); + QVERIFY(!info.message.isEmpty()); + QVERIFY(!info.buttons.isEmpty()); +} + +void tst_SettingsAccessor::findIssues_wrongId() +{ + const TestSettingsAccessor accessor; + const QVariantMap data = versionedMap(6, "foo"); + const Utils::FileName path = Utils::FileName::fromString("/foo/bar.user"); + + const Utils::SettingsAccessor::IssueInfo info = accessor.findIssues(data, path); + + QVERIFY(!info.title.isEmpty()); + QVERIFY(!info.message.isEmpty()); + QVERIFY(!info.buttons.isEmpty()); +} + +void tst_SettingsAccessor::findIssues_nonDefaultPath() +{ + const TestSettingsAccessor accessor; + const QVariantMap data = versionedMap(6, TESTACCESSOR_DEFAULT_ID); + const Utils::FileName path = Utils::FileName::fromString("/foo/bar.user.foobar"); + + const Utils::SettingsAccessor::IssueInfo info = accessor.findIssues(data, path); + + QVERIFY(!info.title.isEmpty()); + QVERIFY(!info.message.isEmpty()); + QVERIFY(!info.buttons.isEmpty()); +} + QTEST_MAIN(tst_SettingsAccessor) #include "tst_settings.moc"