BornAgain  1.19.0
Simulate and fit neutron and x-ray scattering at grazing incidence
jsonitemdataconverter.test.cpp File Reference

Implements class CLASS? More...

Include dependency graph for jsonitemdataconverter.test.cpp:

Go to the source code of this file.

Classes

class  JsonItemDataConverterTest
 Test convertion of SessionItemData from/to QJsonObject. More...
 

Functions

 TEST_F (JsonItemDataConverterTest, createCopyConverter)
 Checking factory method to create copying converter. More...
 
 TEST_F (JsonItemDataConverterTest, createProjectConverter)
 Checking factory method for typical scenario for copying whole data while writing, and updating on reading. More...
 
 TEST_F (JsonItemDataConverterTest, fromItemToJsonAndBack)
 From SessionItemData to json and back. More...
 
 TEST_F (JsonItemDataConverterTest, getJson)
 Creating QJsonArray from SessionItemData. More...
 
 TEST_F (JsonItemDataConverterTest, tooltipRole)
 By default tooltip role is enabled for read and write. More...
 
 TEST_F (JsonItemDataConverterTest, updateFromJson)
 Update SessionItemData from json obtained from another JsonItemData. More...
 
 TEST_F (JsonItemDataConverterTest, writeAllReadFiltered)
 Write all roles, read filtered into empty SessionItemData. More...
 
 TEST_F (JsonItemDataConverterTest, writeFilteredReadAll)
 Write filtered roles, read all into empty SessionItemData. More...
 

Detailed Description

Implements class CLASS?

Homepage:\n http://www.bornagainproject.org
License:\n GNU General Public License v3 or higher (see COPYING)
Authors
Gennady Pospelov et al, Scientific Computing Group at MLZ (see CITATION, AUTHORS)

Definition in file jsonitemdataconverter.test.cpp.

Function Documentation

◆ TEST_F() [1/8]

TEST_F ( JsonItemDataConverterTest  ,
createCopyConverter   
)

Checking factory method to create copying converter.

It is used normally in the situation, when the item data is fully serialized to JSON, and then desirialized into empty item data.

Definition at line 207 of file jsonitemdataconverter.test.cpp.

208 {
209  auto converter = JsonItemDataConverter::createCopyConverter();
210 
211  SessionItemData data;
212  data.setData(QVariant::fromValue(std::string("identifier")), ItemDataRole::IDENTIFIER);
213  data.setData(42, ItemDataRole::DATA);
214  data.setData(QVariant::fromValue(std::string("display")), ItemDataRole::DISPLAY);
215  data.setData(QVariant::fromValue(std::string("tooltip")), ItemDataRole::TOOLTIP);
216 
217  QJsonArray array = converter->to_json(data);
218 
219  SessionItemData data2;
220  converter->from_json(array, data2);
221 
222  //! Empty data should become the same.
223  EXPECT_EQ(data.roles(), data2.roles());
224  EXPECT_EQ(data2.data(ItemDataRole::IDENTIFIER).value<std::string>(), "identifier");
225  EXPECT_EQ(data2.data(ItemDataRole::DATA).value<int>(), 42);
226  EXPECT_EQ(data2.data(ItemDataRole::DISPLAY).value<std::string>(), "display");
227  EXPECT_EQ(data2.data(ItemDataRole::TOOLTIP).value<std::string>(), "tooltip");
228 }
Handles data roles for SessionItem.
std::vector< int > roles() const
bool setData(const Variant &value, int role)
Sets the data for given role.
Variant data(int role) const
const int TOOLTIP
tooltip for item's data
Definition: mvvm_types.h:34
const int DATA
main data role
Definition: mvvm_types.h:30
const int DISPLAY
display name
Definition: mvvm_types.h:31
const int IDENTIFIER
unique identifier
Definition: mvvm_types.h:29

References ModelView::JsonItemDataConverter::createCopyConverter(), ModelView::ItemDataRole::DATA, ModelView::SessionItemData::data(), ModelView::ItemDataRole::DISPLAY, ModelView::ItemDataRole::IDENTIFIER, ModelView::SessionItemData::roles(), ModelView::SessionItemData::setData(), and ModelView::ItemDataRole::TOOLTIP.

