diff options
Diffstat (limited to 'framework/src/domain/mime/mimetreeparser/autotests/nodehelpertest.cpp')
-rw-r--r-- | framework/src/domain/mime/mimetreeparser/autotests/nodehelpertest.cpp | 259 |
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 | |||
25 | using namespace MimeTreeParser; | ||
26 | |||
27 | NodeHelperTest::NodeHelperTest() | ||
28 | : QObject() | ||
29 | { | ||
30 | |||
31 | } | ||
32 | |||
33 | void 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 | |||
128 | void 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 | |||
169 | void 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 | |||
209 | void 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 | |||
258 | QTEST_GUILESS_MAIN(NodeHelperTest) | ||
259 | |||