BornAgain  1.19.0
Simulate and fit neutron and x-ray scattering at grazing incidence
standardviewitems.test.cpp
Go to the documentation of this file.
1 // ************************************************************************************************
2 //
3 // qt-mvvm: Model-view-view-model framework for large GUI applications
4 //
5 //! @file mvvm/tests/testviewmodel/standardviewitems.test.cpp
6 //! @brief Implements class CLASS?
7 //!
8 //! @homepage http://www.bornagainproject.org
9 //! @license GNU General Public License v3 or higher (see COPYING)
10 //! @copyright Forschungszentrum Jülich GmbH 2020
11 //! @authors Gennady Pospelov et al, Scientific Computing Group at MLZ (see CITATION, AUTHORS)
12 //
13 // ************************************************************************************************
14 
15 #include "google_test.h"
16 #include "mvvm/model/sessionitem.h"
18 #include <QColor>
19 #include <memory>
20 #include <stdexcept>
21 
22 using namespace ModelView;
23 
24 class StandardViewItemsTest : public ::testing::Test {
25 public:
27 };
28 
30 
31 // ----------------------------------------------------------------------------
32 // Tests for ViewLabelItem
33 // ----------------------------------------------------------------------------
34 
35 TEST_F(StandardViewItemsTest, ViewLabelItem_initialState)
36 {
37  SessionItem item;
38  ViewLabelItem viewItem(&item);
39  EXPECT_EQ(viewItem.item(), &item);
40  EXPECT_EQ(viewItem.item_role(), ItemDataRole::DISPLAY);
41 }
42 
43 //! ViewLabelItem::data method
44 //! Checks that the data method is correctly forwarded to underlying SessionItem.
45 
46 TEST_F(StandardViewItemsTest, ViewLabelItem_data)
47 {
48  // create SessionItem with data on board
49  SessionItem item;
50  const std::string expected("Layer");
51  EXPECT_TRUE(item.setData(expected, ItemDataRole::DISPLAY));
52 
53  // initialize viewItem with sessionItem and check the data
54  ViewLabelItem viewItem(&item);
55  EXPECT_EQ(Utils::toCustomVariant(viewItem.data(Qt::EditRole)), QVariant::fromValue(expected));
56  EXPECT_EQ(Utils::toCustomVariant(viewItem.data(Qt::DisplayRole)),
57  QVariant::fromValue(expected));
58 }
59 
60 //! ViewLabelItem::setData
61 //! Checks that the setData method is correctly forwarded to underlying SessionItem.
62 
63 TEST_F(StandardViewItemsTest, ViewLabelItem_setData)
64 {
65  // create SessionItem with data on board
66  SessionItem item;
67  const std::string expected("Layer");
68  EXPECT_TRUE(item.setData(expected, ItemDataRole::DISPLAY));
69 
70  // initialize viewItem with sessionItem and set the data
71  ViewLabelItem viewItem(&item);
72  QVariant new_data("MultiLayer");
73  EXPECT_TRUE(viewItem.setData(new_data, Qt::EditRole));
74  EXPECT_EQ(viewItem.data(Qt::DisplayRole), new_data); // new data
75  EXPECT_EQ(viewItem.data(Qt::EditRole), new_data); // new data
76 
77  // SessionItem itself should have new data
78  EXPECT_EQ(item.data<QVariant>(ItemDataRole::DISPLAY),
79  Utils::toCustomVariant(new_data)); // new data
80 
81  // it is not allowed to set another type of data to ViewLabelItem
82  QVariant not_allowed_value(42);
83  EXPECT_THROW(viewItem.setData(not_allowed_value, Qt::EditRole), std::runtime_error);
84 }
85 
86 //! Testing ViewLabelItem::flags.
87 
88 TEST_F(StandardViewItemsTest, ViewLabelItem_flags)
89 {
90  SessionItem item;
91  const std::string expected("Layer");
92  EXPECT_TRUE(item.setData(expected, ItemDataRole::DISPLAY));
93 
94  ViewLabelItem viewItem(&item);
95  EXPECT_FALSE(viewItem.flags() & Qt::ItemIsEditable);
96 }
97 
98 //! Testing tooltip tole.
99 
100 TEST_F(StandardViewItemsTest, ViewLabelItem_toolTipRole)
101 {
102  SessionItem item;
103 
104  ViewLabelItem viewItem(&item);
105  EXPECT_FALSE(viewItem.data(Qt::ToolTipRole).isValid());
106 
107  item.setToolTip("abc");
108  EXPECT_EQ(viewItem.data(Qt::ToolTipRole).toString(), QString("abc"));
109 }
110 
111 // ----------------------------------------------------------------------------
112 // Tests for ViewDataItem
113 // ----------------------------------------------------------------------------
114 
115 TEST_F(StandardViewItemsTest, ViewDataItem_initialState)
116 {
117  SessionItem item;
118  ViewDataItem viewItem(&item);
119  EXPECT_EQ(viewItem.item(), &item);
120  EXPECT_EQ(viewItem.item_role(), ItemDataRole::DATA);
121 }
122 
123 //! ViewDataItem::data method for double values.
124 //! Checks that the data method is correctly forwarded to underlying SessionItem.
125 
126 TEST_F(StandardViewItemsTest, ViewDataItem_dataForDouble)
127 {
128  // create SessionItem with data on board
129  SessionItem item;
130  QVariant expected(42.0);
131  EXPECT_TRUE(item.setData(expected));
132 
133  // initialize viewItem with sessionItem and check the data
134  ViewDataItem viewItem(&item);
135  EXPECT_EQ(viewItem.data(Qt::EditRole), expected);
136  EXPECT_EQ(viewItem.data(Qt::DisplayRole), expected);
137 }
138 
139 //! ViewDataItem::setData for double values.
140 //! Checks that the setData method is correctly forwarded to underlying SessionItem.
141 
142 TEST_F(StandardViewItemsTest, ViewDataItem_setDataForDouble)
143 {
144  // create SessionItem with data on board
145  SessionItem item;
146  QVariant expected(42.0);
147  EXPECT_TRUE(item.setData(expected));
148 
149  // initialize viewItem with sessionItem and set the data
150  ViewDataItem viewItem(&item);
151  QVariant new_data(43.0);
152  EXPECT_TRUE(viewItem.setData(new_data, Qt::EditRole));
153  EXPECT_EQ(viewItem.data(Qt::DisplayRole), new_data); // new data
154  EXPECT_EQ(viewItem.data(Qt::EditRole), new_data); // new data
155 
156  // SessionItem itself should have new data
157  EXPECT_EQ(item.data<QVariant>(), new_data); // new data
158 
159  // it is not allowed to set another type of data to ViewDataItem
160  QVariant not_allowed_value("Layer");
161  EXPECT_THROW(viewItem.setData(not_allowed_value, Qt::EditRole), std::runtime_error);
162 }
163 
164 //! ViewDataItem::setData for double values.
165 //! Checks that setting of same data returns false.
166 
167 TEST_F(StandardViewItemsTest, ViewDataItem_setSameData)
168 {
169  // create SessionItem with data on board
170  SessionItem item;
171  QVariant expected(42.0);
172  EXPECT_TRUE(item.setData(expected));
173 
174  // initialize viewItem with sessionItem and set the data
175  ViewDataItem viewItem(&item);
176  QVariant new_data(42.0);
177  EXPECT_FALSE(viewItem.setData(new_data, Qt::EditRole));
178  EXPECT_EQ(viewItem.data(Qt::EditRole), new_data); // new data
179 }
180 
181 //! ViewDataItem::data method for QColor.
182 //! Checks that the data method is correctly forwarded to underlying SessionItem.
183 
184 TEST_F(StandardViewItemsTest, ViewDataItem_dataForColor)
185 {
186  // create SessionItem with data on board
187  SessionItem item;
188  QVariant expected = QVariant::fromValue(QColor(Qt::green));
189  EXPECT_TRUE(item.setData(expected));
190 
191  ViewDataItem viewItem(&item);
192  EXPECT_EQ(viewItem.data(Qt::EditRole), expected);
193  EXPECT_EQ(viewItem.data(Qt::DisplayRole), expected);
194  EXPECT_EQ(viewItem.data(Qt::DecorationRole), expected);
195 }
196 
197 //! ViewDataItem::setData for QColor.
198 //! Checks that the setData method is correctly forwarded to underlying SessionItem.
199 
200 TEST_F(StandardViewItemsTest, ViewDataItem_setDataForColor)
201 {
202  // create SessionItem with data on board
203  SessionItem item;
204  QVariant expected = QVariant::fromValue(QColor(Qt::green));
205  EXPECT_TRUE(item.setData(expected));
206 
207  // initialize viewItem with sessionItem and set the data
208  ViewDataItem viewItem(&item);
209  QVariant new_data = QVariant::fromValue(QColor(Qt::red));
210  EXPECT_TRUE(viewItem.setData(new_data, Qt::EditRole));
211  EXPECT_EQ(viewItem.data(Qt::DisplayRole), new_data); // new data
212  EXPECT_EQ(viewItem.data(Qt::EditRole), new_data); // new data
213  EXPECT_EQ(viewItem.data(Qt::DecorationRole), new_data); // new data
214 
215  // SessionItem itself should have new data
216  EXPECT_EQ(item.data<QVariant>(), new_data); // new data
217 
218  // it is not allowed to set another type of data to ViewDataItem
219  QVariant not_allowed_value("Layer");
220  EXPECT_THROW(viewItem.setData(not_allowed_value, Qt::EditRole), std::runtime_error);
221 }
222 
223 //! Testing ViewLabelItem::flags.
224 
225 TEST_F(StandardViewItemsTest, ViewDataItem_flags)
226 {
227  SessionItem item;
228  QVariant expected = QVariant::fromValue(std::string("Layer"));
229  EXPECT_TRUE(item.setData(expected, ItemDataRole::DATA));
230 
231  ViewDataItem viewItem(&item);
232  EXPECT_TRUE(viewItem.flags() & Qt::ItemIsEditable);
233 }
234 
235 //! Testing tooltip tole.
236 
237 TEST_F(StandardViewItemsTest, ViewDataItem_toolTipRole)
238 {
239  SessionItem item;
240 
241  ViewDataItem viewItem(&item);
242  EXPECT_FALSE(viewItem.data(Qt::ToolTipRole).isValid());
243 
244  item.setToolTip("abc");
245  EXPECT_EQ(viewItem.data(Qt::ToolTipRole).toString(), QString("abc"));
246 }
247 
248 //! Behavior of ViewDataItem with SessionItem which initially contains invalid data.
249 //! It should be possible to set data after.
250 
251 TEST_F(StandardViewItemsTest, ViewDataItem_invalidTheValidData)
252 {
253  SessionItem item;
254  ViewDataItem viewItem(&item);
255 
256  // initially data is invalid, and non-editable
257  EXPECT_FALSE(viewItem.flags() & Qt::ItemIsEditable);
258  EXPECT_FALSE(viewItem.data(Qt::EditRole).isValid());
259 
260  // current behavior that setting data is still possible
261  EXPECT_TRUE(viewItem.setData(QVariant::fromValue(42.0), Qt::EditRole));
262 
263  // setting data to original item
264  item.setData(43.0);
265 
266  // data became editable via ViewDataItem
267  EXPECT_TRUE(viewItem.flags() & Qt::ItemIsEditable);
268  EXPECT_EQ(viewItem.data(Qt::EditRole), QVariant::fromValue(43.0));
269 }
The main object representing an editable/displayable/serializable entity.
Definition: sessionitem.h:38
SessionItem * setToolTip(const std::string &tooltip)
Sets item tooltip (fluent interface).
bool setData(const T &value, int role=ItemDataRole::DATA, bool direct=false)
Sets data for a given role.
Definition: sessionitem.h:141
T data(int role=ItemDataRole::DATA) const
Returns data of given type T for given role.
Definition: sessionitem.h:148
Represents data role of SessionItem in any cell of Qt's trees and tables.
Qt::ItemFlags flags() const override
Returns Qt's item flags.
QVariant data(int role) const override
Returns the data for given role according to Qt::ItemDataRole namespace definitions.
int item_role() const
Definition: viewitem.cpp:173
virtual Qt::ItemFlags flags() const
Returns Qt's item flags.
Definition: viewitem.cpp:231
virtual bool setData(const QVariant &value, int qt_role)
Sets the data to underlying SessionItem.
Definition: viewitem.cpp:221
SessionItem * item() const
Definition: viewitem.cpp:168
Represents display name of SessionItem in any cell of Qt's trees and tables.
QVariant data(int role) const override
Returns the data for given role according to Qt::ItemDataRole namespace definitions.
Defines class CLASS?
const int DATA
main data role
Definition: mvvm_types.h:30
const int DISPLAY
display name
Definition: mvvm_types.h:31
MVVM_MODEL_EXPORT Variant toCustomVariant(const Variant &standard)
Converts Qt variant to custom variant on board of SessionItem.
materialitems.h Collection of materials to populate MaterialModel.
QVariant DecorationRole(const SessionItem &item)
Returns tooltip for given item.
QVariant ToolTipRole(const SessionItem &item, int ncol=0)
Returns tooltip for given item.
Defines class CLASS?
Defines class CLASS?
TEST_F(StandardViewItemsTest, ViewLabelItem_initialState)