aboutsummaryrefslogtreecommitdiffstats
path: root/tests/auto/qml/qmldesigner/wizard/userpresets-test.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tests/auto/qml/qmldesigner/wizard/userpresets-test.cpp')
-rw-r--r--tests/auto/qml/qmldesigner/wizard/userpresets-test.cpp174
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, "", ""};