diff options
Diffstat (limited to 'tests/auto/qml/qmldesigner/wizard/userpresets-test.cpp')
-rw-r--r-- | tests/auto/qml/qmldesigner/wizard/userpresets-test.cpp | 174 |
1 files changed, 133 insertions, 41 deletions
diff --git a/tests/auto/qml/qmldesigner/wizard/userpresets-test.cpp b/tests/auto/qml/qmldesigner/wizard/userpresets-test.cpp index 8fa73402c0..6ed562621b 100644 --- a/tests/auto/qml/qmldesigner/wizard/userpresets-test.cpp +++ b/tests/auto/qml/qmldesigner/wizard/userpresets-test.cpp @@ -29,6 +29,10 @@ #include <utils/filepath.h> #include <utils/temporarydirectory.h> +#include <QJsonArray> +#include <QJsonObject> +#include <QJsonDocument> + namespace StudioWelcome { void PrintTo(const UserPresetData &preset, std::ostream *os) @@ -64,69 +68,85 @@ using namespace StudioWelcome; constexpr char ARRAY_NAME[] = "UserPresets"; +class FakeStoreIo : public StoreIo +{ +public: + QByteArray read() const override + { + return data.toUtf8(); + } + + void write(const QByteArray &bytes) override + { + data = bytes; + } + + QString data; +}; + class QdsUserPresets : public ::testing::Test { protected: void SetUp() { - settings = std::make_unique<QSettings>(tempDir.filePath("test").toString(), - QSettings::IniFormat); + storeIo = std::make_unique<FakeStoreIo>(); } - UserPresetsStore anEmptyStore() { return UserPresetsStore{std::move(settings)}; } + UserPresetsStore anEmptyStore() + { + return UserPresetsStore{std::move(storeIo), StorePolicy::UniqueNames}; + } UserPresetsStore aStoreWithZeroItems() { - settings->beginWriteArray(ARRAY_NAME, 0); - settings->endArray(); + storeIo->data = "[]"; - return UserPresetsStore{std::move(settings)}; + return UserPresetsStore{std::move(storeIo), StorePolicy::UniqueNames}; } - UserPresetsStore aStoreWithOne(const UserPresetData &preset) + UserPresetsStore aStoreWithOne(const UserPresetData &preset, + StorePolicy policy = StorePolicy::UniqueNames) { - settings->beginWriteArray(ARRAY_NAME, 1); - settings->setArrayIndex(0); - - settings->setValue("categoryId", preset.categoryId); - settings->setValue("wizardName", preset.wizardName); - settings->setValue("name", preset.name); - settings->setValue("screenSize", preset.screenSize); - settings->setValue("useQtVirtualKeyboard", preset.useQtVirtualKeyboard); - settings->setValue("qtVersion", preset.qtVersion); - settings->setValue("styleName", preset.styleName); - - settings->endArray(); - - return UserPresetsStore{std::move(settings)}; + QJsonArray array({QJsonObject{{"categoryId", preset.categoryId}, + {"wizardName", preset.wizardName}, + {"name", preset.name}, + {"screenSize", preset.screenSize}, + {"useQtVirtualKeyboard", preset.useQtVirtualKeyboard}, + {"qtVersion", preset.qtVersion}, + {"styleName", preset.styleName}}}); + QJsonDocument doc{array}; + storeIo->data = doc.toJson(); + + return UserPresetsStore{std::move(storeIo), policy}; } - UserPresetsStore aStoreWithPresets(const std::vector<UserPresetData> &presets) + UserPresetsStore aStoreWithPresets(const std::vector<UserPresetData> &presetItems) { - settings->beginWriteArray(ARRAY_NAME, presets.size()); - - for (size_t i = 0; i < presets.size(); ++i) { - settings->setArrayIndex(i); - const auto &preset = presets[i]; - - settings->setValue("categoryId", preset.categoryId); - settings->setValue("wizardName", preset.wizardName); - settings->setValue("name", preset.name); - settings->setValue("screenSize", preset.screenSize); - settings->setValue("useQtVirtualKeyboard", preset.useQtVirtualKeyboard); - settings->setValue("qtVersion", preset.qtVersion); - settings->setValue("styleName", preset.styleName); + QJsonArray array; + + for (const auto &preset : presetItems) { + QJsonObject obj({{"categoryId", preset.categoryId}, + {"wizardName", preset.wizardName}, + {"name", preset.name}, + {"screenSize", preset.screenSize}, + {"useQtVirtualKeyboard", preset.useQtVirtualKeyboard}, + {"qtVersion", preset.qtVersion}, + {"styleName", preset.styleName}}); + + array.append(QJsonValue{obj}); } - settings->endArray(); - return UserPresetsStore{std::move(settings)}; + QJsonDocument doc{array}; + storeIo->data = doc.toJson(); + + return UserPresetsStore{std::move(storeIo), StorePolicy::UniqueNames}; } Utils::TemporaryDirectory tempDir{"userpresets-XXXXXX"}; - std::unique_ptr<QSettings> settings; + std::unique_ptr<FakeStoreIo> storeIo; private: - QString settingsPath; + QString storeIoPath; }; /******************* TESTS *******************/ @@ -234,10 +254,10 @@ TEST_F(QdsUserPresets, saveIncompletePreset) ASSERT_THAT(presets, ElementsAre(preset)); } -TEST_F(QdsUserPresets, cannotSavePresetWithSameName) +TEST_F(QdsUserPresets, cannotSavePresetWithSameNameForUniqueNamesPolicy) { UserPresetData existing{"B.categ", "3D App", "Same Name", "400 x 20", true, "Qt 5", "Material Dark"}; - auto store = aStoreWithOne(existing); + auto store = aStoreWithOne(existing, StorePolicy::UniqueNames); UserPresetData newPreset{"C.categ", "Empty", "Same Name", "100 x 30", false, "Qt 6", "Fusion"}; bool saved = store.save(newPreset); @@ -246,6 +266,30 @@ TEST_F(QdsUserPresets, cannotSavePresetWithSameName) ASSERT_THAT(store.fetchAll(), ElementsAreArray({existing})); } +TEST_F(QdsUserPresets, canSavePresetWithSameNameForUniqueValuesPolicy) +{ + UserPresetData existing{"B.categ", "3D App", "Same Name", "400 x 20", true, "Qt 5", "Material Dark"}; + auto store = aStoreWithOne(existing, StorePolicy::UniqueValues); + + // NOTE: only Style is different + UserPresetData newPreset{"B.categ", "3D App", "Same Name", "400 x 20", true, "Qt 5", "Fusion"}; + bool saved = store.save(newPreset); + + ASSERT_TRUE(saved); + ASSERT_THAT(store.fetchAll(), ElementsAreArray({existing, newPreset})); +} + +TEST_F(QdsUserPresets, cannotSaveExactCopyForUniqueValuesPolicy) +{ + UserPresetData existing{"B.categ", "3D App", "Same Name", "400 x 20", true, "Qt 5", "Material Dark"}; + auto store = aStoreWithOne(existing, StorePolicy::UniqueNames); + + bool saved = store.save(existing); + + ASSERT_FALSE(saved); + ASSERT_THAT(store.fetchAll(), ElementsAreArray({existing})); +} + TEST_F(QdsUserPresets, saveNewPreset) { UserPresetData existing{"A.categ", "3D App", "iPhone7", "400 x 20", true, "Qt 5", "Material Dark"}; @@ -258,6 +302,54 @@ TEST_F(QdsUserPresets, saveNewPreset) ASSERT_THAT(presets, ElementsAre(existing, newPreset)); } +TEST_F(QdsUserPresets, canLimitPresetsToAMaximum) +{ + std::vector<UserPresetData> existing{ + {"A.categ", "AppA", "iPhone7", "400 x 20", true, "Qt 5", "Material Dark"}, + {"B.categ", "AppB", "iPhone7", "400 x 20", true, "Qt 5", "Material Dark"}, + {"C.categ", "AppC", "iPhone7", "400 x 20", true, "Qt 5", "Material Dark"}, + }; + auto store = aStoreWithPresets(existing); + store.setMaximum(3); + + UserPresetData newPreset{"D.categ", "AppD", "Huawei", "100 x 30", true, "Qt 6", "Fusion"}; + store.save(newPreset); + + auto presets = store.fetchAll(); + ASSERT_THAT(presets, ElementsAre(existing[1], existing[2], newPreset)); +} + +TEST_F(QdsUserPresets, canLimitPresetsToAMaximumForReverseOrder) +{ + std::vector<UserPresetData> existing{ + {"A.categ", "AppA", "iPhone7", "400 x 20", true, "Qt 5", "Material Dark"}, + {"B.categ", "AppB", "iPhone7", "400 x 20", true, "Qt 5", "Material Dark"}, + {"C.categ", "AppC", "iPhone7", "400 x 20", true, "Qt 5", "Material Dark"}, + }; + auto store = aStoreWithPresets(existing); + store.setMaximum(3); + store.setReverseOrder(); + + UserPresetData newPreset{"D.categ", "AppD", "Huawei", "100 x 30", true, "Qt 6", "Fusion"}; + store.save(newPreset); + + auto presets = store.fetchAll(); + ASSERT_THAT(presets, ElementsAre(newPreset, existing[0], existing[1])); +} + +TEST_F(QdsUserPresets, canSavePresetsInReverseOrder) +{ + UserPresetData existing{"A.categ", "3D App", "iPhone7", "400 x 20", true, "Qt 5", "Material Dark"}; + auto store = aStoreWithOne(existing, StorePolicy::UniqueNames); + store.setReverseOrder(); + + UserPresetData newPreset{"A.categ", "Empty", "Huawei", "100 x 30", true, "Qt 6", "Fusion"}; + store.save(newPreset); + + auto presets = store.fetchAll(); + ASSERT_THAT(presets, ElementsAre(newPreset, existing)); +} + TEST_F(QdsUserPresets, removeUserPresetFromEmptyStore) { UserPresetData preset{"C.categ", "2D App", "Android", "", false, "", ""}; |