1 // This file is part of Heimer.
2 // Copyright (C) 2018 Jussi Lind <jussi.lind@iki.fi>
3 //
4 // Heimer is free software: you can redistribute it and/or modify
5 // it under the terms of the GNU General Public License as published by
6 // the Free Software Foundation, either version 3 of the License, or
7 // (at your option) any later version.
8 // Heimer is distributed in the hope that it will be useful,
9 // but WITHOUT ANY WARRANTY; without even the implied warranty of
10 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 // GNU General Public License for more details.
12 //
13 // You should have received a copy of the GNU General Public License
14 // along with Heimer. If not, see <http://www.gnu.org/licenses/>.
15
16 #include "serializer_test.hpp"
17
18 #include "alz_serializer.hpp"
19 #include "mind_map_data.hpp"
20 #include "test_mode.hpp"
21
SerializerTest()22 SerializerTest::SerializerTest()
23 {
24 TestMode::setEnabled(true);
25 }
26
testEmptyDesign()27 void SerializerTest::testEmptyDesign()
28 {
29 MindMapData outData;
30 const auto inData = AlzSerializer::fromXml(AlzSerializer::toXml(outData));
31 QCOMPARE(QString(inData->version()), QString(VERSION));
32 }
33
testBackgroundColor()34 void SerializerTest::testBackgroundColor()
35 {
36 MindMapData outData;
37 outData.setBackgroundColor(QColor(1, 2, 3));
38 const auto inData = AlzSerializer::fromXml(AlzSerializer::toXml(outData));
39 QCOMPARE(inData->backgroundColor(), outData.backgroundColor());
40 }
41
testCornerRadius()42 void SerializerTest::testCornerRadius()
43 {
44 MindMapData outData;
45 outData.setCornerRadius(Constants::Node::DEFAULT_CORNER_RADIUS + 1);
46 const auto inData = AlzSerializer::fromXml(AlzSerializer::toXml(outData));
47 QCOMPARE(inData->cornerRadius(), outData.cornerRadius());
48 }
49
testEdgeColor()50 void SerializerTest::testEdgeColor()
51 {
52 MindMapData outData;
53 outData.setEdgeColor(QColor(1, 2, 3));
54 const auto inData = AlzSerializer::fromXml(AlzSerializer::toXml(outData));
55 QCOMPARE(inData->edgeColor(), outData.edgeColor());
56 }
57
testEdgeWidth()58 void SerializerTest::testEdgeWidth()
59 {
60 MindMapData outData;
61 outData.setEdgeWidth(666.42);
62 const auto inData = AlzSerializer::fromXml(AlzSerializer::toXml(outData));
63 QCOMPARE(inData->edgeWidth(), outData.edgeWidth());
64 }
65
testFontItalic()66 void SerializerTest::testFontItalic()
67 {
68 MindMapData outData;
69 QFont font("Foobar", 42, 666, true);
70 outData.setFont(font);
71 outData.setTextSize(24);
72 const auto inData = AlzSerializer::fromXml(AlzSerializer::toXml(outData));
73 QCOMPARE(inData->font().family(), outData.font().family());
74 QCOMPARE(inData->font().italic(), true);
75 QCOMPARE(inData->font().weight(), outData.font().weight());
76 QCOMPARE(inData->textSize(), outData.textSize()); // Font shouldn't change text size
77 }
78
testFontNonItalic()79 void SerializerTest::testFontNonItalic()
80 {
81 MindMapData outData;
82 QFont font;
83 outData.setFont(font);
84 const auto inData = AlzSerializer::fromXml(AlzSerializer::toXml(outData));
85 QCOMPARE(inData->font().italic(), false);
86 }
87
testFontBold()88 void SerializerTest::testFontBold()
89 {
90 MindMapData outData;
91 QFont font;
92 font.setBold(true);
93 outData.setFont(font);
94 const auto inData = AlzSerializer::fromXml(AlzSerializer::toXml(outData));
95 QCOMPARE(inData->font().bold(), true);
96 }
97
testFontNonBold()98 void SerializerTest::testFontNonBold()
99 {
100 MindMapData outData;
101 QFont font;
102 outData.setFont(font);
103 const auto inData = AlzSerializer::fromXml(AlzSerializer::toXml(outData));
104 QCOMPARE(inData->font().bold(), false);
105 }
106
testFontOverline()107 void SerializerTest::testFontOverline()
108 {
109 MindMapData outData;
110 QFont font;
111 font.setOverline(true);
112 outData.setFont(font);
113 const auto inData = AlzSerializer::fromXml(AlzSerializer::toXml(outData));
114 QCOMPARE(inData->font().overline(), true);
115 }
116
testFontNonOverline()117 void SerializerTest::testFontNonOverline()
118 {
119 MindMapData outData;
120 QFont font;
121 outData.setFont(font);
122 const auto inData = AlzSerializer::fromXml(AlzSerializer::toXml(outData));
123 QCOMPARE(inData->font().overline(), false);
124 }
125
testFontStrikeOut()126 void SerializerTest::testFontStrikeOut()
127 {
128 MindMapData outData;
129 QFont font;
130 font.setStrikeOut(true);
131 outData.setFont(font);
132 const auto inData = AlzSerializer::fromXml(AlzSerializer::toXml(outData));
133 QCOMPARE(inData->font().strikeOut(), true);
134 }
135
testFontNonStrikeOut()136 void SerializerTest::testFontNonStrikeOut()
137 {
138 MindMapData outData;
139 QFont font;
140 outData.setFont(font);
141 const auto inData = AlzSerializer::fromXml(AlzSerializer::toXml(outData));
142 QCOMPARE(inData->font().strikeOut(), false);
143 }
144
testFontUnderline()145 void SerializerTest::testFontUnderline()
146 {
147 MindMapData outData;
148 QFont font("Foobar");
149 font.setUnderline(true);
150 outData.setFont(font);
151 const auto inData = AlzSerializer::fromXml(AlzSerializer::toXml(outData));
152 QCOMPARE(inData->font().underline(), true);
153 }
154
testFontNonUnderline()155 void SerializerTest::testFontNonUnderline()
156 {
157 MindMapData outData;
158 QFont font("Foobar");
159 outData.setFont(font);
160 const auto inData = AlzSerializer::fromXml(AlzSerializer::toXml(outData));
161 QCOMPARE(inData->font().underline(), false);
162 }
163
testGridColor()164 void SerializerTest::testGridColor()
165 {
166 MindMapData outData;
167 outData.setGridColor(QColor(1, 2, 3));
168 const auto inData = AlzSerializer::fromXml(AlzSerializer::toXml(outData));
169 QCOMPARE(inData->gridColor(), outData.gridColor());
170 }
171
testLayoutOptimizer()172 void SerializerTest::testLayoutOptimizer()
173 {
174 MindMapData outData;
175 outData.setAspectRatio(3.14);
176 outData.setMinEdgeLength(42.666);
177 const auto inData = AlzSerializer::fromXml(AlzSerializer::toXml(outData));
178 QCOMPARE(inData->aspectRatio(), outData.aspectRatio());
179 QCOMPARE(inData->minEdgeLength(), outData.minEdgeLength());
180 }
181
testNotUsedImages()182 void SerializerTest::testNotUsedImages()
183 {
184 MindMapData outData;
185 outData.imageManager().addImage(Image {});
186 outData.imageManager().addImage(Image {});
187 const auto outXml = AlzSerializer::toXml(outData);
188 outData.imageManager().clear(); // ImageManager is a static class
189 QCOMPARE(outData.imageManager().images().size(), size_t { 0 });
190 const auto inData = AlzSerializer::fromXml(outXml);
191 // No nodes are using the added images, so nothing should have been serialized
192 QCOMPARE(outData.imageManager().images().size(), size_t { 0 });
193 }
194
testUsedImages()195 void SerializerTest::testUsedImages()
196 {
197 MindMapData outData;
198 const auto id1 = outData.imageManager().addImage(Image {});
199 const auto id2 = outData.imageManager().addImage(Image {});
200 auto node1 = std::make_shared<Node>();
201 outData.graph().addNode(node1);
202 node1->setImageRef(id1);
203 auto node2 = std::make_shared<Node>();
204 outData.graph().addNode(node2);
205 node2->setImageRef(id2);
206
207 const auto outXml = AlzSerializer::toXml(outData);
208 outData.imageManager().clear(); // ImageManager is a static class
209 QCOMPARE(outData.imageManager().images().size(), size_t { 0 });
210 const auto inData = AlzSerializer::fromXml(outXml);
211 QCOMPARE(outData.imageManager().images().size(), size_t { 2 });
212 }
213
testTextSize()214 void SerializerTest::testTextSize()
215 {
216 MindMapData outData;
217 outData.setTextSize(42);
218 const auto inData = AlzSerializer::fromXml(AlzSerializer::toXml(outData));
219 QCOMPARE(inData->textSize(), outData.textSize());
220 }
221
testNodeDeletion()222 void SerializerTest::testNodeDeletion()
223 {
224 MindMapData outData;
225
226 auto outNode0 = std::make_shared<Node>();
227 outData.graph().addNode(outNode0);
228
229 auto outNode1 = std::make_shared<Node>();
230 outData.graph().addNode(outNode1);
231
232 auto outNode2 = std::make_shared<Node>();
233 outData.graph().addNode(outNode2);
234
235 outData.graph().addEdge(std::make_shared<Edge>(*outNode0, *outNode1));
236
237 outData.graph().addEdge(std::make_shared<Edge>(*outNode0, *outNode2));
238
239 outData.graph().deleteNode(outNode1->index()); // Delete node in between
240
241 const auto inData = AlzSerializer::fromXml(AlzSerializer::toXml(outData));
242 const auto edges = inData->graph().getEdgesFromNode(outNode0);
243 QCOMPARE(edges.size(), static_cast<size_t>(1));
244 }
245
testSingleEdge()246 void SerializerTest::testSingleEdge()
247 {
248 MindMapData outData;
249
250 const auto outNode0 = std::make_shared<Node>();
251 outData.graph().addNode(outNode0);
252
253 const auto outNode1 = std::make_shared<Node>();
254 outData.graph().addNode(outNode1);
255
256 const auto edge = std::make_shared<Edge>(*outNode0, *outNode1);
257 const QString text = "Lorem ipsum";
258 edge->setText(text);
259 edge->setReversed(true);
260 edge->setArrowMode(Edge::ArrowMode::Double);
261 outData.graph().addEdge(edge);
262
263 const auto inData = AlzSerializer::fromXml(AlzSerializer::toXml(outData));
264 const auto edges = inData->graph().getEdgesFromNode(outNode0);
265 QCOMPARE(edges.size(), static_cast<size_t>(1));
266 QCOMPARE((*edges.begin())->text(), edge->text());
267 QCOMPARE((*edges.begin())->reversed(), edge->reversed());
268 QCOMPARE((*edges.begin())->arrowMode(), edge->arrowMode());
269 }
270
testSingleNode()271 void SerializerTest::testSingleNode()
272 {
273 MindMapData outData;
274
275 const auto outNode = std::make_shared<Node>();
276 outNode->setColor(QColor(1, 2, 3));
277 const auto imageRef = outData.imageManager().addImage(Image {});
278 outNode->setImageRef(imageRef);
279 outNode->setLocation(QPointF(333.333, 666.666));
280 outNode->setSize(QSize(123, 321));
281 outNode->setText("Lorem ipsum");
282 outNode->setTextColor(QColor(4, 5, 6));
283 outData.graph().addNode(outNode);
284
285 const auto inData = AlzSerializer::fromXml(AlzSerializer::toXml(outData));
286 QVERIFY(inData->graph().numNodes() == 1);
287
288 const auto node = inData->graph().getNode(0);
289 QVERIFY(node != nullptr);
290 QCOMPARE(node->index(), outNode->index());
291 QCOMPARE(node->color(), outNode->color());
292 QCOMPARE(node->imageRef(), outNode->imageRef());
293 QCOMPARE(node->location(), outNode->location());
294 QCOMPARE(node->size(), outNode->size());
295 QCOMPARE(node->text(), outNode->text());
296 QCOMPARE(node->textColor(), outNode->textColor());
297 }
298
299 QTEST_GUILESS_MAIN(SerializerTest)
300