Here is the call graph for this function:

◆ TEST_F() [2/8]

TEST_F ( JsonItemDataConverterTest  ,
createProjectConverter   
)

Checking factory method for typical scenario for copying whole data while writing, and updating on reading.

This is a repetition of previous test.

Definition at line 233 of file jsonitemdataconverter.test.cpp.

234 {
235  auto converter = JsonItemDataConverter::createProjectConverter();
236 
237  SessionItemData data;
238  data.setData(QVariant::fromValue(std::string("identifier")), ItemDataRole::IDENTIFIER);
239  data.setData(42, ItemDataRole::DATA);
240  data.setData(QVariant::fromValue(std::string("display")), ItemDataRole::DISPLAY);
241  data.setData(QVariant::fromValue(std::string("tooltip")), ItemDataRole::TOOLTIP);
242  auto expected_roles = data.roles();
243 
244  QJsonArray array = converter->to_json(data);
245 
246  // changing data
247  data.setData(QVariant::fromValue(std::string("identifier_new")), ItemDataRole::IDENTIFIER);
248  data.setData(43, ItemDataRole::DATA);
249 
250  // deserializing back
251  converter->from_json(array, data);
252 
253  //! DATA and IDENTIFIER roles should be as before the serialization
254  EXPECT_EQ(data.roles(), expected_roles);
255  EXPECT_EQ(data.data(ItemDataRole::IDENTIFIER).value<std::string>(), "identifier");
256  EXPECT_EQ(data.data(ItemDataRole::DATA).value<int>(), 42);
257  EXPECT_EQ(data.data(ItemDataRole::DISPLAY).value<std::string>(), "display");
258  EXPECT_EQ(data.data(ItemDataRole::TOOLTIP).value<std::string>(), "tooltip");
259 }

References ModelView::JsonItemDataConverter::createProjectConverter(), ModelView::ItemDataRole::DATA, ModelView::SessionItemData::data(), ModelView::ItemDataRole::DISPLAY, ModelView::ItemDataRole::IDENTIFIER, ModelView::SessionItemData::roles(), ModelView::SessionItemData::setData(), and ModelView::ItemDataRole::TOOLTIP.

Here is the call graph for this function:

◆ TEST_F() [3/8]

TEST_F ( JsonItemDataConverterTest  ,
fromItemToJsonAndBack   
)

From SessionItemData to json and back.

Definition at line 68 of file jsonitemdataconverter.test.cpp.

69 {
70  JsonItemDataConverter converter;
71 
72  // initial data
73  const std::vector<int> roles = {1, 2, 3};
74  const std::vector<QVariant> expected = {QVariant::fromValue(42), QVariant::fromValue(1.23),
75  QVariant::fromValue(std::string("abc"))};
76 
77  // constructing SessionItemData
78  SessionItemData data;
79  for (size_t i = 0; i < roles.size(); ++i)
80  data.setData(expected[i], roles[i]);
81 
82  // constructing json array from data
83  QJsonArray array = converter.to_json(data);
84  auto fileName = TestUtils::TestFileName(testDir(), "itemdata.json");
85  TestUtils::SaveJson(array, fileName);
86 
87  // constructing data from json array
88  SessionItemData data2;
89  converter.from_json(array, data2);
90  EXPECT_EQ(data2.roles().size(), 3u);
91 
92  EXPECT_EQ(data2.roles(), roles);
93  for (auto role : roles) {
94  EXPECT_EQ(data2.data(role), expected[role - 1]);
95  }
96 }
Default converter of SessionItemData to/from json object.
void from_json(const QJsonArray &object, SessionItemData &data) override
Updates existing data with JSON content.
QJsonArray to_json(const SessionItemData &data) override
Converts SessionItemData to JSON;.
std::string TestFileName(const std::string &test_sub_dir, const std::string &file_name)
Returns full path to the file in test directory.
Definition: test_utils.cpp:52
void SaveJson(const QJsonObject &object, const std::string &fileName)
Definition: test_utils.cpp:58

