2022-08-19 15:59:36 +02:00
|
|
|
// Copyright (C) 2020 The Qt Company Ltd.
|
2022-12-21 10:12:09 +01:00
|
|
|
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
|
2020-06-11 17:25:46 +02:00
|
|
|
|
|
|
|
|
#include "googletest.h"
|
|
|
|
|
|
2020-06-18 19:46:01 +02:00
|
|
|
#include "mocklistmodeleditorview.h"
|
2023-05-06 15:08:52 +02:00
|
|
|
#include "projectstoragemock.h"
|
2020-06-18 19:46:01 +02:00
|
|
|
|
2020-06-11 17:25:46 +02:00
|
|
|
#include <qmldesigner/components/listmodeleditor/listmodeleditormodel.h>
|
2020-06-18 19:46:01 +02:00
|
|
|
#include <qmldesigner/designercore/include/abstractview.h>
|
2020-08-06 10:45:02 +02:00
|
|
|
#include <qmldesigner/designercore/include/bindingproperty.h>
|
2020-06-11 17:25:46 +02:00
|
|
|
#include <qmldesigner/designercore/include/model.h>
|
2020-06-18 19:46:01 +02:00
|
|
|
#include <qmldesigner/designercore/include/nodelistproperty.h>
|
2020-08-06 10:45:02 +02:00
|
|
|
#include <qmldesigner/designercore/include/nodeproperty.h>
|
2020-06-18 19:46:01 +02:00
|
|
|
#include <qmldesigner/designercore/include/variantproperty.h>
|
2020-06-11 17:25:46 +02:00
|
|
|
|
|
|
|
|
namespace {
|
|
|
|
|
|
2020-06-18 19:46:01 +02:00
|
|
|
using QmlDesigner::AbstractProperty;
|
|
|
|
|
using QmlDesigner::AbstractView;
|
2020-07-02 14:49:26 +02:00
|
|
|
using QmlDesigner::ListModelEditorModel;
|
2020-06-18 19:46:01 +02:00
|
|
|
using QmlDesigner::ModelNode;
|
2023-05-06 15:08:52 +02:00
|
|
|
using QmlDesigner::ModuleId;
|
|
|
|
|
using QmlDesigner::PropertyDeclarationId;
|
|
|
|
|
using QmlDesigner::TypeId;
|
|
|
|
|
namespace Info = QmlDesigner::Storage::Info;
|
2020-06-18 19:46:01 +02:00
|
|
|
|
|
|
|
|
MATCHER_P2(HasItem,
|
|
|
|
|
name,
|
|
|
|
|
value,
|
|
|
|
|
std::string(negation ? "hasn't " : "has ") + "(" + name + ", " + value + ")")
|
|
|
|
|
{
|
|
|
|
|
QStandardItem *item = arg;
|
|
|
|
|
|
|
|
|
|
return item->data(Qt::UserRole).toString() == name && item->data(Qt::UserRole).toDouble() == value;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
MATCHER(IsInvalid, std::string(negation ? "isn't null" : "is null"))
|
|
|
|
|
{
|
|
|
|
|
return !arg.isValid();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
MATCHER_P3(IsVariantProperty,
|
|
|
|
|
node,
|
|
|
|
|
name,
|
|
|
|
|
value,
|
|
|
|
|
std::string(negation ? "isn't " : "is ") + "(" + name + ", " + PrintToString(value) + ")")
|
|
|
|
|
{
|
|
|
|
|
const QmlDesigner::VariantProperty &property = arg;
|
|
|
|
|
|
|
|
|
|
return property.parentModelNode() == node && property.name() == name && property.value() == value;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
MATCHER_P2(IsVariantProperty,
|
|
|
|
|
name,
|
|
|
|
|
value,
|
|
|
|
|
std::string(negation ? "isn't " : "is ") + "(" + name + ", " + PrintToString(value) + ")")
|
|
|
|
|
{
|
|
|
|
|
const QmlDesigner::VariantProperty &property = arg;
|
|
|
|
|
|
|
|
|
|
return property.name() == name && property.value() == value;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
MATCHER_P2(IsAbstractProperty, node, name, std::string(negation ? "isn't " : "is ") + "(" + name + ")")
|
|
|
|
|
{
|
|
|
|
|
const QmlDesigner::AbstractProperty &property = arg;
|
|
|
|
|
|
|
|
|
|
return property.parentModelNode() == node && property.name() == name;
|
|
|
|
|
}
|
|
|
|
|
|
2020-06-11 17:25:46 +02:00
|
|
|
class ListModelEditor : public testing::Test
|
|
|
|
|
{
|
|
|
|
|
public:
|
2020-06-18 19:46:01 +02:00
|
|
|
ListModelEditor()
|
|
|
|
|
{
|
|
|
|
|
designerModel->attachView(&mockView);
|
|
|
|
|
|
|
|
|
|
emptyListModelNode = mockView.createModelNode("QtQml.Models.ListModel", 2, 15);
|
|
|
|
|
|
2020-08-06 10:45:02 +02:00
|
|
|
listViewNode = mockView.createModelNode("QtQuick.ListView", 2, 15);
|
2020-06-18 19:46:01 +02:00
|
|
|
listModelNode = mockView.createModelNode("QtQml.Models.ListModel", 2, 15);
|
|
|
|
|
mockView.rootModelNode().defaultNodeListProperty().reparentHere(listModelNode);
|
2020-09-01 16:36:56 +02:00
|
|
|
element1 = createElement({{"name", "foo"}, {"value", 1}, {"value2", 42}},
|
|
|
|
|
mockView,
|
|
|
|
|
listModelNode);
|
|
|
|
|
element2 = createElement({{"value", 4}, {"name", "bar"}, {"image", "pic.png"}},
|
|
|
|
|
mockView,
|
|
|
|
|
listModelNode);
|
|
|
|
|
element3 = createElement({{"image", "pic.png"}, {"name", "poo"}, {"value", 111}},
|
|
|
|
|
mockView,
|
|
|
|
|
listModelNode);
|
|
|
|
|
|
|
|
|
|
componentModel->attachView(&mockComponentView);
|
|
|
|
|
|
|
|
|
|
componentElement = createElement({{"name", "com"}, {"value", 11}, {"value2", 55}},
|
|
|
|
|
mockComponentView,
|
|
|
|
|
mockComponentView.rootModelNode());
|
|
|
|
|
|
2023-05-06 15:08:52 +02:00
|
|
|
ON_CALL(goIntoComponentMock, Call(_)).WillByDefault([](ModelNode node) { return node; });
|
|
|
|
|
}
|
|
|
|
|
|
2020-06-18 19:46:01 +02:00
|
|
|
using Entry = std::pair<QmlDesigner::PropertyName, QVariant>;
|
|
|
|
|
|
2020-09-01 16:36:56 +02:00
|
|
|
ModelNode createElement(std::initializer_list<Entry> entries, AbstractView &view, ModelNode listModel)
|
2020-06-18 19:46:01 +02:00
|
|
|
{
|
2020-09-01 16:36:56 +02:00
|
|
|
auto element = view.createModelNode("QtQml.Models/ListElement", 2, 15);
|
|
|
|
|
listModel.defaultNodeListProperty().reparentHere(element);
|
2020-06-18 19:46:01 +02:00
|
|
|
|
|
|
|
|
for (const auto &entry : entries) {
|
|
|
|
|
element.variantProperty(entry.first).setValue(entry.second);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return element;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
QList<QString> headerLabels(const QmlDesigner::ListModelEditorModel &model) const
|
|
|
|
|
{
|
|
|
|
|
QList<QString> labels;
|
|
|
|
|
labels.reserve(model.columnCount());
|
|
|
|
|
|
|
|
|
|
for (int i = 0; i < model.columnCount(); ++i)
|
|
|
|
|
labels.push_back(model.headerData(i, Qt::Horizontal).toString());
|
|
|
|
|
|
|
|
|
|
return labels;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
QList<QList<QVariant>> displayValues() const
|
|
|
|
|
{
|
|
|
|
|
QList<QList<QVariant>> rows;
|
|
|
|
|
|
|
|
|
|
for (int rowIndex = 0; rowIndex < model.rowCount(); ++rowIndex) {
|
|
|
|
|
QList<QVariant> row;
|
|
|
|
|
|
|
|
|
|
for (int columnIndex = 0; columnIndex < model.columnCount(); ++columnIndex)
|
|
|
|
|
row.push_back(model.data(model.index(rowIndex, columnIndex), Qt::DisplayRole));
|
|
|
|
|
|
|
|
|
|
rows.push_back(row);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return rows;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
QList<QList<QColor>> backgroundColors() const
|
|
|
|
|
{
|
|
|
|
|
QList<QList<QColor>> rows;
|
|
|
|
|
|
|
|
|
|
for (int rowIndex = 0; rowIndex < model.rowCount(); ++rowIndex) {
|
|
|
|
|
QList<QColor> row;
|
|
|
|
|
|
|
|
|
|
for (int columnIndex = 0; columnIndex < model.columnCount(); ++columnIndex)
|
|
|
|
|
row.push_back(
|
2021-06-16 16:42:24 +02:00
|
|
|
model.data(model.index(rowIndex, columnIndex), Qt::BackgroundRole)
|
2020-06-18 19:46:01 +02:00
|
|
|
.value<QColor>());
|
|
|
|
|
|
|
|
|
|
rows.push_back(row);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return rows;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
QList<QList<QmlDesigner::VariantProperty>> properties() const
|
|
|
|
|
{
|
|
|
|
|
QList<QList<QmlDesigner::VariantProperty>> properties;
|
|
|
|
|
properties.reserve(10);
|
|
|
|
|
|
|
|
|
|
auto nodes = listModelNode.defaultNodeListProperty().toModelNodeList();
|
|
|
|
|
|
|
|
|
|
for (const ModelNode &node : nodes)
|
|
|
|
|
properties.push_back(node.variantProperties());
|
|
|
|
|
|
|
|
|
|
return properties;
|
|
|
|
|
}
|
2020-06-11 17:25:46 +02:00
|
|
|
|
2020-07-02 14:49:26 +02:00
|
|
|
QModelIndex index(int row, int column) const { return model.index(row, column); }
|
|
|
|
|
|
2020-07-02 19:19:52 +02:00
|
|
|
QList<ModelNode> elements(const ModelNode &node) const
|
|
|
|
|
{
|
|
|
|
|
return node.defaultNodeListProperty().toModelNodeList();
|
|
|
|
|
}
|
|
|
|
|
|
2020-06-11 17:25:46 +02:00
|
|
|
protected:
|
2023-05-04 19:01:58 +02:00
|
|
|
NiceMock<ProjectStorageMockWithQtQtuick> projectStorageMock;
|
2023-05-06 15:08:52 +02:00
|
|
|
NiceMock<MockFunction<ModelNode(const ModelNode &)>> goIntoComponentMock;
|
2023-05-04 19:01:58 +02:00
|
|
|
QmlDesigner::ModelPointer designerModel{
|
|
|
|
|
QmlDesigner::Model::create(projectStorageMock, "QtQuick.Item", 1, 1)};
|
2020-06-18 19:46:01 +02:00
|
|
|
NiceMock<MockListModelEditorView> mockView;
|
2020-08-06 10:45:02 +02:00
|
|
|
QmlDesigner::ListModelEditorModel model{
|
|
|
|
|
[&] { return mockView.createModelNode("QtQml.Models.ListModel", 2, 15); },
|
2020-09-01 16:36:56 +02:00
|
|
|
[&] { return mockView.createModelNode("QtQml.Models.ListElement", 2, 15); },
|
2023-05-06 15:08:52 +02:00
|
|
|
goIntoComponentMock.AsStdFunction()};
|
2020-08-06 10:45:02 +02:00
|
|
|
ModelNode listViewNode;
|
2020-06-18 19:46:01 +02:00
|
|
|
ModelNode listModelNode;
|
|
|
|
|
ModelNode emptyListModelNode;
|
|
|
|
|
ModelNode element1;
|
|
|
|
|
ModelNode element2;
|
|
|
|
|
ModelNode element3;
|
2023-05-04 19:01:58 +02:00
|
|
|
QmlDesigner::ModelPointer componentModel{
|
|
|
|
|
QmlDesigner::Model::create(projectStorageMock, "QtQml.Models.ListModel", 1, 1)};
|
2020-09-01 16:36:56 +02:00
|
|
|
NiceMock<MockListModelEditorView> mockComponentView;
|
|
|
|
|
ModelNode componentElement;
|
2020-06-11 17:25:46 +02:00
|
|
|
};
|
|
|
|
|
|
2020-06-18 19:46:01 +02:00
|
|
|
TEST_F(ListModelEditor, CreatePropertyNameSet)
|
|
|
|
|
{
|
|
|
|
|
model.setListModel(listModelNode);
|
|
|
|
|
|
|
|
|
|
ASSERT_THAT(model.propertyNames(), ElementsAre("image", "name", "value", "value2"));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST_F(ListModelEditor, CreatePropertyNameSetForEmptyList)
|
|
|
|
|
{
|
|
|
|
|
model.setListModel(emptyListModelNode);
|
|
|
|
|
|
|
|
|
|
ASSERT_THAT(model.propertyNames(), IsEmpty());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST_F(ListModelEditor, HorizontalLabels)
|
|
|
|
|
{
|
|
|
|
|
model.setListModel(listModelNode);
|
|
|
|
|
|
Tests: gtest unittest: improve compilability
... with recent (namespaced) Qt dev.
[...]tests/unit/unittest/3rdparty/googletest/googletest/include/gtest/gtest-matchers.h:184:14: error: invalid conversion from 'const char*' to 'ushort' {aka 'short unsigned int'} [-fpermissive]
In file included from /data/dev/qt-6-ns/qtbase/include/QtCore/qstring.h:1,
from /data/dev/qt-6-ns/qtbase/include/QtCore/QString:1,
from /data/dev/creator-out/src/libs/utils/smallstringview.h:9,
from /data/dev/creator-out/src/libs/utils/smallstringliteral.h:8,
from /data/dev/creator-out/src/libs/utils/smallstring.h:8,
from /data/dev/creator-out/src/libs/utils/smallstringvector.h:8,
from /data/dev/creator-out/src/libs/utils/smallstringio.h:6,
from /data/dev/creator-out/tests/unit/unittest/gtest-creator-printing.h:7,
from /data/dev/creator-out/tests/unit/unittest/googletest.h:17,
from /data/dev/creator-out/tests/unit/unittest/externaldependenciesmock.h:6,
from /data/dev/creator-out/tests/unit/unittest/modulescanner-test.cpp:4:
a/dev/qt-6-ns/qtbase/src/corelib/text/qstring.h:1006:61: note: initializing argument 2 of 'bool Ns::operator==(const Ns::QString&, Ns::QChar)'
[104/1218] Building CXX object src/plugins/coreplugin/CMakeFiles/Core.dir/locator/executefilter.cpp.o^C
Change-Id: Id8d4533b9e53d7aa81edc64a99df31dd1d6ac5bf
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Marco Bubke <marco.bubke@qt.io>
2023-06-12 11:29:54 +02:00
|
|
|
ASSERT_THAT(headerLabels(model), ElementsAre(u"image", u"name", u"value", u"value2"));
|
2020-06-18 19:46:01 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST_F(ListModelEditor, HorizontalLabelsForEmptyList)
|
|
|
|
|
{
|
|
|
|
|
model.setListModel(emptyListModelNode);
|
|
|
|
|
|
|
|
|
|
ASSERT_THAT(headerLabels(model), IsEmpty());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST_F(ListModelEditor, DisplayValues)
|
|
|
|
|
{
|
|
|
|
|
model.setListModel(listModelNode);
|
|
|
|
|
|
|
|
|
|
ASSERT_THAT(displayValues(),
|
|
|
|
|
ElementsAre(ElementsAre(IsInvalid(), "foo", 1, 42),
|
|
|
|
|
ElementsAre("pic.png", "bar", 4, IsInvalid()),
|
|
|
|
|
ElementsAre("pic.png", "poo", 111, IsInvalid())));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST_F(ListModelEditor, ChangeValueChangesDisplayValues)
|
|
|
|
|
{
|
|
|
|
|
model.setListModel(listModelNode);
|
|
|
|
|
|
|
|
|
|
model.setValue(0, 1, "hello");
|
|
|
|
|
|
|
|
|
|
ASSERT_THAT(displayValues(),
|
|
|
|
|
ElementsAre(ElementsAre(IsInvalid(), "hello", 1, 42),
|
|
|
|
|
ElementsAre("pic.png", "bar", 4, IsInvalid()),
|
|
|
|
|
ElementsAre("pic.png", "poo", 111, IsInvalid())));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST_F(ListModelEditor, EditValueCallVariantPropertiesChanged)
|
|
|
|
|
{
|
|
|
|
|
model.setListModel(listModelNode);
|
|
|
|
|
|
|
|
|
|
EXPECT_CALL(mockView,
|
|
|
|
|
variantPropertiesChanged(ElementsAre(IsVariantProperty(element1, "name", "hello")),
|
|
|
|
|
Eq(AbstractView::NoAdditionalChanges)));
|
|
|
|
|
|
|
|
|
|
model.setValue(0, 1, "hello");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST_F(ListModelEditor, ChangeDisplayValueCallsVariantPropertiesChanged)
|
|
|
|
|
{
|
|
|
|
|
model.setListModel(listModelNode);
|
|
|
|
|
|
|
|
|
|
EXPECT_CALL(mockView,
|
|
|
|
|
variantPropertiesChanged(ElementsAre(IsVariantProperty(element1, "name", "hello")),
|
|
|
|
|
Eq(AbstractView::NoAdditionalChanges)))
|
|
|
|
|
.Times(0);
|
|
|
|
|
|
|
|
|
|
model.setValue(0, 1, "hello", Qt::DisplayRole);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST_F(ListModelEditor, AddRowAddedInvalidRow)
|
|
|
|
|
{
|
|
|
|
|
model.setListModel(listModelNode);
|
|
|
|
|
|
|
|
|
|
model.addRow();
|
|
|
|
|
|
|
|
|
|
ASSERT_THAT(displayValues(),
|
|
|
|
|
ElementsAre(ElementsAre(IsInvalid(), "foo", 1, 42),
|
|
|
|
|
ElementsAre("pic.png", "bar", 4, IsInvalid()),
|
|
|
|
|
ElementsAre("pic.png", "poo", 111, IsInvalid()),
|
|
|
|
|
ElementsAre(IsInvalid(), IsInvalid(), IsInvalid(), IsInvalid())));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST_F(ListModelEditor, AddRowCreatesNewModelNodeAndReparents)
|
|
|
|
|
{
|
|
|
|
|
model.setListModel(listModelNode);
|
|
|
|
|
|
|
|
|
|
EXPECT_CALL(mockView, nodeCreated(Property(&ModelNode::type, Eq("QtQml.Models.ListElement"))));
|
|
|
|
|
EXPECT_CALL(mockView,
|
|
|
|
|
nodeReparented(Property(&ModelNode::type, Eq("QtQml.Models.ListElement")),
|
|
|
|
|
Property(&AbstractProperty::parentModelNode, Eq(listModelNode)),
|
|
|
|
|
_,
|
|
|
|
|
_));
|
|
|
|
|
|
|
|
|
|
model.addRow();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST_F(ListModelEditor, ChangeAddedRowPropery)
|
|
|
|
|
{
|
|
|
|
|
model.setListModel(listModelNode);
|
|
|
|
|
model.addRow();
|
|
|
|
|
|
|
|
|
|
model.setValue(3, 2, 22);
|
|
|
|
|
|
|
|
|
|
ASSERT_THAT(displayValues(),
|
|
|
|
|
ElementsAre(ElementsAre(IsInvalid(), "foo", 1, 42),
|
|
|
|
|
ElementsAre("pic.png", "bar", 4, IsInvalid()),
|
|
|
|
|
ElementsAre("pic.png", "poo", 111, IsInvalid()),
|
|
|
|
|
ElementsAre(IsInvalid(), IsInvalid(), 22, IsInvalid())));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST_F(ListModelEditor, ChangeAddedRowProperyCallsVariantPropertiesChanged)
|
|
|
|
|
{
|
|
|
|
|
model.setListModel(listModelNode);
|
|
|
|
|
ModelNode element4;
|
|
|
|
|
ON_CALL(mockView, nodeReparented(_, _, _, _)).WillByDefault(SaveArg<0>(&element4));
|
|
|
|
|
model.addRow();
|
|
|
|
|
|
|
|
|
|
EXPECT_CALL(mockView,
|
|
|
|
|
variantPropertiesChanged(ElementsAre(IsVariantProperty(element4, "value", 22)),
|
|
|
|
|
Eq(AbstractView::PropertiesAdded)));
|
|
|
|
|
|
|
|
|
|
model.setValue(3, 2, 22);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST_F(ListModelEditor, AddColumnInsertsPropertyName)
|
|
|
|
|
{
|
|
|
|
|
model.setListModel(listModelNode);
|
|
|
|
|
|
|
|
|
|
model.addColumn("other");
|
|
|
|
|
|
|
|
|
|
ASSERT_THAT(model.propertyNames(), ElementsAre("image", "name", "other", "value", "value2"));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST_F(ListModelEditor, AddColumnInsertsPropertyNameToEmptyModel)
|
|
|
|
|
{
|
|
|
|
|
model.setListModel(emptyListModelNode);
|
|
|
|
|
|
|
|
|
|
model.addColumn("foo");
|
|
|
|
|
|
|
|
|
|
ASSERT_THAT(model.propertyNames(), ElementsAre("foo"));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST_F(ListModelEditor, AddTwiceColumnInsertsPropertyNameToEmptyModel)
|
|
|
|
|
{
|
|
|
|
|
model.setListModel(emptyListModelNode);
|
|
|
|
|
model.addColumn("foo");
|
|
|
|
|
|
|
|
|
|
model.addColumn("foo2");
|
|
|
|
|
|
|
|
|
|
ASSERT_THAT(model.propertyNames(), ElementsAre("foo", "foo2"));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST_F(ListModelEditor, AddSameColumnInsertsPropertyName)
|
|
|
|
|
{
|
|
|
|
|
model.setListModel(emptyListModelNode);
|
|
|
|
|
model.addColumn("foo");
|
|
|
|
|
|
|
|
|
|
model.addColumn("foo");
|
|
|
|
|
|
|
|
|
|
ASSERT_THAT(model.propertyNames(), ElementsAre("foo"));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST_F(ListModelEditor, AddColumnInsertsHeaderLabel)
|
|
|
|
|
{
|
|
|
|
|
model.setListModel(listModelNode);
|
|
|
|
|
|
|
|
|
|
model.addColumn("other");
|
|
|
|
|
|
Tests: gtest unittest: improve compilability
... with recent (namespaced) Qt dev.
[...]tests/unit/unittest/3rdparty/googletest/googletest/include/gtest/gtest-matchers.h:184:14: error: invalid conversion from 'const char*' to 'ushort' {aka 'short unsigned int'} [-fpermissive]
In file included from /data/dev/qt-6-ns/qtbase/include/QtCore/qstring.h:1,
from /data/dev/qt-6-ns/qtbase/include/QtCore/QString:1,
from /data/dev/creator-out/src/libs/utils/smallstringview.h:9,
from /data/dev/creator-out/src/libs/utils/smallstringliteral.h:8,
from /data/dev/creator-out/src/libs/utils/smallstring.h:8,
from /data/dev/creator-out/src/libs/utils/smallstringvector.h:8,
from /data/dev/creator-out/src/libs/utils/smallstringio.h:6,
from /data/dev/creator-out/tests/unit/unittest/gtest-creator-printing.h:7,
from /data/dev/creator-out/tests/unit/unittest/googletest.h:17,
from /data/dev/creator-out/tests/unit/unittest/externaldependenciesmock.h:6,
from /data/dev/creator-out/tests/unit/unittest/modulescanner-test.cpp:4:
a/dev/qt-6-ns/qtbase/src/corelib/text/qstring.h:1006:61: note: initializing argument 2 of 'bool Ns::operator==(const Ns::QString&, Ns::QChar)'
[104/1218] Building CXX object src/plugins/coreplugin/CMakeFiles/Core.dir/locator/executefilter.cpp.o^C
Change-Id: Id8d4533b9e53d7aa81edc64a99df31dd1d6ac5bf
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Marco Bubke <marco.bubke@qt.io>
2023-06-12 11:29:54 +02:00
|
|
|
ASSERT_THAT(headerLabels(model), ElementsAre(u"image", u"name", u"other", u"value", u"value2"));
|
2020-06-18 19:46:01 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST_F(ListModelEditor, AddColumnInsertsHeaderLabelToEmptyModel)
|
|
|
|
|
{
|
|
|
|
|
model.setListModel(emptyListModelNode);
|
|
|
|
|
|
|
|
|
|
model.addColumn("foo");
|
|
|
|
|
|
Tests: gtest unittest: improve compilability
... with recent (namespaced) Qt dev.
[...]tests/unit/unittest/3rdparty/googletest/googletest/include/gtest/gtest-matchers.h:184:14: error: invalid conversion from 'const char*' to 'ushort' {aka 'short unsigned int'} [-fpermissive]
In file included from /data/dev/qt-6-ns/qtbase/include/QtCore/qstring.h:1,
from /data/dev/qt-6-ns/qtbase/include/QtCore/QString:1,
from /data/dev/creator-out/src/libs/utils/smallstringview.h:9,
from /data/dev/creator-out/src/libs/utils/smallstringliteral.h:8,
from /data/dev/creator-out/src/libs/utils/smallstring.h:8,
from /data/dev/creator-out/src/libs/utils/smallstringvector.h:8,
from /data/dev/creator-out/src/libs/utils/smallstringio.h:6,
from /data/dev/creator-out/tests/unit/unittest/gtest-creator-printing.h:7,
from /data/dev/creator-out/tests/unit/unittest/googletest.h:17,
from /data/dev/creator-out/tests/unit/unittest/externaldependenciesmock.h:6,
from /data/dev/creator-out/tests/unit/unittest/modulescanner-test.cpp:4:
a/dev/qt-6-ns/qtbase/src/corelib/text/qstring.h:1006:61: note: initializing argument 2 of 'bool Ns::operator==(const Ns::QString&, Ns::QChar)'
[104/1218] Building CXX object src/plugins/coreplugin/CMakeFiles/Core.dir/locator/executefilter.cpp.o^C
Change-Id: Id8d4533b9e53d7aa81edc64a99df31dd1d6ac5bf
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Marco Bubke <marco.bubke@qt.io>
2023-06-12 11:29:54 +02:00
|
|
|
ASSERT_THAT(headerLabels(model), ElementsAre(u"foo"));
|
2020-06-18 19:46:01 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST_F(ListModelEditor, AddTwiceColumnInsertsHeaderLabelToEmptyModel)
|
|
|
|
|
{
|
|
|
|
|
model.setListModel(emptyListModelNode);
|
|
|
|
|
model.addColumn("foo");
|
|
|
|
|
|
|
|
|
|
model.addColumn("foo2");
|
|
|
|
|
|
Tests: gtest unittest: improve compilability
... with recent (namespaced) Qt dev.
[...]tests/unit/unittest/3rdparty/googletest/googletest/include/gtest/gtest-matchers.h:184:14: error: invalid conversion from 'const char*' to 'ushort' {aka 'short unsigned int'} [-fpermissive]
In file included from /data/dev/qt-6-ns/qtbase/include/QtCore/qstring.h:1,
from /data/dev/qt-6-ns/qtbase/include/QtCore/QString:1,
from /data/dev/creator-out/src/libs/utils/smallstringview.h:9,
from /data/dev/creator-out/src/libs/utils/smallstringliteral.h:8,
from /data/dev/creator-out/src/libs/utils/smallstring.h:8,
from /data/dev/creator-out/src/libs/utils/smallstringvector.h:8,
from /data/dev/creator-out/src/libs/utils/smallstringio.h:6,
from /data/dev/creator-out/tests/unit/unittest/gtest-creator-printing.h:7,
from /data/dev/creator-out/tests/unit/unittest/googletest.h:17,
from /data/dev/creator-out/tests/unit/unittest/externaldependenciesmock.h:6,
from /data/dev/creator-out/tests/unit/unittest/modulescanner-test.cpp:4:
a/dev/qt-6-ns/qtbase/src/corelib/text/qstring.h:1006:61: note: initializing argument 2 of 'bool Ns::operator==(const Ns::QString&, Ns::QChar)'
[104/1218] Building CXX object src/plugins/coreplugin/CMakeFiles/Core.dir/locator/executefilter.cpp.o^C
Change-Id: Id8d4533b9e53d7aa81edc64a99df31dd1d6ac5bf
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Marco Bubke <marco.bubke@qt.io>
2023-06-12 11:29:54 +02:00
|
|
|
ASSERT_THAT(headerLabels(model), ElementsAre(u"foo", u"foo2"));
|
2020-06-18 19:46:01 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST_F(ListModelEditor, AddSameColumnInsertsHeaderLabel)
|
|
|
|
|
{
|
|
|
|
|
model.setListModel(emptyListModelNode);
|
|
|
|
|
model.addColumn("foo");
|
|
|
|
|
|
|
|
|
|
model.addColumn("foo");
|
|
|
|
|
|
Tests: gtest unittest: improve compilability
... with recent (namespaced) Qt dev.
[...]tests/unit/unittest/3rdparty/googletest/googletest/include/gtest/gtest-matchers.h:184:14: error: invalid conversion from 'const char*' to 'ushort' {aka 'short unsigned int'} [-fpermissive]
In file included from /data/dev/qt-6-ns/qtbase/include/QtCore/qstring.h:1,
from /data/dev/qt-6-ns/qtbase/include/QtCore/QString:1,
from /data/dev/creator-out/src/libs/utils/smallstringview.h:9,
from /data/dev/creator-out/src/libs/utils/smallstringliteral.h:8,
from /data/dev/creator-out/src/libs/utils/smallstring.h:8,
from /data/dev/creator-out/src/libs/utils/smallstringvector.h:8,
from /data/dev/creator-out/src/libs/utils/smallstringio.h:6,
from /data/dev/creator-out/tests/unit/unittest/gtest-creator-printing.h:7,
from /data/dev/creator-out/tests/unit/unittest/googletest.h:17,
from /data/dev/creator-out/tests/unit/unittest/externaldependenciesmock.h:6,
from /data/dev/creator-out/tests/unit/unittest/modulescanner-test.cpp:4:
a/dev/qt-6-ns/qtbase/src/corelib/text/qstring.h:1006:61: note: initializing argument 2 of 'bool Ns::operator==(const Ns::QString&, Ns::QChar)'
[104/1218] Building CXX object src/plugins/coreplugin/CMakeFiles/Core.dir/locator/executefilter.cpp.o^C
Change-Id: Id8d4533b9e53d7aa81edc64a99df31dd1d6ac5bf
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Marco Bubke <marco.bubke@qt.io>
2023-06-12 11:29:54 +02:00
|
|
|
ASSERT_THAT(headerLabels(model), ElementsAre(u"foo"));
|
2020-06-18 19:46:01 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST_F(ListModelEditor, AddColumnInsertsDisplayValues)
|
|
|
|
|
{
|
|
|
|
|
model.setListModel(listModelNode);
|
|
|
|
|
|
|
|
|
|
model.addColumn("other");
|
|
|
|
|
|
|
|
|
|
ASSERT_THAT(displayValues(),
|
|
|
|
|
ElementsAre(ElementsAre(IsInvalid(), "foo", IsInvalid(), 1, 42),
|
|
|
|
|
ElementsAre("pic.png", "bar", IsInvalid(), 4, IsInvalid()),
|
|
|
|
|
ElementsAre("pic.png", "poo", IsInvalid(), 111, IsInvalid())));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST_F(ListModelEditor, ChangeAddColumnPropertyDisplayValue)
|
|
|
|
|
{
|
|
|
|
|
model.setListModel(listModelNode);
|
|
|
|
|
model.addColumn("other");
|
|
|
|
|
|
|
|
|
|
model.setValue(1, 2, 22);
|
|
|
|
|
|
|
|
|
|
ASSERT_THAT(displayValues(),
|
|
|
|
|
ElementsAre(ElementsAre(IsInvalid(), "foo", IsInvalid(), 1, 42),
|
|
|
|
|
ElementsAre("pic.png", "bar", 22, 4, IsInvalid()),
|
|
|
|
|
ElementsAre("pic.png", "poo", IsInvalid(), 111, IsInvalid())));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST_F(ListModelEditor, ChangeAddColumnPropertyCallsVariantPropertiesChanged)
|
|
|
|
|
{
|
|
|
|
|
model.setListModel(listModelNode);
|
|
|
|
|
model.addColumn("other");
|
|
|
|
|
|
|
|
|
|
EXPECT_CALL(mockView,
|
|
|
|
|
variantPropertiesChanged(ElementsAre(IsVariantProperty(element2, "other", 434)), _));
|
|
|
|
|
|
|
|
|
|
model.setValue(1, 2, 434);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST_F(ListModelEditor, RemoveColumnRemovesDisplayValues)
|
|
|
|
|
{
|
|
|
|
|
model.setListModel(listModelNode);
|
|
|
|
|
|
2020-07-02 14:49:26 +02:00
|
|
|
model.removeColumns({index(0, 2)});
|
2020-06-18 19:46:01 +02:00
|
|
|
|
|
|
|
|
ASSERT_THAT(displayValues(),
|
|
|
|
|
ElementsAre(ElementsAre(IsInvalid(), "foo", 42),
|
|
|
|
|
ElementsAre("pic.png", "bar", IsInvalid()),
|
|
|
|
|
ElementsAre("pic.png", "poo", IsInvalid())));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST_F(ListModelEditor, RemoveColumnRemovesProperties)
|
|
|
|
|
{
|
|
|
|
|
model.setListModel(listModelNode);
|
|
|
|
|
|
|
|
|
|
EXPECT_CALL(mockView, propertiesRemoved(ElementsAre(IsAbstractProperty(element2, "image"))));
|
|
|
|
|
EXPECT_CALL(mockView, propertiesRemoved(ElementsAre(IsAbstractProperty(element3, "image"))));
|
|
|
|
|
|
2020-07-02 14:49:26 +02:00
|
|
|
model.removeColumns({index(0, 0)});
|
2020-06-18 19:46:01 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST_F(ListModelEditor, RemoveColumnRemovesPropertyName)
|
|
|
|
|
{
|
|
|
|
|
model.setListModel(listModelNode);
|
|
|
|
|
|
2020-07-02 14:49:26 +02:00
|
|
|
model.removeColumns({index(0, 1)});
|
2020-06-18 19:46:01 +02:00
|
|
|
|
|
|
|
|
ASSERT_THAT(model.propertyNames(), ElementsAre("image", "value", "value2"));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST_F(ListModelEditor, RemoveRowRemovesDisplayValues)
|
|
|
|
|
{
|
|
|
|
|
model.setListModel(listModelNode);
|
|
|
|
|
|
2020-07-02 14:49:26 +02:00
|
|
|
model.removeRows({index(1, 0)});
|
2020-06-18 19:46:01 +02:00
|
|
|
|
|
|
|
|
ASSERT_THAT(displayValues(),
|
|
|
|
|
ElementsAre(ElementsAre(IsInvalid(), "foo", 1, 42),
|
|
|
|
|
ElementsAre("pic.png", "poo", 111, IsInvalid())));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST_F(ListModelEditor, RemoveRowRemovesElementInListModel)
|
|
|
|
|
{
|
|
|
|
|
model.setListModel(listModelNode);
|
|
|
|
|
|
|
|
|
|
EXPECT_CALL(mockView, nodeRemoved(Eq(element2), _, _));
|
|
|
|
|
|
2020-07-02 14:49:26 +02:00
|
|
|
model.removeRows({index(1, 0)});
|
2020-06-18 19:46:01 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST_F(ListModelEditor, ConvertStringFloatToFloat)
|
|
|
|
|
{
|
|
|
|
|
model.setListModel(listModelNode);
|
|
|
|
|
|
|
|
|
|
model.setValue(1, 1, "25.5");
|
|
|
|
|
|
|
|
|
|
ASSERT_THAT(element2.variantProperty("name").value().value<double>(), 25.5);
|
|
|
|
|
ASSERT_THAT(element2.variantProperty("name").value().type(), QVariant::Double);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST_F(ListModelEditor, ConvertStringIntegerToDouble)
|
|
|
|
|
{
|
|
|
|
|
model.setListModel(listModelNode);
|
|
|
|
|
|
|
|
|
|
model.setValue(1, 1, "25");
|
|
|
|
|
|
|
|
|
|
ASSERT_THAT(element2.variantProperty("name").value().value<double>(), 25);
|
|
|
|
|
ASSERT_THAT(element2.variantProperty("name").value().type(), QVariant::Double);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST_F(ListModelEditor, DontConvertStringToNumber)
|
|
|
|
|
{
|
|
|
|
|
model.setListModel(listModelNode);
|
|
|
|
|
|
|
|
|
|
model.setValue(1, 1, "hello");
|
|
|
|
|
|
Tests: gtest unittest: improve compilability
... with recent (namespaced) Qt dev.
[...]tests/unit/unittest/3rdparty/googletest/googletest/include/gtest/gtest-matchers.h:184:14: error: invalid conversion from 'const char*' to 'ushort' {aka 'short unsigned int'} [-fpermissive]
In file included from /data/dev/qt-6-ns/qtbase/include/QtCore/qstring.h:1,
from /data/dev/qt-6-ns/qtbase/include/QtCore/QString:1,
from /data/dev/creator-out/src/libs/utils/smallstringview.h:9,
from /data/dev/creator-out/src/libs/utils/smallstringliteral.h:8,
from /data/dev/creator-out/src/libs/utils/smallstring.h:8,
from /data/dev/creator-out/src/libs/utils/smallstringvector.h:8,
from /data/dev/creator-out/src/libs/utils/smallstringio.h:6,
from /data/dev/creator-out/tests/unit/unittest/gtest-creator-printing.h:7,
from /data/dev/creator-out/tests/unit/unittest/googletest.h:17,
from /data/dev/creator-out/tests/unit/unittest/externaldependenciesmock.h:6,
from /data/dev/creator-out/tests/unit/unittest/modulescanner-test.cpp:4:
a/dev/qt-6-ns/qtbase/src/corelib/text/qstring.h:1006:61: note: initializing argument 2 of 'bool Ns::operator==(const Ns::QString&, Ns::QChar)'
[104/1218] Building CXX object src/plugins/coreplugin/CMakeFiles/Core.dir/locator/executefilter.cpp.o^C
Change-Id: Id8d4533b9e53d7aa81edc64a99df31dd1d6ac5bf
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Marco Bubke <marco.bubke@qt.io>
2023-06-12 11:29:54 +02:00
|
|
|
ASSERT_THAT(element2.variantProperty("name").value().value<QString>(), u"hello");
|
2020-06-18 19:46:01 +02:00
|
|
|
ASSERT_THAT(element2.variantProperty("name").value().type(), QVariant::String);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST_F(ListModelEditor, EmptyStringsRemovesProperty)
|
|
|
|
|
{
|
|
|
|
|
model.setListModel(listModelNode);
|
|
|
|
|
|
|
|
|
|
model.setValue(1, 1, "");
|
|
|
|
|
|
Tests: gtest unittest: improve compilability
... with recent (namespaced) Qt dev.
[...]tests/unit/unittest/3rdparty/googletest/googletest/include/gtest/gtest-matchers.h:184:14: error: invalid conversion from 'const char*' to 'ushort' {aka 'short unsigned int'} [-fpermissive]
In file included from /data/dev/qt-6-ns/qtbase/include/QtCore/qstring.h:1,
from /data/dev/qt-6-ns/qtbase/include/QtCore/QString:1,
from /data/dev/creator-out/src/libs/utils/smallstringview.h:9,
from /data/dev/creator-out/src/libs/utils/smallstringliteral.h:8,
from /data/dev/creator-out/src/libs/utils/smallstring.h:8,
from /data/dev/creator-out/src/libs/utils/smallstringvector.h:8,
from /data/dev/creator-out/src/libs/utils/smallstringio.h:6,
from /data/dev/creator-out/tests/unit/unittest/gtest-creator-printing.h:7,
from /data/dev/creator-out/tests/unit/unittest/googletest.h:17,
from /data/dev/creator-out/tests/unit/unittest/externaldependenciesmock.h:6,
from /data/dev/creator-out/tests/unit/unittest/modulescanner-test.cpp:4:
a/dev/qt-6-ns/qtbase/src/corelib/text/qstring.h:1006:61: note: initializing argument 2 of 'bool Ns::operator==(const Ns::QString&, Ns::QChar)'
[104/1218] Building CXX object src/plugins/coreplugin/CMakeFiles/Core.dir/locator/executefilter.cpp.o^C
Change-Id: Id8d4533b9e53d7aa81edc64a99df31dd1d6ac5bf
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Marco Bubke <marco.bubke@qt.io>
2023-06-12 11:29:54 +02:00
|
|
|
ASSERT_THAT(element2.variantProperty("name").value().value<QString>(), Eq(u""));
|
2020-06-18 19:46:01 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST_F(ListModelEditor, InvalidVariantRemovesProperty)
|
|
|
|
|
{
|
|
|
|
|
model.setListModel(listModelNode);
|
|
|
|
|
|
|
|
|
|
model.setValue(1, 1, QVariant());
|
|
|
|
|
|
|
|
|
|
ASSERT_FALSE(element2.hasProperty("name"));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST_F(ListModelEditor, DispayValueIsChangedToDouble)
|
|
|
|
|
{
|
|
|
|
|
model.setListModel(listModelNode);
|
|
|
|
|
|
|
|
|
|
model.setValue(1, 1, "25.5");
|
|
|
|
|
|
|
|
|
|
ASSERT_THAT(displayValues()[1][1].type(), QVariant::Double);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST_F(ListModelEditor, StringDispayValueIsNotChanged)
|
|
|
|
|
{
|
|
|
|
|
model.setListModel(listModelNode);
|
|
|
|
|
|
|
|
|
|
model.setValue(1, 1, "25.5a");
|
|
|
|
|
|
|
|
|
|
ASSERT_THAT(displayValues()[1][1].type(), QVariant::String);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST_F(ListModelEditor, SetInvalidToDarkYellowBackgroundColor)
|
|
|
|
|
{
|
|
|
|
|
model.setListModel(listModelNode);
|
|
|
|
|
|
|
|
|
|
ASSERT_THAT(
|
|
|
|
|
backgroundColors(),
|
|
|
|
|
ElementsAre(
|
|
|
|
|
ElementsAre(Qt::darkYellow, Not(Qt::darkYellow), Not(Qt::darkYellow), Not(Qt::darkYellow)),
|
|
|
|
|
ElementsAre(Not(Qt::darkYellow), Not(Qt::darkYellow), Not(Qt::darkYellow), Qt::darkYellow),
|
|
|
|
|
ElementsAre(Not(Qt::darkYellow), Not(Qt::darkYellow), Not(Qt::darkYellow), Qt::darkYellow)));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST_F(ListModelEditor, SettingValueChangesBackgroundColor)
|
|
|
|
|
{
|
|
|
|
|
model.setListModel(listModelNode);
|
|
|
|
|
|
|
|
|
|
model.setValue(0, 0, "foo");
|
|
|
|
|
|
|
|
|
|
ASSERT_THAT(
|
|
|
|
|
backgroundColors(),
|
|
|
|
|
ElementsAre(
|
|
|
|
|
ElementsAre(Not(Qt::darkYellow), Not(Qt::darkYellow), Not(Qt::darkYellow), Not(Qt::darkYellow)),
|
|
|
|
|
ElementsAre(Not(Qt::darkYellow), Not(Qt::darkYellow), Not(Qt::darkYellow), Qt::darkYellow),
|
|
|
|
|
ElementsAre(Not(Qt::darkYellow), Not(Qt::darkYellow), Not(Qt::darkYellow), Qt::darkYellow)));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST_F(ListModelEditor, SettingValueChangesByDisplayRoleBackgroundColor)
|
|
|
|
|
{
|
|
|
|
|
model.setListModel(listModelNode);
|
|
|
|
|
|
|
|
|
|
model.setValue(0, 0, "foo", Qt::DisplayRole);
|
|
|
|
|
|
|
|
|
|
ASSERT_THAT(
|
|
|
|
|
backgroundColors(),
|
|
|
|
|
ElementsAre(
|
|
|
|
|
ElementsAre(Not(Qt::darkYellow), Not(Qt::darkYellow), Not(Qt::darkYellow), Not(Qt::darkYellow)),
|
|
|
|
|
ElementsAre(Not(Qt::darkYellow), Not(Qt::darkYellow), Not(Qt::darkYellow), Qt::darkYellow),
|
|
|
|
|
ElementsAre(Not(Qt::darkYellow), Not(Qt::darkYellow), Not(Qt::darkYellow), Qt::darkYellow)));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST_F(ListModelEditor, ResettingValueChangesBackgroundColor)
|
|
|
|
|
{
|
|
|
|
|
model.setListModel(listModelNode);
|
|
|
|
|
|
|
|
|
|
model.setValue(1, 1, QVariant{});
|
|
|
|
|
|
|
|
|
|
ASSERT_THAT(
|
|
|
|
|
backgroundColors(),
|
|
|
|
|
ElementsAre(
|
|
|
|
|
ElementsAre(Qt::darkYellow, Not(Qt::darkYellow), Not(Qt::darkYellow), Not(Qt::darkYellow)),
|
|
|
|
|
ElementsAre(Not(Qt::darkYellow), Qt::darkYellow, Not(Qt::darkYellow), Qt::darkYellow),
|
|
|
|
|
ElementsAre(Not(Qt::darkYellow), Not(Qt::darkYellow), Not(Qt::darkYellow), Qt::darkYellow)));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST_F(ListModelEditor, ResettingValueChangesByDisplayRoleBackgroundColor)
|
|
|
|
|
{
|
|
|
|
|
model.setListModel(listModelNode);
|
|
|
|
|
|
|
|
|
|
model.setValue(1, 1, QVariant{}, Qt::DisplayRole);
|
|
|
|
|
|
|
|
|
|
ASSERT_THAT(
|
|
|
|
|
backgroundColors(),
|
|
|
|
|
ElementsAre(
|
|
|
|
|
ElementsAre(Qt::darkYellow, Not(Qt::darkYellow), Not(Qt::darkYellow), Not(Qt::darkYellow)),
|
|
|
|
|
ElementsAre(Not(Qt::darkYellow), Qt::darkYellow, Not(Qt::darkYellow), Qt::darkYellow),
|
|
|
|
|
ElementsAre(Not(Qt::darkYellow), Not(Qt::darkYellow), Not(Qt::darkYellow), Qt::darkYellow)));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST_F(ListModelEditor, SettingNullValueChangesBackgroundColor)
|
|
|
|
|
{
|
|
|
|
|
model.setListModel(listModelNode);
|
|
|
|
|
|
|
|
|
|
model.setValue(0, 0, 0);
|
|
|
|
|
|
|
|
|
|
ASSERT_THAT(backgroundColors(),
|
|
|
|
|
ElementsAre(ElementsAre(_, _, _, _),
|
|
|
|
|
ElementsAre(_, _, _, Qt::darkYellow),
|
|
|
|
|
ElementsAre(_, _, _, Qt::darkYellow)));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST_F(ListModelEditor, DontRenamePropertyIfColumnNameExists)
|
|
|
|
|
{
|
|
|
|
|
model.setListModel(listModelNode);
|
|
|
|
|
|
|
|
|
|
model.renameColumn(1, "value2");
|
|
|
|
|
|
|
|
|
|
ASSERT_THAT(model.propertyNames(), ElementsAre("image", "name", "value", "value2"));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST_F(ListModelEditor, DontRenameColumnIfColumnNameExists)
|
|
|
|
|
{
|
|
|
|
|
model.setListModel(listModelNode);
|
|
|
|
|
|
|
|
|
|
model.renameColumn(1, "value2");
|
|
|
|
|
|
Tests: gtest unittest: improve compilability
... with recent (namespaced) Qt dev.
[...]tests/unit/unittest/3rdparty/googletest/googletest/include/gtest/gtest-matchers.h:184:14: error: invalid conversion from 'const char*' to 'ushort' {aka 'short unsigned int'} [-fpermissive]
In file included from /data/dev/qt-6-ns/qtbase/include/QtCore/qstring.h:1,
from /data/dev/qt-6-ns/qtbase/include/QtCore/QString:1,
from /data/dev/creator-out/src/libs/utils/smallstringview.h:9,
from /data/dev/creator-out/src/libs/utils/smallstringliteral.h:8,
from /data/dev/creator-out/src/libs/utils/smallstring.h:8,
from /data/dev/creator-out/src/libs/utils/smallstringvector.h:8,
from /data/dev/creator-out/src/libs/utils/smallstringio.h:6,
from /data/dev/creator-out/tests/unit/unittest/gtest-creator-printing.h:7,
from /data/dev/creator-out/tests/unit/unittest/googletest.h:17,
from /data/dev/creator-out/tests/unit/unittest/externaldependenciesmock.h:6,
from /data/dev/creator-out/tests/unit/unittest/modulescanner-test.cpp:4:
a/dev/qt-6-ns/qtbase/src/corelib/text/qstring.h:1006:61: note: initializing argument 2 of 'bool Ns::operator==(const Ns::QString&, Ns::QChar)'
[104/1218] Building CXX object src/plugins/coreplugin/CMakeFiles/Core.dir/locator/executefilter.cpp.o^C
Change-Id: Id8d4533b9e53d7aa81edc64a99df31dd1d6ac5bf
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Marco Bubke <marco.bubke@qt.io>
2023-06-12 11:29:54 +02:00
|
|
|
ASSERT_THAT(headerLabels(model), ElementsAre(u"image", u"name", u"value", u"value2"));
|
2020-06-18 19:46:01 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST_F(ListModelEditor, DontRenameColumnIfColumnNameExistsDoesNotChangeDisplayValues)
|
|
|
|
|
{
|
|
|
|
|
model.setListModel(listModelNode);
|
|
|
|
|
|
|
|
|
|
model.renameColumn(1, "value2");
|
|
|
|
|
|
|
|
|
|
ASSERT_THAT(displayValues(),
|
|
|
|
|
ElementsAre(ElementsAre(IsInvalid(), "foo", 1, 42),
|
|
|
|
|
ElementsAre("pic.png", "bar", 4, IsInvalid()),
|
|
|
|
|
ElementsAre("pic.png", "poo", 111, IsInvalid())));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST_F(ListModelEditor, DontRenameColumnIfColumnNameExistsDoesNotChangeProperties)
|
|
|
|
|
{
|
|
|
|
|
model.setListModel(listModelNode);
|
|
|
|
|
|
|
|
|
|
model.renameColumn(1, "value2");
|
|
|
|
|
|
|
|
|
|
ASSERT_THAT(properties(),
|
|
|
|
|
ElementsAre(UnorderedElementsAre(IsVariantProperty("name", "foo"),
|
|
|
|
|
IsVariantProperty("value", 1),
|
|
|
|
|
IsVariantProperty("value2", 42)),
|
|
|
|
|
UnorderedElementsAre(IsVariantProperty("image", "pic.png"),
|
|
|
|
|
IsVariantProperty("name", "bar"),
|
|
|
|
|
IsVariantProperty("value", 4)),
|
|
|
|
|
UnorderedElementsAre(IsVariantProperty("image", "pic.png"),
|
|
|
|
|
IsVariantProperty("name", "poo"),
|
|
|
|
|
IsVariantProperty("value", 111))));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST_F(ListModelEditor, RenamePropertyButDontChangeOrder)
|
|
|
|
|
{
|
|
|
|
|
model.setListModel(listModelNode);
|
|
|
|
|
|
|
|
|
|
model.renameColumn(1, "mood");
|
|
|
|
|
|
|
|
|
|
ASSERT_THAT(model.propertyNames(), ElementsAre("image", "mood", "value", "value2"));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST_F(ListModelEditor, RenameColumnButDontChangeOrder)
|
|
|
|
|
{
|
|
|
|
|
model.setListModel(listModelNode);
|
|
|
|
|
|
|
|
|
|
model.renameColumn(1, "mood");
|
|
|
|
|
|
Tests: gtest unittest: improve compilability
... with recent (namespaced) Qt dev.
[...]tests/unit/unittest/3rdparty/googletest/googletest/include/gtest/gtest-matchers.h:184:14: error: invalid conversion from 'const char*' to 'ushort' {aka 'short unsigned int'} [-fpermissive]
In file included from /data/dev/qt-6-ns/qtbase/include/QtCore/qstring.h:1,
from /data/dev/qt-6-ns/qtbase/include/QtCore/QString:1,
from /data/dev/creator-out/src/libs/utils/smallstringview.h:9,
from /data/dev/creator-out/src/libs/utils/smallstringliteral.h:8,
from /data/dev/creator-out/src/libs/utils/smallstring.h:8,
from /data/dev/creator-out/src/libs/utils/smallstringvector.h:8,
from /data/dev/creator-out/src/libs/utils/smallstringio.h:6,
from /data/dev/creator-out/tests/unit/unittest/gtest-creator-printing.h:7,
from /data/dev/creator-out/tests/unit/unittest/googletest.h:17,
from /data/dev/creator-out/tests/unit/unittest/externaldependenciesmock.h:6,
from /data/dev/creator-out/tests/unit/unittest/modulescanner-test.cpp:4:
a/dev/qt-6-ns/qtbase/src/corelib/text/qstring.h:1006:61: note: initializing argument 2 of 'bool Ns::operator==(const Ns::QString&, Ns::QChar)'
[104/1218] Building CXX object src/plugins/coreplugin/CMakeFiles/Core.dir/locator/executefilter.cpp.o^C
Change-Id: Id8d4533b9e53d7aa81edc64a99df31dd1d6ac5bf
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Marco Bubke <marco.bubke@qt.io>
2023-06-12 11:29:54 +02:00
|
|
|
ASSERT_THAT(headerLabels(model), ElementsAre(u"image", u"mood", u"value", u"value2"));
|
2020-06-18 19:46:01 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST_F(ListModelEditor, RenameColumnButDontChangeOrderDisplayValues)
|
|
|
|
|
{
|
|
|
|
|
model.setListModel(listModelNode);
|
|
|
|
|
|
|
|
|
|
model.renameColumn(1, "mood");
|
|
|
|
|
|
|
|
|
|
ASSERT_THAT(displayValues(),
|
|
|
|
|
ElementsAre(ElementsAre(IsInvalid(), "foo", 1, 42),
|
|
|
|
|
ElementsAre("pic.png", "bar", 4, IsInvalid()),
|
|
|
|
|
ElementsAre("pic.png", "poo", 111, IsInvalid())));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST_F(ListModelEditor, RenameColumnButDontChangeOrderProperies)
|
|
|
|
|
{
|
|
|
|
|
model.setListModel(listModelNode);
|
|
|
|
|
|
|
|
|
|
model.renameColumn(1, "mood");
|
|
|
|
|
|
|
|
|
|
ASSERT_THAT(properties(),
|
|
|
|
|
ElementsAre(UnorderedElementsAre(IsVariantProperty("mood", "foo"),
|
|
|
|
|
IsVariantProperty("value", 1),
|
|
|
|
|
IsVariantProperty("value2", 42)),
|
|
|
|
|
UnorderedElementsAre(IsVariantProperty("image", "pic.png"),
|
|
|
|
|
IsVariantProperty("mood", "bar"),
|
|
|
|
|
IsVariantProperty("value", 4)),
|
|
|
|
|
UnorderedElementsAre(IsVariantProperty("image", "pic.png"),
|
|
|
|
|
IsVariantProperty("mood", "poo"),
|
|
|
|
|
IsVariantProperty("value", 111))));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST_F(ListModelEditor, RemoveColumnAfterRenameColumn)
|
|
|
|
|
{
|
|
|
|
|
model.setListModel(listModelNode);
|
|
|
|
|
model.renameColumn(1, "mood");
|
|
|
|
|
|
2020-07-02 14:49:26 +02:00
|
|
|
model.removeColumns({index(0, 1)});
|
2020-06-18 19:46:01 +02:00
|
|
|
|
|
|
|
|
ASSERT_THAT(properties(),
|
|
|
|
|
ElementsAre(UnorderedElementsAre(IsVariantProperty("value", 1),
|
|
|
|
|
IsVariantProperty("value2", 42)),
|
|
|
|
|
UnorderedElementsAre(IsVariantProperty("image", "pic.png"),
|
|
|
|
|
IsVariantProperty("value", 4)),
|
|
|
|
|
UnorderedElementsAre(IsVariantProperty("image", "pic.png"),
|
|
|
|
|
IsVariantProperty("value", 111))));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST_F(ListModelEditor, ChangeValueAfterRenameColumn)
|
|
|
|
|
{
|
|
|
|
|
model.setListModel(listModelNode);
|
|
|
|
|
model.renameColumn(1, "mood");
|
|
|
|
|
|
|
|
|
|
model.setValue(1, 1, "taaa");
|
|
|
|
|
|
|
|
|
|
ASSERT_THAT(properties(),
|
|
|
|
|
ElementsAre(UnorderedElementsAre(IsVariantProperty("mood", "foo"),
|
|
|
|
|
IsVariantProperty("value", 1),
|
|
|
|
|
IsVariantProperty("value2", 42)),
|
|
|
|
|
UnorderedElementsAre(IsVariantProperty("image", "pic.png"),
|
|
|
|
|
IsVariantProperty("mood", "taaa"),
|
|
|
|
|
IsVariantProperty("value", 4)),
|
|
|
|
|
UnorderedElementsAre(IsVariantProperty("image", "pic.png"),
|
|
|
|
|
IsVariantProperty("mood", "poo"),
|
|
|
|
|
IsVariantProperty("value", 111))));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST_F(ListModelEditor, RemovePropertyAfterRenameColumn)
|
|
|
|
|
{
|
|
|
|
|
model.setListModel(listModelNode);
|
|
|
|
|
model.renameColumn(1, "mood");
|
|
|
|
|
|
|
|
|
|
model.setValue(1, 1, {});
|
|
|
|
|
|
|
|
|
|
ASSERT_THAT(properties(),
|
|
|
|
|
ElementsAre(UnorderedElementsAre(IsVariantProperty("mood", "foo"),
|
|
|
|
|
IsVariantProperty("value", 1),
|
|
|
|
|
IsVariantProperty("value2", 42)),
|
|
|
|
|
UnorderedElementsAre(IsVariantProperty("image", "pic.png"),
|
|
|
|
|
IsVariantProperty("value", 4)),
|
|
|
|
|
UnorderedElementsAre(IsVariantProperty("image", "pic.png"),
|
|
|
|
|
IsVariantProperty("mood", "poo"),
|
|
|
|
|
IsVariantProperty("value", 111))));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST_F(ListModelEditor, RenameToPrecedingProperty)
|
|
|
|
|
{
|
|
|
|
|
model.setListModel(listModelNode);
|
|
|
|
|
|
|
|
|
|
model.renameColumn(1, "alpha");
|
|
|
|
|
|
|
|
|
|
ASSERT_THAT(model.propertyNames(), ElementsAre("alpha", "image", "value", "value2"));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST_F(ListModelEditor, RenameToPrecedingColumn)
|
|
|
|
|
{
|
|
|
|
|
model.setListModel(listModelNode);
|
|
|
|
|
|
|
|
|
|
model.renameColumn(1, "alpha");
|
|
|
|
|
|
Tests: gtest unittest: improve compilability
... with recent (namespaced) Qt dev.
[...]tests/unit/unittest/3rdparty/googletest/googletest/include/gtest/gtest-matchers.h:184:14: error: invalid conversion from 'const char*' to 'ushort' {aka 'short unsigned int'} [-fpermissive]
In file included from /data/dev/qt-6-ns/qtbase/include/QtCore/qstring.h:1,
from /data/dev/qt-6-ns/qtbase/include/QtCore/QString:1,
from /data/dev/creator-out/src/libs/utils/smallstringview.h:9,
from /data/dev/creator-out/src/libs/utils/smallstringliteral.h:8,
from /data/dev/creator-out/src/libs/utils/smallstring.h:8,
from /data/dev/creator-out/src/libs/utils/smallstringvector.h:8,
from /data/dev/creator-out/src/libs/utils/smallstringio.h:6,
from /data/dev/creator-out/tests/unit/unittest/gtest-creator-printing.h:7,
from /data/dev/creator-out/tests/unit/unittest/googletest.h:17,
from /data/dev/creator-out/tests/unit/unittest/externaldependenciesmock.h:6,
from /data/dev/creator-out/tests/unit/unittest/modulescanner-test.cpp:4:
a/dev/qt-6-ns/qtbase/src/corelib/text/qstring.h:1006:61: note: initializing argument 2 of 'bool Ns::operator==(const Ns::QString&, Ns::QChar)'
[104/1218] Building CXX object src/plugins/coreplugin/CMakeFiles/Core.dir/locator/executefilter.cpp.o^C
Change-Id: Id8d4533b9e53d7aa81edc64a99df31dd1d6ac5bf
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Marco Bubke <marco.bubke@qt.io>
2023-06-12 11:29:54 +02:00
|
|
|
ASSERT_THAT(headerLabels(model), ElementsAre(u"alpha", u"image", u"value", u"value2"));
|
2020-06-18 19:46:01 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST_F(ListModelEditor, RenameToPrecedingColumnDisplayValues)
|
|
|
|
|
{
|
|
|
|
|
model.setListModel(listModelNode);
|
|
|
|
|
|
|
|
|
|
model.renameColumn(1, "alpha");
|
|
|
|
|
|
|
|
|
|
ASSERT_THAT(displayValues(),
|
|
|
|
|
ElementsAre(ElementsAre("foo", IsInvalid(), 1, 42),
|
|
|
|
|
ElementsAre("bar", "pic.png", 4, IsInvalid()),
|
|
|
|
|
ElementsAre("poo", "pic.png", 111, IsInvalid())));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST_F(ListModelEditor, RenameToPrecedingColumnProperties)
|
|
|
|
|
{
|
|
|
|
|
model.setListModel(listModelNode);
|
|
|
|
|
|
|
|
|
|
model.renameColumn(1, "alpha");
|
|
|
|
|
|
|
|
|
|
ASSERT_THAT(properties(),
|
|
|
|
|
ElementsAre(UnorderedElementsAre(IsVariantProperty("alpha", "foo"),
|
|
|
|
|
IsVariantProperty("value", 1),
|
|
|
|
|
IsVariantProperty("value2", 42)),
|
|
|
|
|
UnorderedElementsAre(IsVariantProperty("image", "pic.png"),
|
|
|
|
|
IsVariantProperty("alpha", "bar"),
|
|
|
|
|
IsVariantProperty("value", 4)),
|
|
|
|
|
UnorderedElementsAre(IsVariantProperty("image", "pic.png"),
|
|
|
|
|
IsVariantProperty("alpha", "poo"),
|
|
|
|
|
IsVariantProperty("value", 111))));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST_F(ListModelEditor, RenameToFollowingProperty)
|
|
|
|
|
{
|
|
|
|
|
model.setListModel(listModelNode);
|
|
|
|
|
|
|
|
|
|
model.renameColumn(2, "zoo");
|
|
|
|
|
|
|
|
|
|
ASSERT_THAT(model.propertyNames(), ElementsAre("image", "name", "value2", "zoo"));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST_F(ListModelEditor, RenameToFollowingColumn)
|
|
|
|
|
{
|
|
|
|
|
model.setListModel(listModelNode);
|
|
|
|
|
|
|
|
|
|
model.renameColumn(2, "zoo");
|
|
|
|
|
|
Tests: gtest unittest: improve compilability
... with recent (namespaced) Qt dev.
[...]tests/unit/unittest/3rdparty/googletest/googletest/include/gtest/gtest-matchers.h:184:14: error: invalid conversion from 'const char*' to 'ushort' {aka 'short unsigned int'} [-fpermissive]
In file included from /data/dev/qt-6-ns/qtbase/include/QtCore/qstring.h:1,
from /data/dev/qt-6-ns/qtbase/include/QtCore/QString:1,
from /data/dev/creator-out/src/libs/utils/smallstringview.h:9,
from /data/dev/creator-out/src/libs/utils/smallstringliteral.h:8,
from /data/dev/creator-out/src/libs/utils/smallstring.h:8,
from /data/dev/creator-out/src/libs/utils/smallstringvector.h:8,
from /data/dev/creator-out/src/libs/utils/smallstringio.h:6,
from /data/dev/creator-out/tests/unit/unittest/gtest-creator-printing.h:7,
from /data/dev/creator-out/tests/unit/unittest/googletest.h:17,
from /data/dev/creator-out/tests/unit/unittest/externaldependenciesmock.h:6,
from /data/dev/creator-out/tests/unit/unittest/modulescanner-test.cpp:4:
a/dev/qt-6-ns/qtbase/src/corelib/text/qstring.h:1006:61: note: initializing argument 2 of 'bool Ns::operator==(const Ns::QString&, Ns::QChar)'
[104/1218] Building CXX object src/plugins/coreplugin/CMakeFiles/Core.dir/locator/executefilter.cpp.o^C
Change-Id: Id8d4533b9e53d7aa81edc64a99df31dd1d6ac5bf
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Marco Bubke <marco.bubke@qt.io>
2023-06-12 11:29:54 +02:00
|
|
|
ASSERT_THAT(headerLabels(model), ElementsAre(u"image", u"name", u"value2", u"zoo"));
|
2020-06-18 19:46:01 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST_F(ListModelEditor, RenameToFollowingColumnDisplayValues)
|
|
|
|
|
{
|
|
|
|
|
model.setListModel(listModelNode);
|
|
|
|
|
|
|
|
|
|
model.renameColumn(2, "zoo");
|
|
|
|
|
|
|
|
|
|
ASSERT_THAT(displayValues(),
|
|
|
|
|
ElementsAre(ElementsAre(IsInvalid(), "foo", 42, 1),
|
|
|
|
|
ElementsAre("pic.png", "bar", IsInvalid(), 4),
|
|
|
|
|
ElementsAre("pic.png", "poo", IsInvalid(), 111)));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST_F(ListModelEditor, RenameToFollowingColumnProperties)
|
|
|
|
|
{
|
|
|
|
|
model.setListModel(listModelNode);
|
|
|
|
|
|
|
|
|
|
model.renameColumn(2, "zoo");
|
|
|
|
|
|
|
|
|
|
ASSERT_THAT(properties(),
|
|
|
|
|
ElementsAre(UnorderedElementsAre(IsVariantProperty("name", "foo"),
|
|
|
|
|
IsVariantProperty("zoo", 1),
|
|
|
|
|
IsVariantProperty("value2", 42)),
|
|
|
|
|
UnorderedElementsAre(IsVariantProperty("image", "pic.png"),
|
|
|
|
|
IsVariantProperty("name", "bar"),
|
|
|
|
|
IsVariantProperty("zoo", 4)),
|
|
|
|
|
UnorderedElementsAre(IsVariantProperty("image", "pic.png"),
|
|
|
|
|
IsVariantProperty("name", "poo"),
|
|
|
|
|
IsVariantProperty("zoo", 111))));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST_F(ListModelEditor, RenamePropertiesWithInvalidValue)
|
|
|
|
|
{
|
|
|
|
|
model.setListModel(listModelNode);
|
|
|
|
|
|
|
|
|
|
model.renameColumn(0, "mood");
|
|
|
|
|
|
|
|
|
|
ASSERT_THAT(properties(),
|
|
|
|
|
ElementsAre(UnorderedElementsAre(IsVariantProperty("name", "foo"),
|
|
|
|
|
IsVariantProperty("value", 1),
|
|
|
|
|
IsVariantProperty("value2", 42)),
|
|
|
|
|
UnorderedElementsAre(IsVariantProperty("mood", "pic.png"),
|
|
|
|
|
IsVariantProperty("name", "bar"),
|
|
|
|
|
IsVariantProperty("value", 4)),
|
|
|
|
|
UnorderedElementsAre(IsVariantProperty("mood", "pic.png"),
|
|
|
|
|
IsVariantProperty("name", "poo"),
|
|
|
|
|
IsVariantProperty("value", 111))));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST_F(ListModelEditor, ChangeValueAfterRenamePropertiesWithInvalidValue)
|
|
|
|
|
{
|
|
|
|
|
model.setListModel(listModelNode);
|
|
|
|
|
model.renameColumn(0, "mood");
|
|
|
|
|
|
|
|
|
|
model.setValue(0, 0, "haaa");
|
|
|
|
|
|
|
|
|
|
ASSERT_THAT(properties(),
|
|
|
|
|
ElementsAre(UnorderedElementsAre(IsVariantProperty("mood", "haaa"),
|
|
|
|
|
IsVariantProperty("name", "foo"),
|
|
|
|
|
IsVariantProperty("value", 1),
|
|
|
|
|
IsVariantProperty("value2", 42)),
|
|
|
|
|
UnorderedElementsAre(IsVariantProperty("mood", "pic.png"),
|
|
|
|
|
IsVariantProperty("name", "bar"),
|
|
|
|
|
IsVariantProperty("value", 4)),
|
|
|
|
|
UnorderedElementsAre(IsVariantProperty("mood", "pic.png"),
|
|
|
|
|
IsVariantProperty("name", "poo"),
|
|
|
|
|
IsVariantProperty("value", 111))));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST_F(ListModelEditor, RemoveLastRow)
|
|
|
|
|
{
|
|
|
|
|
model.setListModel(emptyListModelNode);
|
|
|
|
|
model.addColumn("mood");
|
|
|
|
|
model.addRow();
|
|
|
|
|
|
2020-07-02 14:49:26 +02:00
|
|
|
model.removeRows({index(0, 0)});
|
2020-06-18 19:46:01 +02:00
|
|
|
|
|
|
|
|
ASSERT_THAT(displayValues(), IsEmpty());
|
|
|
|
|
}
|
|
|
|
|
|
2020-07-02 14:49:26 +02:00
|
|
|
TEST_F(ListModelEditor, RemoveLastEmptyRow)
|
2020-06-18 19:46:01 +02:00
|
|
|
{
|
|
|
|
|
model.setListModel(emptyListModelNode);
|
|
|
|
|
model.addColumn("mood");
|
|
|
|
|
model.addRow();
|
2020-07-02 14:49:26 +02:00
|
|
|
model.removeColumns({index(0, 0)});
|
2020-06-18 19:46:01 +02:00
|
|
|
|
2020-07-02 14:49:26 +02:00
|
|
|
model.removeRows({index(0, 0)});
|
2020-06-18 19:46:01 +02:00
|
|
|
|
|
|
|
|
ASSERT_THAT(displayValues(), ElementsAre(IsEmpty()));
|
|
|
|
|
}
|
|
|
|
|
|
2020-07-02 14:49:26 +02:00
|
|
|
TEST_F(ListModelEditor, RemoveLastColumn)
|
2020-06-18 19:46:01 +02:00
|
|
|
{
|
|
|
|
|
model.setListModel(emptyListModelNode);
|
|
|
|
|
model.addColumn("mood");
|
|
|
|
|
model.addRow();
|
|
|
|
|
|
2020-07-02 14:49:26 +02:00
|
|
|
model.removeColumns({index(0, 0)});
|
2020-06-18 19:46:01 +02:00
|
|
|
|
2020-07-02 14:49:26 +02:00
|
|
|
ASSERT_THAT(displayValues(), ElementsAre(IsEmpty()));
|
2020-06-18 19:46:01 +02:00
|
|
|
}
|
|
|
|
|
|
2020-07-02 14:49:26 +02:00
|
|
|
TEST_F(ListModelEditor, RemoveLastEmptyColumn)
|
2020-06-18 19:46:01 +02:00
|
|
|
{
|
|
|
|
|
model.setListModel(emptyListModelNode);
|
|
|
|
|
model.addColumn("mood");
|
|
|
|
|
model.addRow();
|
2020-07-02 14:49:26 +02:00
|
|
|
model.removeRows({index(0, 0)});
|
2020-06-18 19:46:01 +02:00
|
|
|
|
2020-07-02 14:49:26 +02:00
|
|
|
model.removeColumns({index(0, 0)});
|
2020-06-18 19:46:01 +02:00
|
|
|
|
|
|
|
|
ASSERT_THAT(displayValues(), IsEmpty());
|
|
|
|
|
}
|
|
|
|
|
|
2020-07-02 14:49:26 +02:00
|
|
|
TEST_F(ListModelEditor, RemoveColumns)
|
|
|
|
|
{
|
|
|
|
|
model.setListModel(listModelNode);
|
|
|
|
|
model.removeColumns({index(0, 1), index(0, 3), index(1, 1), index(0, 4)});
|
|
|
|
|
|
|
|
|
|
ASSERT_THAT(properties(),
|
|
|
|
|
ElementsAre(UnorderedElementsAre(IsVariantProperty("value", 1)),
|
|
|
|
|
UnorderedElementsAre(IsVariantProperty("image", "pic.png"),
|
|
|
|
|
IsVariantProperty("value", 4)),
|
|
|
|
|
UnorderedElementsAre(IsVariantProperty("image", "pic.png"),
|
|
|
|
|
IsVariantProperty("value", 111))));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST_F(ListModelEditor, RemoveRows)
|
|
|
|
|
{
|
|
|
|
|
model.setListModel(listModelNode);
|
|
|
|
|
|
|
|
|
|
model.removeRows({index(1, 0), index(2, 0), index(3, 0), index(2, 0)});
|
|
|
|
|
|
|
|
|
|
ASSERT_THAT(properties(),
|
|
|
|
|
ElementsAre(UnorderedElementsAre(IsVariantProperty("name", "foo"),
|
|
|
|
|
IsVariantProperty("value", 1),
|
|
|
|
|
IsVariantProperty("value2", 42))));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST_F(ListModelEditor, FilterColumns)
|
|
|
|
|
{
|
|
|
|
|
model.setListModel(listModelNode);
|
|
|
|
|
QList<QModelIndex> indices = {index(0, 0), index(1, 1), index(0, 2), index(0, 1)};
|
|
|
|
|
|
|
|
|
|
auto columns = ListModelEditorModel::filterColumns(indices);
|
|
|
|
|
|
|
|
|
|
ASSERT_THAT(columns, ElementsAre(0, 1, 2));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST_F(ListModelEditor, FilterColumnsInvalidColumns)
|
|
|
|
|
{
|
|
|
|
|
QList<QModelIndex> indices = {index(0, 0), index(1, 1), index(0, 2), index(0, 1)};
|
|
|
|
|
|
|
|
|
|
auto columns = ListModelEditorModel::filterColumns(indices);
|
|
|
|
|
|
|
|
|
|
ASSERT_THAT(columns, IsEmpty());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST_F(ListModelEditor, FilterColumnsEmptyInput)
|
|
|
|
|
{
|
|
|
|
|
QList<QModelIndex> indices;
|
|
|
|
|
|
|
|
|
|
auto columns = ListModelEditorModel::filterColumns(indices);
|
|
|
|
|
|
|
|
|
|
ASSERT_THAT(columns, IsEmpty());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST_F(ListModelEditor, FilterRows)
|
|
|
|
|
{
|
|
|
|
|
model.setListModel(listModelNode);
|
|
|
|
|
QList<QModelIndex> indices = {index(0, 0), index(1, 1), index(2, 2), index(0, 1)};
|
|
|
|
|
|
|
|
|
|
auto rows = ListModelEditorModel::filterRows(indices);
|
|
|
|
|
|
|
|
|
|
ASSERT_THAT(rows, ElementsAre(0, 1, 2));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST_F(ListModelEditor, FilterRowsInvalidColumns)
|
|
|
|
|
{
|
|
|
|
|
QList<QModelIndex> indices = {index(0, 0), index(1, 1), index(2, 2), index(0, 1)};
|
|
|
|
|
|
|
|
|
|
auto rows = ListModelEditorModel::filterRows(indices);
|
|
|
|
|
|
|
|
|
|
ASSERT_THAT(rows, IsEmpty());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST_F(ListModelEditor, FilterRowsEmptyInput)
|
|
|
|
|
{
|
|
|
|
|
QList<QModelIndex> indices;
|
|
|
|
|
|
|
|
|
|
auto rows = ListModelEditorModel::filterRows(indices);
|
|
|
|
|
|
|
|
|
|
ASSERT_THAT(rows, IsEmpty());
|
|
|
|
|
}
|
|
|
|
|
|
2020-07-02 19:19:52 +02:00
|
|
|
TEST_F(ListModelEditor, CannotMoveEmptyRowsUp)
|
|
|
|
|
{
|
|
|
|
|
model.setListModel(listModelNode);
|
|
|
|
|
QList<QModelIndex> indices = {index(-1, 1)};
|
|
|
|
|
|
|
|
|
|
model.moveRowsUp(indices);
|
|
|
|
|
|
|
|
|
|
ASSERT_THAT(elements(listModelNode), ElementsAre(element1, element2, element3));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST_F(ListModelEditor, MoveRowUp)
|
|
|
|
|
{
|
|
|
|
|
model.setListModel(listModelNode);
|
|
|
|
|
QList<QModelIndex> indices = {index(1, 1), index(1, 2), index(1, 0)};
|
|
|
|
|
|
|
|
|
|
model.moveRowsUp(indices);
|
|
|
|
|
|
|
|
|
|
ASSERT_THAT(elements(listModelNode), ElementsAre(element2, element1, element3));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST_F(ListModelEditor, MoveRowsUp)
|
|
|
|
|
{
|
|
|
|
|
model.setListModel(listModelNode);
|
|
|
|
|
QList<QModelIndex> indices = {index(1, 1), index(2, 2), index(1, 0)};
|
|
|
|
|
|
|
|
|
|
model.moveRowsUp(indices);
|
|
|
|
|
|
|
|
|
|
ASSERT_THAT(elements(listModelNode), ElementsAre(element2, element3, element1));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST_F(ListModelEditor, CannotMoveFirstRowsUp)
|
|
|
|
|
{
|
|
|
|
|
model.setListModel(listModelNode);
|
|
|
|
|
QList<QModelIndex> indices = {index(0, 1), index(1, 2), index(0, 0)};
|
|
|
|
|
|
|
|
|
|
model.moveRowsUp(indices);
|
|
|
|
|
|
|
|
|
|
ASSERT_THAT(elements(listModelNode), ElementsAre(element1, element2, element3));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST_F(ListModelEditor, CannotMoveEmptyRowsUpDisplayValues)
|
|
|
|
|
{
|
|
|
|
|
model.setListModel(listModelNode);
|
|
|
|
|
QList<QModelIndex> indices = {index(-1, 1)};
|
|
|
|
|
|
|
|
|
|
model.moveRowsUp(indices);
|
|
|
|
|
|
|
|
|
|
ASSERT_THAT(displayValues(),
|
|
|
|
|
ElementsAre(ElementsAre(IsInvalid(), "foo", 1, 42),
|
|
|
|
|
ElementsAre("pic.png", "bar", 4, IsInvalid()),
|
|
|
|
|
ElementsAre("pic.png", "poo", 111, IsInvalid())));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST_F(ListModelEditor, CannotMoveFirstRowUpDisplayValues)
|
|
|
|
|
{
|
|
|
|
|
model.setListModel(listModelNode);
|
|
|
|
|
QList<QModelIndex> indices = {index(0, 1), index(1, 2), index(0, 0)};
|
|
|
|
|
|
|
|
|
|
model.moveRowsUp(indices);
|
|
|
|
|
|
|
|
|
|
ASSERT_THAT(displayValues(),
|
|
|
|
|
ElementsAre(ElementsAre(IsInvalid(), "foo", 1, 42),
|
|
|
|
|
ElementsAre("pic.png", "bar", 4, IsInvalid()),
|
|
|
|
|
ElementsAre("pic.png", "poo", 111, IsInvalid())));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST_F(ListModelEditor, MoveRowsUpDisplayValues)
|
|
|
|
|
{
|
|
|
|
|
model.setListModel(listModelNode);
|
|
|
|
|
QList<QModelIndex> indices = {index(1, 1), index(2, 2), index(1, 0)};
|
|
|
|
|
|
|
|
|
|
model.moveRowsUp(indices);
|
|
|
|
|
|
|
|
|
|
ASSERT_THAT(displayValues(),
|
|
|
|
|
ElementsAre(ElementsAre("pic.png", "bar", 4, IsInvalid()),
|
|
|
|
|
ElementsAre("pic.png", "poo", 111, IsInvalid()),
|
|
|
|
|
ElementsAre(IsInvalid(), "foo", 1, 42)));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST_F(ListModelEditor, NoSelectionAfterCannotMoveLastRowsDown)
|
|
|
|
|
{
|
|
|
|
|
model.setListModel(listModelNode);
|
|
|
|
|
QList<QModelIndex> indices = {index(0, 1), index(1, 2), index(0, 0)};
|
|
|
|
|
|
|
|
|
|
auto selection = model.moveRowsUp(indices);
|
|
|
|
|
|
|
|
|
|
ASSERT_THAT(selection.indexes(), IsEmpty());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST_F(ListModelEditor, NoSelectionAfterMoveEmptyRowsDown)
|
|
|
|
|
{
|
|
|
|
|
model.setListModel(listModelNode);
|
|
|
|
|
QList<QModelIndex> indices = {index(-1, 1)};
|
|
|
|
|
|
|
|
|
|
auto selection = model.moveRowsUp(indices);
|
|
|
|
|
|
|
|
|
|
ASSERT_THAT(selection.indexes(), IsEmpty());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST_F(ListModelEditor, SelectionAfterMoveRowsDown)
|
|
|
|
|
{
|
|
|
|
|
model.setListModel(listModelNode);
|
|
|
|
|
QList<QModelIndex> indices = {index(1, 1), index(2, 2), index(1, 0)};
|
|
|
|
|
|
|
|
|
|
auto selection = model.moveRowsUp(indices);
|
|
|
|
|
|
|
|
|
|
ASSERT_THAT(selection.indexes(),
|
|
|
|
|
ElementsAre(index(0, 0),
|
|
|
|
|
index(0, 1),
|
|
|
|
|
index(0, 2),
|
|
|
|
|
index(0, 3),
|
|
|
|
|
index(1, 0),
|
|
|
|
|
index(1, 1),
|
|
|
|
|
index(1, 2),
|
|
|
|
|
index(1, 3)));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST_F(ListModelEditor, CannotMoveEmptyRowsDown)
|
|
|
|
|
{
|
|
|
|
|
model.setListModel(listModelNode);
|
|
|
|
|
QList<QModelIndex> indices = {index(-1, 1)};
|
|
|
|
|
|
|
|
|
|
model.moveRowsDown(indices);
|
|
|
|
|
|
|
|
|
|
ASSERT_THAT(elements(listModelNode), ElementsAre(element1, element2, element3));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST_F(ListModelEditor, MoveRowDown)
|
|
|
|
|
{
|
|
|
|
|
model.setListModel(listModelNode);
|
|
|
|
|
QList<QModelIndex> indices = {index(1, 1), index(1, 2), index(1, 0)};
|
|
|
|
|
|
|
|
|
|
model.moveRowsDown(indices);
|
|
|
|
|
|
|
|
|
|
ASSERT_THAT(elements(listModelNode), ElementsAre(element1, element3, element2));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST_F(ListModelEditor, MoveRowsDown)
|
|
|
|
|
{
|
|
|
|
|
model.setListModel(listModelNode);
|
|
|
|
|
QList<QModelIndex> indices = {index(1, 1), index(0, 2), index(1, 0)};
|
|
|
|
|
|
|
|
|
|
model.moveRowsDown(indices);
|
|
|
|
|
|
|
|
|
|
ASSERT_THAT(elements(listModelNode), ElementsAre(element3, element1, element2));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST_F(ListModelEditor, CannotMoveLastRowsDown)
|
|
|
|
|
{
|
|
|
|
|
model.setListModel(listModelNode);
|
|
|
|
|
QList<QModelIndex> indices = {index(2, 1), index(1, 2), index(2, 0)};
|
|
|
|
|
|
|
|
|
|
model.moveRowsDown(indices);
|
|
|
|
|
|
|
|
|
|
ASSERT_THAT(elements(listModelNode), ElementsAre(element1, element2, element3));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST_F(ListModelEditor, CannotMoveEmptyRowsDownDisplayValues)
|
|
|
|
|
{
|
|
|
|
|
model.setListModel(listModelNode);
|
|
|
|
|
QList<QModelIndex> indices = {index(-1, 1)};
|
|
|
|
|
|
|
|
|
|
model.moveRowsDown(indices);
|
|
|
|
|
|
|
|
|
|
ASSERT_THAT(displayValues(),
|
|
|
|
|
ElementsAre(ElementsAre(IsInvalid(), "foo", 1, 42),
|
|
|
|
|
ElementsAre("pic.png", "bar", 4, IsInvalid()),
|
|
|
|
|
ElementsAre("pic.png", "poo", 111, IsInvalid())));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST_F(ListModelEditor, CannotMoveLastRowDownDisplayValues)
|
|
|
|
|
{
|
|
|
|
|
model.setListModel(listModelNode);
|
|
|
|
|
QList<QModelIndex> indices = {index(2, 1), index(1, 2), index(2, 0)};
|
|
|
|
|
|
|
|
|
|
model.moveRowsDown(indices);
|
|
|
|
|
|
|
|
|
|
ASSERT_THAT(displayValues(),
|
|
|
|
|
ElementsAre(ElementsAre(IsInvalid(), "foo", 1, 42),
|
|
|
|
|
ElementsAre("pic.png", "bar", 4, IsInvalid()),
|
|
|
|
|
ElementsAre("pic.png", "poo", 111, IsInvalid())));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST_F(ListModelEditor, MoveRowsDownDisplayValues)
|
|
|
|
|
{
|
|
|
|
|
model.setListModel(listModelNode);
|
|
|
|
|
QList<QModelIndex> indices = {index(1, 1), index(0, 2), index(1, 0)};
|
|
|
|
|
|
|
|
|
|
model.moveRowsDown(indices);
|
|
|
|
|
|
|
|
|
|
ASSERT_THAT(displayValues(),
|
|
|
|
|
ElementsAre(ElementsAre("pic.png", "poo", 111, IsInvalid()),
|
|
|
|
|
ElementsAre(IsInvalid(), "foo", 1, 42),
|
|
|
|
|
ElementsAre("pic.png", "bar", 4, IsInvalid())));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST_F(ListModelEditor, NoSelectionAfterCannotMoveLastRowsUp)
|
|
|
|
|
{
|
|
|
|
|
model.setListModel(listModelNode);
|
|
|
|
|
QList<QModelIndex> indices = {index(2, 1), index(1, 2), index(2, 0)};
|
|
|
|
|
|
|
|
|
|
auto selection = model.moveRowsDown(indices);
|
|
|
|
|
|
|
|
|
|
ASSERT_THAT(selection.indexes(), IsEmpty());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST_F(ListModelEditor, NoSelectionAfterMoveEmptyRowsUp)
|
|
|
|
|
{
|
|
|
|
|
model.setListModel(listModelNode);
|
|
|
|
|
QList<QModelIndex> indices = {index(-1, 1)};
|
|
|
|
|
|
|
|
|
|
auto selection = model.moveRowsDown(indices);
|
|
|
|
|
|
|
|
|
|
ASSERT_THAT(selection.indexes(), IsEmpty());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST_F(ListModelEditor, SelectionAfterMoveRowsUp)
|
|
|
|
|
{
|
|
|
|
|
model.setListModel(listModelNode);
|
|
|
|
|
QList<QModelIndex> indices = {index(1, 1), index(0, 2), index(1, 0)};
|
|
|
|
|
|
|
|
|
|
auto selection = model.moveRowsDown(indices);
|
|
|
|
|
|
|
|
|
|
ASSERT_THAT(selection.indexes(),
|
|
|
|
|
ElementsAre(index(1, 0),
|
|
|
|
|
index(1, 1),
|
|
|
|
|
index(1, 2),
|
|
|
|
|
index(1, 3),
|
|
|
|
|
index(2, 0),
|
|
|
|
|
index(2, 1),
|
|
|
|
|
index(2, 2),
|
|
|
|
|
index(2, 3)));
|
|
|
|
|
}
|
|
|
|
|
|
2020-08-06 10:45:02 +02:00
|
|
|
TEST_F(ListModelEditor, ListViewHasNoModel)
|
|
|
|
|
{
|
|
|
|
|
model.setListView(listViewNode);
|
|
|
|
|
|
|
|
|
|
ASSERT_THAT(listViewNode.nodeProperty("model").modelNode().type(), Eq("QtQml.Models.ListModel"));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST_F(ListModelEditor, ListViewHasModelInside)
|
|
|
|
|
{
|
|
|
|
|
listViewNode.nodeProperty("model").reparentHere(listModelNode);
|
|
|
|
|
|
|
|
|
|
model.setListView(listViewNode);
|
|
|
|
|
|
|
|
|
|
ASSERT_THAT(displayValues(),
|
|
|
|
|
ElementsAre(ElementsAre(IsInvalid(), "foo", 1, 42),
|
|
|
|
|
ElementsAre("pic.png", "bar", 4, IsInvalid()),
|
|
|
|
|
ElementsAre("pic.png", "poo", 111, IsInvalid())));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST_F(ListModelEditor, ListViewHasModelBinding)
|
|
|
|
|
{
|
|
|
|
|
listModelNode.setIdWithoutRefactoring("listModel");
|
|
|
|
|
listViewNode.bindingProperty("model").setExpression("listModel");
|
|
|
|
|
|
|
|
|
|
model.setListView(listViewNode);
|
|
|
|
|
|
|
|
|
|
ASSERT_THAT(displayValues(),
|
|
|
|
|
ElementsAre(ElementsAre(IsInvalid(), "foo", 1, 42),
|
|
|
|
|
ElementsAre("pic.png", "bar", 4, IsInvalid()),
|
|
|
|
|
ElementsAre("pic.png", "poo", 111, IsInvalid())));
|
|
|
|
|
}
|
|
|
|
|
|
2020-08-06 11:27:27 +02:00
|
|
|
TEST_F(ListModelEditor, AddBooleanDisplayValues)
|
|
|
|
|
{
|
|
|
|
|
model.setListModel(listModelNode);
|
|
|
|
|
|
|
|
|
|
model.setValue(0, 1, true);
|
|
|
|
|
|
|
|
|
|
ASSERT_THAT(displayValues(),
|
|
|
|
|
ElementsAre(ElementsAre(IsInvalid(), true, 1, 42),
|
|
|
|
|
ElementsAre("pic.png", "bar", 4, IsInvalid()),
|
|
|
|
|
ElementsAre("pic.png", "poo", 111, IsInvalid())));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST_F(ListModelEditor, AddBooleanProperties)
|
|
|
|
|
{
|
|
|
|
|
model.setListModel(listModelNode);
|
|
|
|
|
|
|
|
|
|
model.setValue(0, 1, true);
|
|
|
|
|
|
|
|
|
|
ASSERT_THAT(properties(),
|
2021-12-14 12:28:31 +01:00
|
|
|
ElementsAre(UnorderedElementsAre(IsVariantProperty("name", true),
|
|
|
|
|
IsVariantProperty("value", 1),
|
2020-08-06 11:27:27 +02:00
|
|
|
IsVariantProperty("value2", 42)),
|
|
|
|
|
UnorderedElementsAre(IsVariantProperty("image", "pic.png"),
|
|
|
|
|
IsVariantProperty("name", "bar"),
|
|
|
|
|
IsVariantProperty("value", 4)),
|
|
|
|
|
UnorderedElementsAre(IsVariantProperty("image", "pic.png"),
|
|
|
|
|
IsVariantProperty("name", "poo"),
|
|
|
|
|
IsVariantProperty("value", 111))));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST_F(ListModelEditor, AddTrueAsStringProperties)
|
|
|
|
|
{
|
|
|
|
|
model.setListModel(listModelNode);
|
|
|
|
|
|
|
|
|
|
model.setValue(0, 1, "true");
|
|
|
|
|
|
|
|
|
|
ASSERT_THAT(properties(),
|
|
|
|
|
ElementsAre(UnorderedElementsAre(IsVariantProperty("name", true),
|
|
|
|
|
IsVariantProperty("value", 1),
|
|
|
|
|
IsVariantProperty("value2", 42)),
|
|
|
|
|
UnorderedElementsAre(IsVariantProperty("image", "pic.png"),
|
|
|
|
|
IsVariantProperty("name", "bar"),
|
|
|
|
|
IsVariantProperty("value", 4)),
|
|
|
|
|
UnorderedElementsAre(IsVariantProperty("image", "pic.png"),
|
|
|
|
|
IsVariantProperty("name", "poo"),
|
|
|
|
|
IsVariantProperty("value", 111))));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST_F(ListModelEditor, AddFalseAsStringProperties)
|
|
|
|
|
{
|
|
|
|
|
model.setListModel(listModelNode);
|
|
|
|
|
|
|
|
|
|
model.setValue(0, 1, "false");
|
|
|
|
|
|
|
|
|
|
ASSERT_THAT(properties(),
|
|
|
|
|
ElementsAre(UnorderedElementsAre(IsVariantProperty("name", false),
|
|
|
|
|
IsVariantProperty("value", 1),
|
|
|
|
|
IsVariantProperty("value2", 42)),
|
|
|
|
|
UnorderedElementsAre(IsVariantProperty("image", "pic.png"),
|
|
|
|
|
IsVariantProperty("name", "bar"),
|
|
|
|
|
IsVariantProperty("value", 4)),
|
|
|
|
|
UnorderedElementsAre(IsVariantProperty("image", "pic.png"),
|
|
|
|
|
IsVariantProperty("name", "poo"),
|
|
|
|
|
IsVariantProperty("value", 111))));
|
|
|
|
|
}
|
|
|
|
|
|
2020-09-01 16:36:56 +02:00
|
|
|
TEST_F(ListModelEditor, GoIntoComponentForBinding)
|
|
|
|
|
{
|
2023-05-06 15:08:52 +02:00
|
|
|
EXPECT_CALL(goIntoComponentMock, Call(Eq(listModelNode)))
|
2020-09-01 16:36:56 +02:00
|
|
|
.WillRepeatedly(Return(mockComponentView.rootModelNode()));
|
|
|
|
|
listModelNode.setIdWithoutRefactoring("listModel");
|
|
|
|
|
listViewNode.bindingProperty("model").setExpression("listModel");
|
|
|
|
|
|
|
|
|
|
model.setListView(listViewNode);
|
|
|
|
|
|
|
|
|
|
ASSERT_THAT(displayValues(), ElementsAre(ElementsAre("com", 11, 55)));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST_F(ListModelEditor, GoIntoComponentForModelNode)
|
|
|
|
|
{
|
2023-05-06 15:08:52 +02:00
|
|
|
EXPECT_CALL(goIntoComponentMock, Call(Eq(listModelNode)))
|
2020-09-01 16:36:56 +02:00
|
|
|
.WillRepeatedly(Return(mockComponentView.rootModelNode()));
|
|
|
|
|
listViewNode.nodeProperty("model").reparentHere(listModelNode);
|
|
|
|
|
|
|
|
|
|
model.setListView(listViewNode);
|
|
|
|
|
|
|
|
|
|
ASSERT_THAT(displayValues(), ElementsAre(ElementsAre("com", 11, 55)));
|
|
|
|
|
}
|
|
|
|
|
|
2020-06-11 17:25:46 +02:00
|
|
|
} // namespace
|