File indexing completed on 2025-03-09 04:53:56

0001 /*
0002   SPDX-FileCopyrightText: 2009 Constantin Berzan <exit3219@gmail.com>
0003 
0004   SPDX-License-Identifier: LGPL-2.0-or-later
0005 */
0006 
0007 #include "singlepartjobtest.h"
0008 
0009 #include <QDebug>
0010 #include <QTest>
0011 
0012 #include <KMime/Content>
0013 using namespace KMime;
0014 
0015 #include <MessageComposer/Composer>
0016 #include <MessageComposer/GlobalPart>
0017 #include <MessageComposer/SinglepartJob>
0018 using namespace MessageComposer;
0019 
0020 QTEST_MAIN(SinglepartJobTest)
0021 
0022 void SinglepartJobTest::testContent()
0023 {
0024     auto composer = new Composer;
0025     auto cjob = new SinglepartJob(composer);
0026     QByteArray data("birds came flying from the underground");
0027     cjob->setData(data);
0028     QVERIFY(cjob->exec());
0029     Content *result = cjob->content();
0030     result->assemble();
0031     qDebug() << result->encodedContent();
0032     QCOMPARE(result->body(), data);
0033     QVERIFY(result->contentDisposition(false) == nullptr); // Not created unless demanded.
0034     QVERIFY(result->contentType(false) == nullptr); // Not created unless demanded.
0035     QVERIFY(result->contentTransferEncoding(false)); // KMime gives it a default one (7bit).
0036     delete cjob;
0037     delete composer;
0038 }
0039 
0040 void SinglepartJobTest::testContentDisposition()
0041 {
0042     auto composer = new Composer;
0043     auto cjob = new SinglepartJob(composer);
0044     QByteArray data("birds came flying from the underground");
0045     cjob->setData(data);
0046     QString filename = QStringLiteral("test_ăîşţâ.txt");
0047     cjob->contentDisposition()->setDisposition(Headers::CDattachment);
0048     cjob->contentDisposition()->setFilename(filename);
0049     QVERIFY(cjob->exec());
0050     Content *result = cjob->content();
0051     result->assemble();
0052     qDebug() << result->encodedContent();
0053     QCOMPARE(result->body(), data);
0054     QVERIFY(result->contentDisposition(false));
0055     QCOMPARE(result->contentDisposition()->disposition(), Headers::CDattachment);
0056     QCOMPARE(result->contentDisposition()->filename(), filename);
0057     delete cjob;
0058     delete composer;
0059 }
0060 
0061 void SinglepartJobTest::testContentID()
0062 {
0063     auto composer = new Composer;
0064     auto cjob = new SinglepartJob(composer);
0065     QByteArray data("birds came flying from the underground");
0066     QByteArray id("play@cold");
0067     cjob->setData(data);
0068     cjob->contentID()->setIdentifier(id);
0069     QVERIFY(cjob->exec());
0070     Content *result = cjob->content();
0071     result->assemble();
0072     qDebug() << result->encodedContent();
0073     QCOMPARE(result->body(), data);
0074     QVERIFY(result->header<Headers::ContentID>());
0075     QCOMPARE(result->header<Headers::ContentID>()->identifier(), id);
0076     delete cjob;
0077 
0078     delete composer;
0079 }
0080 
0081 void SinglepartJobTest::testContentType()
0082 {
0083     auto composer = new Composer;
0084     auto cjob = new SinglepartJob(composer);
0085     QByteArray data("birds came flying from the underground");
0086     cjob->setData(data);
0087     QByteArray mimeType("text/plain");
0088     QByteArray charset("utf-8");
0089     cjob->contentType()->setMimeType(mimeType);
0090     cjob->contentType()->setCharset(charset);
0091     QVERIFY(cjob->exec());
0092     Content *result = cjob->content();
0093     result->assemble();
0094     qDebug() << result->encodedContent();
0095     QCOMPARE(result->body(), data);
0096     QVERIFY(result->contentType(false));
0097     QCOMPARE(result->contentType()->mimeType(), mimeType);
0098     QCOMPARE(result->contentType()->charset(), charset);
0099     delete cjob;
0100 
0101     delete composer;
0102 }
0103 
0104 void SinglepartJobTest::testContentTransferEncoding()
0105 {
0106     auto composer = new Composer;
0107     QVERIFY(!composer->globalPart()->is8BitAllowed());
0108     composer->globalPart()->setFallbackCharsetEnabled(true);
0109 
0110     // 7bit if possible.
0111     {
0112         auto cjob = new SinglepartJob(composer);
0113         QByteArray data("and the sun will set for you...");
0114         cjob->setData(data);
0115         QVERIFY(cjob->exec());
0116         Content *result = cjob->content();
0117         result->assemble();
0118         qDebug() << result->encodedContent();
0119         QVERIFY(result->contentTransferEncoding(false));
0120         QCOMPARE(result->contentTransferEncoding()->encoding(), Headers::CE7Bit);
0121         QCOMPARE(result->body(), data);
0122         delete cjob;
0123     }
0124 
0125     // quoted-printable if text doesn't fit in 7bit.
0126     {
0127         auto cjob = new SinglepartJob(composer);
0128         QByteArray data("some long text to make qupr more compact than base64 [ăîşţâ]"); // utf-8
0129         cjob->setData(data);
0130         QVERIFY(cjob->exec());
0131         Content *result = cjob->content();
0132         result->assemble();
0133         qDebug() << result->encodedContent();
0134         QVERIFY(result->contentTransferEncoding(false));
0135         QCOMPARE(result->contentTransferEncoding()->encoding(), Headers::CEquPr);
0136         QCOMPARE(result->body(), data);
0137         delete cjob;
0138     }
0139 
0140     // base64 if it's shorter than quoted-printable
0141     {
0142         auto cjob = new SinglepartJob(composer);
0143         QByteArray data("[ăîşţâ]"); // utf-8
0144         cjob->setData(data);
0145         QVERIFY(cjob->exec());
0146         Content *result = cjob->content();
0147         result->assemble();
0148         qDebug() << result->encodedContent();
0149         QVERIFY(result->contentTransferEncoding(false));
0150         QCOMPARE(result->contentTransferEncoding()->encoding(), Headers::CEbase64);
0151         QCOMPARE(result->body(), data);
0152         delete cjob;
0153     }
0154 
0155     // 8bit if asked for and allowed.
0156     {
0157         composer->globalPart()->set8BitAllowed(true);
0158         QByteArray data("[ăîşţâ]"); // utf-8
0159         auto cjob = new SinglepartJob(composer);
0160         cjob->setData(data);
0161         QVERIFY(cjob->exec());
0162         Content *result = cjob->content();
0163         result->assemble();
0164         qDebug() << result->encodedContent();
0165         QVERIFY(result->contentTransferEncoding(false));
0166         QCOMPARE(result->contentTransferEncoding()->encoding(), Headers::CE8Bit);
0167         QCOMPARE(result->body(), data);
0168         delete cjob;
0169     }
0170     delete composer;
0171 }
0172 
0173 #include "moc_singlepartjobtest.cpp"