References ModelView::SessionItemData::data(), ModelView::JsonItemDataConverter::from_json(), ModelView::SessionItemData::roles(), TestUtils::SaveJson(), ModelView::SessionItemData::setData(), TestUtils::TestFileName(), and ModelView::JsonItemDataConverter::to_json().

Here is the call graph for this function:

◆ TEST_F() [4/8]

TEST_F ( JsonItemDataConverterTest  ,
getJson   
)

Creating QJsonArray from SessionItemData.

Definition at line 42 of file jsonitemdataconverter.test.cpp.

43 {
44  JsonItemFormatAssistant assistant;
45  JsonItemDataConverter converter;
46 
47  // construction SessionItem data
48  SessionItemData data;
49  const int role = Qt::UserRole + 1;
50  data.setData(QVariant::fromValue(42), role);
51  data.setData(QVariant::fromValue(std::string("abc")), role + 2);
52 
53  // creating json object out of it
54  QJsonArray array = converter.to_json(data);
55 
56  // it should contain two json objects
57  EXPECT_EQ(array.size(), 2);
58  EXPECT_TRUE(array[0].isObject());
59  EXPECT_TRUE(array[1].isObject());
60 
61  // and these objects repesent DataRole
62  EXPECT_TRUE(assistant.isSessionItemData(array[0].toObject()));
63  EXPECT_TRUE(assistant.isSessionItemData(array[1].toObject()));
64 }
Utility class to determine, whether given JSON object can represent various parts of SessionModel.
bool isSessionItemData(const QJsonObject &json) const

References ModelView::JsonItemFormatAssistant::isSessionItemData(), ModelView::SessionItemData::setData(), and ModelView::JsonItemDataConverter::to_json().

Here is the call graph for this function:

◆ TEST_F() [5/8]

TEST_F ( JsonItemDataConverterTest  ,
tooltipRole   
)

By default tooltip role is enabled for read and write.

Definition at line 100 of file jsonitemdataconverter.test.cpp.

101 {
102  // initial data
103  SessionItemData data;
104  data.setData(QVariant::fromValue(std::string("tooltip")), ItemDataRole::TOOLTIP);
105 
106  // constructing json array from data
107  JsonItemDataConverter converter;
108  QJsonArray array = converter.to_json(data);
109 
110  // constructing data from json array
111  SessionItemData data2;
112  converter.from_json(array, data2);
113  EXPECT_EQ(data2.roles().size(), 1u);
114  EXPECT_EQ(data2.data(ItemDataRole::TOOLTIP).value<std::string>(), "tooltip");
115 }

References ModelView::SessionItemData::data(), ModelView::JsonItemDataConverter::from_json(), ModelView::SessionItemData::roles(), ModelView::SessionItemData::setData(), ModelView::JsonItemDataConverter::to_json(), and ModelView::ItemDataRole::TOOLTIP.

Here is the call graph for this function:

◆ TEST_F() [6/8]

TEST_F ( JsonItemDataConverterTest  ,
updateFromJson   
)

Update SessionItemData from json obtained from another JsonItemData.

Definition at line 170 of file jsonitemdataconverter.test.cpp.

