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"