summaryrefslogtreecommitdiffstats
path: root/framework/src/domain/mime/mimetreeparser/autotests/nodehelpertest.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'framework/src/domain/mime/mimetreeparser/autotests/nodehelpertest.cpp')
-rw-r--r--framework/src/domain/mime/mimetreeparser/autotests/nodehelpertest.cpp259
1 files changed, 259 insertions, 0 deletions
diff --git a/framework/src/domain/mime/mimetreeparser/autotests/nodehelpertest.cpp b/framework/src/domain/mime/mimetreeparser/autotests/nodehelpertest.cpp
new file mode 100644
index 00000000..63e9119e
--- /dev/null
+++ b/framework/src/domain/mime/mimetreeparser/autotests/nodehelpertest.cpp
@@ -0,0 +1,259 @@
1/* Copyright 2015 Sandro Knauß <bugs@sandroknauss.de>
2
3 This program is free software; you can redistribute it and/or
4 modify it under the terms of the GNU General Public License as
5 published by the Free Software Foundation; either version 2 of
6 the License or (at your option) version 3 or any later version
7 accepted by the membership of KDE e.V. (or its successor approved
8 by the membership of KDE e.V.), which shall act as a proxy
9 defined in Section 14 of version 3 of the license.
10
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
15
16 You should have received a copy of the GNU General Public License
17 along with this program. If not, see <http://www.gnu.org/licenses/>.
18*/
19#include "nodehelpertest.h"
20
21#include "nodehelper.h"
22
23#include <qtest.h>
24
25using namespace MimeTreeParser;
26
27NodeHelperTest::NodeHelperTest()
28 : QObject()
29{
30
31}
32
33void NodeHelperTest::testPersistentIndex()
34{
35 NodeHelper helper;
36
37 KMime::Content *node = new KMime::Content();
38 KMime::Content *node2 = new KMime::Content();
39 KMime::Content *node2Extra = new KMime::Content();
40 KMime::Content *subNode = new KMime::Content();
41 KMime::Content *subsubNode = new KMime::Content(), *subsubNode2 = new KMime::Content();
42 KMime::Content *node2ExtraSubNode = new KMime::Content();
43 KMime::Content *node2ExtraSubsubNode = new KMime::Content();
44 KMime::Content *node2ExtraSubsubNode2 = new KMime::Content();
45 KMime::Content *extra = new KMime::Content(), *extra2 = new KMime::Content();
46 KMime::Content *subExtra = new KMime::Content();
47 KMime::Content *subsubExtra = new KMime::Content();
48 KMime::Content *subsubExtraNode = new KMime::Content();
49
50 subNode->addContent(subsubNode);
51 subNode->addContent(subsubNode2);
52 node->addContent(subNode);
53 subsubExtra->addContent(subsubExtraNode);
54 helper.attachExtraContent(node, extra);
55 helper.attachExtraContent(node, extra2);
56 helper.attachExtraContent(subNode, subExtra);
57 helper.attachExtraContent(subsubNode2, subsubExtra);
58
59 // This simulates Opaque S/MIME signed and encrypted message with attachment
60 // (attachment is node2SubsubNode2)
61 node2Extra->addContent(node2ExtraSubNode);
62 node2ExtraSubNode->addContent(node2ExtraSubsubNode);
63 node2ExtraSubNode->addContent(node2ExtraSubsubNode2);
64 helper.attachExtraContent(node2, node2Extra);
65
66 /* all content has a internal first child, so indexes starts at 2
67 * node ""
68 * -> subNode "2"
69 * -> subsubNode "2.2"
70 * -> subsubNode2 "2.3"
71 *
72 * node ""
73 * -> extra "e0"
74 * -> extra2 "e1"
75 *
76 * subNode "2"
77 * -> subExtra "2:e0"
78 *
79 * subsubNode2 "2.3"
80 * -> subsubExtra "2.3:e0"
81 * -> subsubExtraNode "2.3:e0:2"
82 *
83 * node2 ""
84 *
85 * node2 ""
86 * -> node2Extra "e0"
87 * -> node2ExtraSubNode "e0:2"
88 * -> node2ExtraSubsubNode "e0:2.2"
89 * -> node2ExtraSubsubNode2 "e0:2.3"
90 */
91
92 QCOMPARE(helper.persistentIndex(node), QStringLiteral(""));
93 QCOMPARE(helper.contentFromIndex(node, QStringLiteral("")), node);
94
95 QCOMPARE(helper.persistentIndex(node->contents()[0]), QStringLiteral("1"));
96 QCOMPARE(helper.contentFromIndex(node, QStringLiteral("1")), node->contents()[0]);
97
98 QCOMPARE(helper.persistentIndex(subNode), QStringLiteral("2"));
99 QCOMPARE(helper.contentFromIndex(node, QStringLiteral("2")), subNode);
100
101 QCOMPARE(helper.persistentIndex(subsubNode), QStringLiteral("2.2"));
102 QCOMPARE(helper.contentFromIndex(node, QStringLiteral("2.2")), subsubNode);
103
104 QCOMPARE(helper.persistentIndex(subsubNode2), QStringLiteral("2.3"));
105 QCOMPARE(helper.contentFromIndex(node, QStringLiteral("2.3")), subsubNode2);
106
107 QCOMPARE(helper.persistentIndex(extra), QStringLiteral("e0"));
108 QCOMPARE(helper.contentFromIndex(node, QStringLiteral("e0")), extra);
109
110 QCOMPARE(helper.persistentIndex(extra2), QStringLiteral("e1"));
111 QCOMPARE(helper.contentFromIndex(node, QStringLiteral("e1")), extra2);
112
113 QCOMPARE(helper.persistentIndex(subExtra), QStringLiteral("2:e0"));
114 QCOMPARE(helper.contentFromIndex(node, QStringLiteral("2:e0")), subExtra);
115
116 QCOMPARE(helper.persistentIndex(subsubExtra), QStringLiteral("2.3:e0"));
117 QCOMPARE(helper.contentFromIndex(node, QStringLiteral("2.3:e0")), subsubExtra);
118
119 QCOMPARE(helper.persistentIndex(subsubExtraNode), QStringLiteral("2.3:e0:2"));
120 QCOMPARE(helper.contentFromIndex(node, QStringLiteral("2.3:e0:2")), subsubExtraNode);
121
122 QCOMPARE(helper.persistentIndex(node2ExtraSubsubNode2), QStringLiteral("e0:2.3"));
123 QCOMPARE(helper.contentFromIndex(node2, QStringLiteral("e0:2.3")), node2ExtraSubsubNode2);
124
125 delete node;
126}
127
128void NodeHelperTest::testHREF()
129{
130 NodeHelper helper;
131 KMime::Message::Ptr msg(new KMime::Message);
132 QUrl url;
133
134 KMime::Content *node = msg->topLevel();
135 KMime::Content *subNode = new KMime::Content();
136 KMime::Content *subsubNode = new KMime::Content(), *subsubNode2 = new KMime::Content();
137 KMime::Content *extra = new KMime::Content(), *extra2 = new KMime::Content();
138 KMime::Content *subExtra = new KMime::Content();
139 KMime::Content *subsubExtra = new KMime::Content();
140 KMime::Content *subsubExtraNode = new KMime::Content();
141
142 subNode->addContent(subsubNode);
143 subNode->addContent(subsubNode2);
144 node->addContent(subNode);
145 subsubExtra->addContent(subsubExtraNode);
146 helper.attachExtraContent(node, extra);
147 helper.attachExtraContent(node, extra2);
148 helper.attachExtraContent(subNode, subExtra);
149 helper.attachExtraContent(subsubNode2, subsubExtra);
150
151 url = QUrl(QStringLiteral(""));
152 QCOMPARE(helper.fromHREF(msg, url), node);
153
154 url = QUrl(QStringLiteral("attachment:e0?place=body"));
155 QCOMPARE(helper.fromHREF(msg, url), extra);
156
157 url = QUrl(QStringLiteral("attachment:2.2?place=body"));
158 QCOMPARE(helper.fromHREF(msg, url), subsubNode);
159
160 url = QUrl(QStringLiteral("attachment:2.3:e0:2?place=body"));
161 QCOMPARE(helper.fromHREF(msg, url), subsubExtraNode);
162
163 QCOMPARE(helper.asHREF(node, QStringLiteral("body")), QStringLiteral("attachment:?place=body"));
164 QCOMPARE(helper.asHREF(extra, QStringLiteral("body")), QStringLiteral("attachment:e0?place=body"));
165 QCOMPARE(helper.asHREF(subsubNode, QStringLiteral("body")), QStringLiteral("attachment:2.2?place=body"));
166 QCOMPARE(helper.asHREF(subsubExtraNode, QStringLiteral("body")), QStringLiteral("attachment:2.3:e0:2?place=body"));
167}
168
169void NodeHelperTest::testLocalFiles()
170{
171 NodeHelper helper;
172 KMime::Message::Ptr msg(new KMime::Message);
173
174 KMime::Content *node = msg->topLevel();
175 KMime::Content *subNode = new KMime::Content();
176 KMime::Content *subsubNode = new KMime::Content(), *subsubNode2 = new KMime::Content();
177 KMime::Content *extra = new KMime::Content(), *extra2 = new KMime::Content();
178 KMime::Content *subExtra = new KMime::Content();
179 KMime::Content *subsubExtra = new KMime::Content();
180 KMime::Content *subsubExtraNode = new KMime::Content();
181
182 subNode->addContent(subsubNode);
183 subNode->addContent(subsubNode2);
184 node->addContent(subNode);
185 subsubExtra->addContent(subsubExtraNode);
186 helper.attachExtraContent(node, extra);
187 helper.attachExtraContent(node, extra2);
188 helper.attachExtraContent(subNode, subExtra);
189 helper.attachExtraContent(subsubNode2, subsubExtra);
190
191 // helper.writeNodeToTempFile(node);
192 // QCOMPARE(helper.fromHREF(msg, helper.tempFileUrlFromNode(node)), node);
193 // helper.writeNodeToTempFile(subNode);
194 // QCOMPARE(helper.fromHREF(msg, helper.tempFileUrlFromNode(subNode)), subNode);
195 // helper.writeNodeToTempFile(subsubNode);
196 // QCOMPARE(helper.fromHREF(msg, helper.tempFileUrlFromNode(subsubNode)), subsubNode);
197 // helper.writeNodeToTempFile(subsubNode2);
198 // QCOMPARE(helper.fromHREF(msg, helper.tempFileUrlFromNode(subsubNode2)), subsubNode2);
199 // helper.writeNodeToTempFile(extra);
200 // QCOMPARE(helper.fromHREF(msg, helper.tempFileUrlFromNode(extra)), extra);
201 // helper.writeNodeToTempFile(subExtra);
202 // QCOMPARE(helper.fromHREF(msg, helper.tempFileUrlFromNode(subExtra)), subExtra);
203 // helper.writeNodeToTempFile(subsubExtra);
204 // QCOMPARE(helper.fromHREF(msg, helper.tempFileUrlFromNode(subsubExtra)), subsubExtra);
205 // helper.writeNodeToTempFile(subsubExtraNode);
206 // QCOMPARE(helper.fromHREF(msg, helper.tempFileUrlFromNode(subsubExtraNode)), subsubExtraNode);
207}
208
209void NodeHelperTest::testFromAsString()
210{
211 const QString tlSender = QStringLiteral("Foo <foo@example.com>");
212 const QString encSender = QStringLiteral("Bar <bar@example.com>");
213
214 NodeHelper helper;
215
216 // msg (KMime::Message)
217 // |- subNode
218 // |- encNode (KMime::Message)
219 // |- encSubNode
220 //
221 // subNode
222 // |- subExtra
223 //
224 // encSubNode
225 // |- encSubExtra
226
227 KMime::Message msg;
228 msg.from(true)->fromUnicodeString(tlSender, "UTF-8");
229 auto node = msg.topLevel();
230 auto subNode = new KMime::Content();
231 auto subExtra = new KMime::Content();
232
233 // Encapsulated message
234 KMime::Message *encMsg = new KMime::Message;
235 encMsg->from(true)->fromUnicodeString(encSender, "UTF-8");
236 auto encNode = encMsg->topLevel();
237 auto encSubNode = new KMime::Content();
238 auto encSubExtra = new KMime::Content();
239
240 node->addContent(subNode);
241 node->addContent(encMsg);
242 encNode->addContent(encSubNode);
243
244 helper.attachExtraContent(subNode, subExtra);
245 helper.attachExtraContent(encSubNode, encSubExtra);
246
247 QCOMPARE(helper.fromAsString(node), tlSender);
248 QCOMPARE(helper.fromAsString(subNode), tlSender);
249 QCOMPARE(helper.fromAsString(subExtra), tlSender);
250 QEXPECT_FAIL("", "Returning sender of encapsulated message is not yet implemented", Continue);
251 QCOMPARE(helper.fromAsString(encNode), encSender);
252 QEXPECT_FAIL("", "Returning sender of encapsulated message is not yet implemented", Continue);
253 QCOMPARE(helper.fromAsString(encSubNode), encSender);
254 QEXPECT_FAIL("", "Returning sender of encapsulated message is not yet implemented", Continue);
255 QCOMPARE(helper.fromAsString(encSubExtra), encSender);
256}
257
258QTEST_GUILESS_MAIN(NodeHelperTest)
259