1 /*
2 SPDX-FileCopyrightText: 2009 Constantin Berzan <exit3219@gmail.com>
3
4 SPDX-License-Identifier: LGPL-2.0-or-later
5 */
6
7 #include "singlepartjobtest.h"
8
9 #include <QDebug>
10 #include <QTest>
11
12 #include <KMime/Content>
13 using namespace KMime;
14
15 #include <MessageComposer/Composer>
16 #include <MessageComposer/GlobalPart>
17 #include <MessageComposer/SinglepartJob>
18 using namespace MessageComposer;
19
QTEST_MAIN(SinglepartJobTest)20 QTEST_MAIN(SinglepartJobTest)
21
22 void SinglepartJobTest::testContent()
23 {
24 auto composer = new Composer;
25 auto cjob = new SinglepartJob(composer);
26 QByteArray data("birds came flying from the underground");
27 cjob->setData(data);
28 QVERIFY(cjob->exec());
29 Content *result = cjob->content();
30 result->assemble();
31 qDebug() << result->encodedContent();
32 QCOMPARE(result->body(), data);
33 QVERIFY(result->contentDisposition(false) == nullptr); // Not created unless demanded.
34 QVERIFY(result->contentType(false) == nullptr); // Not created unless demanded.
35 QVERIFY(result->contentTransferEncoding(false)); // KMime gives it a default one (7bit).
36 delete cjob;
37 delete composer;
38 }
39
testContentDisposition()40 void SinglepartJobTest::testContentDisposition()
41 {
42 auto composer = new Composer;
43 auto cjob = new SinglepartJob(composer);
44 QByteArray data("birds came flying from the underground");
45 cjob->setData(data);
46 QString filename = QStringLiteral("test_ăîşţâ.txt");
47 cjob->contentDisposition()->setDisposition(Headers::CDattachment);
48 cjob->contentDisposition()->setFilename(filename);
49 QVERIFY(cjob->exec());
50 Content *result = cjob->content();
51 result->assemble();
52 qDebug() << result->encodedContent();
53 QCOMPARE(result->body(), data);
54 QVERIFY(result->contentDisposition(false));
55 QCOMPARE(result->contentDisposition()->disposition(), Headers::CDattachment);
56 QCOMPARE(result->contentDisposition()->filename(), filename);
57 delete cjob;
58 delete composer;
59 }
60
testContentID()61 void SinglepartJobTest::testContentID()
62 {
63 auto composer = new Composer;
64 auto cjob = new SinglepartJob(composer);
65 QByteArray data("birds came flying from the underground");
66 QByteArray id("play@cold");
67 cjob->setData(data);
68 cjob->contentID()->setIdentifier(id);
69 QVERIFY(cjob->exec());
70 Content *result = cjob->content();
71 result->assemble();
72 qDebug() << result->encodedContent();
73 QCOMPARE(result->body(), data);
74 QVERIFY(result->header<Headers::ContentID>());
75 QCOMPARE(result->header<Headers::ContentID>()->identifier(), id);
76 delete cjob;
77
78 delete composer;
79 }
80
testContentType()81 void SinglepartJobTest::testContentType()
82 {
83 auto composer = new Composer;
84 auto cjob = new SinglepartJob(composer);
85 QByteArray data("birds came flying from the underground");
86 cjob->setData(data);
87 QByteArray mimeType("text/plain");
88 QByteArray charset("utf-8");
89 cjob->contentType()->setMimeType(mimeType);
90 cjob->contentType()->setCharset(charset);
91 QVERIFY(cjob->exec());
92 Content *result = cjob->content();
93 result->assemble();
94 qDebug() << result->encodedContent();
95 QCOMPARE(result->body(), data);
96 QVERIFY(result->contentType(false));
97 QCOMPARE(result->contentType()->mimeType(), mimeType);
98 QCOMPARE(result->contentType()->charset(), charset);
99 delete cjob;
100
101 delete composer;
102 }
103
testContentTransferEncoding()104 void SinglepartJobTest::testContentTransferEncoding()
105 {
106 auto composer = new Composer;
107 QVERIFY(!composer->globalPart()->is8BitAllowed());
108 composer->globalPart()->setFallbackCharsetEnabled(true);
109
110 // 7bit if possible.
111 {
112 auto cjob = new SinglepartJob(composer);
113 QByteArray data("and the sun will set for you...");
114 cjob->setData(data);
115 QVERIFY(cjob->exec());
116 Content *result = cjob->content();
117 result->assemble();
118 qDebug() << result->encodedContent();
119 QVERIFY(result->contentTransferEncoding(false));
120 QCOMPARE(result->contentTransferEncoding()->encoding(), Headers::CE7Bit);
121 QCOMPARE(result->body(), data);
122 delete cjob;
123 }
124
125 // quoted-printable if text doesn't fit in 7bit.
126 {
127 auto cjob = new SinglepartJob(composer);
128 QByteArray data("some long text to make qupr more compact than base64 [ăîşţâ]"); // utf-8
129 cjob->setData(data);
130 QVERIFY(cjob->exec());
131 Content *result = cjob->content();
132 result->assemble();
133 qDebug() << result->encodedContent();
134 QVERIFY(result->contentTransferEncoding(false));
135 QCOMPARE(result->contentTransferEncoding()->encoding(), Headers::CEquPr);
136 QCOMPARE(result->body(), data);
137 delete cjob;
138 }
139
140 // base64 if it's shorter than quoted-printable
141 {
142 auto cjob = new SinglepartJob(composer);
143 QByteArray data("[ăîşţâ]"); // utf-8
144 cjob->setData(data);
145 QVERIFY(cjob->exec());
146 Content *result = cjob->content();
147 result->assemble();
148 qDebug() << result->encodedContent();
149 QVERIFY(result->contentTransferEncoding(false));
150 QCOMPARE(result->contentTransferEncoding()->encoding(), Headers::CEbase64);
151 QCOMPARE(result->body(), data);
152 delete cjob;
153 }
154
155 // 8bit if asked for and allowed.
156 {
157 composer->globalPart()->set8BitAllowed(true);
158 QByteArray data("[ăîşţâ]"); // utf-8
159 auto cjob = new SinglepartJob(composer);
160 cjob->setData(data);
161 QVERIFY(cjob->exec());
162 Content *result = cjob->content();
163 result->assemble();
164 qDebug() << result->encodedContent();
165 QVERIFY(result->contentTransferEncoding(false));
166 QCOMPARE(result->contentTransferEncoding()->encoding(), Headers::CE8Bit);
167 QCOMPARE(result->body(), data);
168 delete cjob;
169 }
170 delete composer;
171 }
172