171 {
172  const std::vector<int> roles = {ItemDataRole::IDENTIFIER, ItemDataRole::DATA,
174  const std::vector<QVariant> variants = {QVariant::fromValue(std::string("identifier1")),
175  QVariant::fromValue(42),
176  QVariant::fromValue(std::string("tooltip1"))};
177 
178  // initial data
179  SessionItemData data1;
180  for (size_t i = 0; i < roles.size(); ++i)
181  data1.setData(variants[i], roles[i]);
182 
183  // data intended for serialization
184  SessionItemData data2;
185  data1.setData(QVariant::fromValue(43), ItemDataRole::DATA);
186  data1.setData(QVariant::fromValue(std::string("identifier2")), ItemDataRole::IDENTIFIER);
187 
188  // constructing json array from data
189  JsonItemDataConverter converter;
190  QJsonArray array = converter.to_json(data2);
191 
192  // updating data1 from json array
193  converter.from_json(array, data1);
194 
195  // roles as in initial object, id+data as in data2, tooltip as in data1
196  EXPECT_EQ(data1.roles(), roles);
197  EXPECT_EQ(data1.data(ItemDataRole::IDENTIFIER).value<std::string>(),
198  std::string("identifier2"));
199  EXPECT_EQ(data1.data(ItemDataRole::DATA).value<int>(), 43);
200  EXPECT_EQ(data1.data(ItemDataRole::TOOLTIP).value<std::string>(), std::string("tooltip1"));
201 }

References ModelView::ItemDataRole::DATA, ModelView::SessionItemData::data(), ModelView::JsonItemDataConverter::from_json(), ModelView::ItemDataRole::IDENTIFIER, ModelView::SessionItemData::roles(), ModelView::SessionItemData::setData(), ModelView::JsonItemDataConverter::to_json(), and ModelView::ItemDataRole::TOOLTIP.

Here is the call graph for this function:

◆ TEST_F() [7/8]

TEST_F ( JsonItemDataConverterTest  ,
writeAllReadFiltered   
)

Write all roles, read filtered into empty SessionItemData.

Definition at line 143 of file jsonitemdataconverter.test.cpp.

144 {
145  // initial data
146  SessionItemData data;
147  data.setData(QVariant::fromValue(std::string("abc")), ItemDataRole::IDENTIFIER);
148  data.setData(42, ItemDataRole::DATA);
149  data.setData(QVariant::fromValue(std::string("abc")), ItemDataRole::DISPLAY);
150  data.setData(QVariant::fromValue(std::string("tooltip")), ItemDataRole::TOOLTIP);
151 
152  // constructing json array from data
153  auto from_json_accept = [](auto role) { return role == ItemDataRole::TOOLTIP; };
154 
155  JsonItemDataConverter converter({}, from_json_accept);
156  QJsonArray array = converter.to_json(data);
157 
158  // constructing data from json array
159  SessionItemData data2;
160  converter.from_json(array, data2);
161 
162  // while array itself has 4 elements, restored data has only TOOLTIPS as defined in filter
163  EXPECT_EQ(array.size(), 4u);
164  EXPECT_EQ(data2.roles().size(), 1u);
165  EXPECT_TRUE(data2.hasData(ItemDataRole::TOOLTIP));
166 }
bool hasData(int role) const
Returns true if item has data with given role.

References ModelView::ItemDataRole::DATA, ModelView::ItemDataRole::DISPLAY, ModelView::SessionItemData::hasData(), ModelView::ItemDataRole::IDENTIFIER, ModelView::SessionItemData::roles(), ModelView::SessionItemData::setData(), ModelView::JsonItemDataConverter::to_json(), and ModelView::ItemDataRole::TOOLTIP.

Here is the call graph for this function:

◆ TEST_F() [8/8]

TEST_F ( JsonItemDataConverterTest  ,
writeFilteredReadAll   
)

Write filtered roles, read all into empty SessionItemData.

Definition at line 119 of file jsonitemdataconverter.test.cpp.

120 {
121  // initial data
122  SessionItemData data;
123  data.setData(QVariant::fromValue(std::string("abc")), ItemDataRole::IDENTIFIER);
124  data.setData(42, ItemDataRole::DATA);
125  data.setData(QVariant::fromValue(std::string("abc")), ItemDataRole::DISPLAY);
126  data.setData(QVariant::fromValue(std::string("tooltip")), ItemDataRole::TOOLTIP);
127 
128  // constructing json array from data
129  auto to_json_accept = [](auto role) { return role != ItemDataRole::TOOLTIP; };
130 
131  JsonItemDataConverter converter(to_json_accept, {});
132  QJsonArray array = converter.to_json(data);
133 
134  // constructing data from json array
135  SessionItemData data2;
136  converter.from_json(array, data2);
137  EXPECT_EQ(data2.roles().size(), 3u);
138  EXPECT_FALSE(data2.hasData(ItemDataRole::TOOLTIP));
139 }

References ModelView::ItemDataRole::DATA, ModelView::ItemDataRole::DISPLAY, ModelView::SessionItemData::hasData(), ModelView::ItemDataRole::IDENTIFIER, ModelView::SessionItemData::roles(), ModelView::SessionItemData::setData(), ModelView::JsonItemDataConverter::to_json(), and ModelView::ItemDataRole::TOOLTIP.

Here is the call graph for this function: