File indexing completed on 2024-09-22 04:50:33
0001 /* 0002 SPDX-FileCopyrightText: 2016-2024 Laurent Montel <montel@kde.org> 0003 0004 SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 0007 #include "richtextcomposerngtest.h" 0008 #include "../richtextcomposerng.h" 0009 #include "../richtextcomposersignatures.h" 0010 0011 #include <KActionCollection> 0012 #include <KPIMTextEdit/RichTextComposerControler> 0013 0014 #include <QStandardPaths> 0015 #include <QTest> 0016 #include <TextAutoCorrectionCore/AutoCorrection> 0017 RichTextComposerNgTest::RichTextComposerNgTest(QObject *parent) 0018 : QObject(parent) 0019 { 0020 QStandardPaths::setTestModeEnabled(true); 0021 } 0022 0023 RichTextComposerNgTest::~RichTextComposerNgTest() = default; 0024 0025 void RichTextComposerNgTest::shouldHaveDefaultValue() 0026 { 0027 MessageComposer::RichTextComposerNg richtextComposerNg; 0028 QVERIFY(richtextComposerNg.composerSignature()); 0029 QVERIFY(!richtextComposerNg.autocorrection()); 0030 QVERIFY(richtextComposerNg.composerControler()); 0031 QVERIFY(richtextComposerNg.composerControler()->composerImages()); 0032 } 0033 0034 void RichTextComposerNgTest::shouldForceAutoCorrection_data() 0035 { 0036 QTest::addColumn<QString>("original"); 0037 QTest::addColumn<QString>("expected"); 0038 // FIXME first char ! 0039 QTest::newRow("test1") << QStringLiteral("boo bla bli. foo faa") << QStringLiteral("boo bla bli. Foo faa"); 0040 QTest::newRow("test2") << QStringLiteral("boo bla bli.\nfoo faa") << QStringLiteral("boo bla bli.\nFoo faa"); 0041 QTest::newRow("test3") << QStringLiteral("\nboo bla bli.\nfoo faa") << QStringLiteral("\nBoo bla bli.\nFoo faa"); 0042 } 0043 0044 void RichTextComposerNgTest::shouldForceAutoCorrection() 0045 { 0046 QFETCH(QString, original); 0047 QFETCH(QString, expected); 0048 0049 MessageComposer::RichTextComposerNg richtextComposerNg; 0050 0051 richtextComposerNg.setPlainText(original); 0052 TextAutoCorrectionCore::AutoCorrection autocorrection; 0053 auto settings = new TextAutoCorrectionCore::AutoCorrectionSettings; 0054 settings->setEnabledAutoCorrection(true); 0055 settings->setUppercaseFirstCharOfSentence(true); 0056 autocorrection.setAutoCorrectionSettings(settings); 0057 richtextComposerNg.setAutocorrection(&autocorrection); 0058 richtextComposerNg.forceAutoCorrection(false); 0059 0060 QCOMPARE(richtextComposerNg.toPlainText(), expected); 0061 } 0062 0063 void RichTextComposerNgTest::shouldForceAutoCorrectionWithSelection_data() 0064 { 0065 QTest::addColumn<QString>("original"); 0066 QTest::addColumn<QString>("expected"); 0067 QTest::addColumn<int>("selectionStart"); 0068 QTest::addColumn<int>("selectionEnd"); 0069 QTest::newRow("noselection") << QStringLiteral("\nboo bla bli.\nfoo faa") << QStringLiteral("\nBoo bla bli.\nFoo faa") << 0 << 0; 0070 QTest::newRow("noselection2") << QStringLiteral("\nboo bla bli.\nfoo faa") << QStringLiteral("\nBoo bla bli.\nFoo faa") << 1 << 1; 0071 QTest::newRow("fullselection") << QStringLiteral("\nboo bla bli.\nfoo faa") << QStringLiteral("\nBoo bla bli.\nFoo faa") << 0 << 21; 0072 QTest::newRow("selection1") << QStringLiteral("\nboo bla bli.\nfoo faa") << QStringLiteral("\nBoo bla bli.\nfoo faa") << 0 << 10; 0073 QTest::newRow("selection2") << QStringLiteral("\nboo bla bli.\nfoo faa") << QStringLiteral("\nboo bla bli.\nfoo faa") << 5 << 10; 0074 QTest::newRow("twouppercase") << QStringLiteral("\nBOo bla bli.\nfoo FAa") << QStringLiteral("\nBoo bla bli.\nFoo Faa") << 0 << 21; 0075 } 0076 0077 void RichTextComposerNgTest::shouldForceAutoCorrectionWithSelection() 0078 { 0079 QFETCH(QString, original); 0080 QFETCH(QString, expected); 0081 QFETCH(int, selectionStart); 0082 QFETCH(int, selectionEnd); 0083 0084 MessageComposer::RichTextComposerNg richtextComposerNg; 0085 0086 richtextComposerNg.setPlainText(original); 0087 QTextCursor cur = richtextComposerNg.textCursor(); 0088 cur.setPosition(selectionStart); 0089 cur.setPosition(selectionEnd, QTextCursor::KeepAnchor); 0090 richtextComposerNg.setTextCursor(cur); 0091 TextAutoCorrectionCore::AutoCorrection autocorrection; 0092 auto settings = new TextAutoCorrectionCore::AutoCorrectionSettings; 0093 settings->setEnabledAutoCorrection(true); 0094 settings->setUppercaseFirstCharOfSentence(true); 0095 settings->setFixTwoUppercaseChars(true); 0096 autocorrection.setAutoCorrectionSettings(settings); 0097 richtextComposerNg.setAutocorrection(&autocorrection); 0098 richtextComposerNg.forceAutoCorrection(true); 0099 0100 QCOMPARE(richtextComposerNg.toPlainText(), expected); 0101 } 0102 0103 void RichTextComposerNgTest::shouldNotChangeSignatureWhenOriginalAndNewSignatureAreSame() 0104 { 0105 MessageComposer::RichTextComposerNg richtextComposerNg; 0106 KIdentityManagementCore::Signature oldSignature; 0107 0108 const bool replaceSignature = richtextComposerNg.composerSignature()->replaceSignature(oldSignature, oldSignature); 0109 QVERIFY(!replaceSignature); 0110 } 0111 0112 Q_DECLARE_METATYPE(KIdentityManagementCore::Signature::Placement) 0113 Q_DECLARE_METATYPE(KIdentityManagementCore::Signature::AddedTextFlag) 0114 Q_DECLARE_METATYPE(KIdentityManagementCore::Signature::Type) 0115 0116 void RichTextComposerNgTest::shouldAddSignature_data() 0117 { 0118 QTest::addColumn<QString>("original"); 0119 QTest::addColumn<QString>("expected"); 0120 QTest::addColumn<KIdentityManagementCore::Signature::Placement>("signatureplacement"); 0121 QTest::addColumn<KIdentityManagementCore::Signature::AddedTextFlag>("signatureaddtext"); 0122 QTest::newRow("startandaddseparator") << QStringLiteral("foo bla, bli\nbb") << QStringLiteral("-- \nSignaturefoo bla, bli\nbb") 0123 << KIdentityManagementCore::Signature::Start << KIdentityManagementCore::Signature::AddSeparator; 0124 0125 QTest::newRow("startandnewline") << QStringLiteral("foo bla, bli\nbb") << QStringLiteral("\n\nSignature\nfoo bla, bli\nbb") 0126 << KIdentityManagementCore::Signature::Start << KIdentityManagementCore::Signature::AddNewLines; 0127 0128 QTest::newRow("startandnothing") << QStringLiteral("foo bla, bli\nbb") << QStringLiteral("Signaturefoo bla, bli\nbb") 0129 << KIdentityManagementCore::Signature::Start << KIdentityManagementCore::Signature::AddNothing; 0130 0131 QTest::newRow("endandaddseparator") << QStringLiteral("foo bla, bli\nbb") << QStringLiteral("foo bla, bli\nbb-- \nSignature") 0132 << KIdentityManagementCore::Signature::End << KIdentityManagementCore::Signature::AddSeparator; 0133 0134 QTest::newRow("endandnewline") << QStringLiteral("foo bla, bli\nbb") << QStringLiteral("foo bla, bli\nbb\nSignature") 0135 << KIdentityManagementCore::Signature::End << KIdentityManagementCore::Signature::AddNewLines; 0136 0137 QTest::newRow("endandnothing") << QStringLiteral("foo bla, bli\nbb") << QStringLiteral("foo bla, bli\nbbSignature") 0138 << KIdentityManagementCore::Signature::End << KIdentityManagementCore::Signature::AddNothing; 0139 0140 // TODO test "Add Cursor" 0141 } 0142 0143 void RichTextComposerNgTest::shouldAddSignature() 0144 { 0145 QFETCH(QString, original); 0146 QFETCH(QString, expected); 0147 QFETCH(KIdentityManagementCore::Signature::Placement, signatureplacement); 0148 QFETCH(KIdentityManagementCore::Signature::AddedTextFlag, signatureaddtext); 0149 MessageComposer::RichTextComposerNg richtextComposerNg; 0150 richtextComposerNg.setPlainText(original); 0151 0152 KIdentityManagementCore::Signature newSignature(QStringLiteral("Signature")); 0153 newSignature.setEnabledSignature(true); 0154 richtextComposerNg.insertSignature(newSignature, signatureplacement, signatureaddtext); 0155 QCOMPARE(richtextComposerNg.toPlainText(), expected); 0156 } 0157 0158 void RichTextComposerNgTest::shouldAddSpecificSignature_data() 0159 { 0160 QTest::addColumn<QString>("original"); 0161 QTest::addColumn<QString>("expected"); 0162 QTest::addColumn<KIdentityManagementCore::Signature::Placement>("signatureplacement"); 0163 QTest::addColumn<KIdentityManagementCore::Signature::AddedTextFlag>("signatureaddtext"); 0164 QTest::addColumn<bool>("enablesignature"); 0165 QTest::addColumn<bool>("signaturehtml"); 0166 QTest::newRow("startandaddseparatordisablenonhtml") 0167 << QStringLiteral("foo bla, bli\nbb") << QStringLiteral("foo bla, bli\nbb") << KIdentityManagementCore::Signature::Start 0168 << KIdentityManagementCore::Signature::AddSeparator << false << false; 0169 0170 QTest::newRow("startandaddseparatordisablehtml") << QStringLiteral("foo bla, bli\nbb") << QStringLiteral("foo bla, bli\nbb") 0171 << KIdentityManagementCore::Signature::Start << KIdentityManagementCore::Signature::AddSeparator << false 0172 << true; 0173 0174 QTest::newRow("startandaddseparatorenablehtml") << QStringLiteral("foo bla, bli\nbb") << QStringLiteral("-- \nSignaturefoo bla, bli\nbb") 0175 << KIdentityManagementCore::Signature::Start << KIdentityManagementCore::Signature::AddSeparator << true 0176 << true; 0177 } 0178 0179 void RichTextComposerNgTest::shouldAddSpecificSignature() 0180 { 0181 QFETCH(QString, original); 0182 QFETCH(QString, expected); 0183 QFETCH(KIdentityManagementCore::Signature::Placement, signatureplacement); 0184 QFETCH(KIdentityManagementCore::Signature::AddedTextFlag, signatureaddtext); 0185 QFETCH(bool, enablesignature); 0186 QFETCH(bool, signaturehtml); 0187 MessageComposer::RichTextComposerNg richtextComposerNg; 0188 richtextComposerNg.createActions(new KActionCollection(this)); 0189 richtextComposerNg.setPlainText(original); 0190 0191 KIdentityManagementCore::Signature newSignature(QStringLiteral("Signature")); 0192 newSignature.setEnabledSignature(enablesignature); 0193 newSignature.setInlinedHtml(signaturehtml); 0194 richtextComposerNg.insertSignature(newSignature, signatureplacement, signatureaddtext); 0195 // qDebug() << " clean html "<<richtextComposerNg.toCleanHtml(); 0196 QCOMPARE(richtextComposerNg.toPlainText(), expected); 0197 } 0198 0199 void RichTextComposerNgTest::shouldReplaceSignature_data() 0200 { 0201 QTest::addColumn<QString>("signatureText"); 0202 QTest::addColumn<QString>("bodytext"); 0203 QTest::addColumn<KIdentityManagementCore::Signature::Placement>("signatureplacement"); 0204 QTest::addColumn<KIdentityManagementCore::Signature::AddedTextFlag>("signatureaddtext"); 0205 0206 // Add Separator AtEnd 0207 QTest::newRow("newlinebody") << QStringLiteral("Signature") << QStringLiteral("\n") << KIdentityManagementCore::Signature::End 0208 << KIdentityManagementCore::Signature::AddSeparator; 0209 QTest::newRow("emptybody") << QStringLiteral("Signature") << QString() << KIdentityManagementCore::Signature::End 0210 << KIdentityManagementCore::Signature::AddSeparator; 0211 QTest::newRow("spacebody") << QStringLiteral("Signature") << QStringLiteral(" ") << KIdentityManagementCore::Signature::End 0212 << KIdentityManagementCore::Signature::AddSeparator; 0213 QTest::newRow("simple") << QStringLiteral("Signature") << QStringLiteral("foo bla, bli\nbb") << KIdentityManagementCore::Signature::End 0214 << KIdentityManagementCore::Signature::AddSeparator; 0215 QTest::newRow("withnewline") << QStringLiteral("Signature\nnew line") << QStringLiteral("foo bla, bli\nbb") << KIdentityManagementCore::Signature::End 0216 << KIdentityManagementCore::Signature::AddSeparator; 0217 QTest::newRow("withnewlineatbegin") << QStringLiteral("\nSignature\nnew line") << QStringLiteral("foo bla, bli\nbb") 0218 << KIdentityManagementCore::Signature::End << KIdentityManagementCore::Signature::AddSeparator; 0219 QTest::newRow("withnewlineatbeginandend") << QStringLiteral("\nSignature\nnew line\n") << QStringLiteral("foo bla, bli\nbb") 0220 << KIdentityManagementCore::Signature::End << KIdentityManagementCore::Signature::AddSeparator; 0221 0222 // Add separator AtStart 0223 QTest::newRow("newlinebody-2") << QStringLiteral("Signature") << QStringLiteral("\n") << KIdentityManagementCore::Signature::Start 0224 << KIdentityManagementCore::Signature::AddSeparator; 0225 QTest::newRow("emptybody-2") << QStringLiteral("Signature") << QString() << KIdentityManagementCore::Signature::Start 0226 << KIdentityManagementCore::Signature::AddSeparator; 0227 QTest::newRow("spacebody-2") << QStringLiteral("Signature") << QStringLiteral(" ") << KIdentityManagementCore::Signature::Start 0228 << KIdentityManagementCore::Signature::AddSeparator; 0229 QTest::newRow("simple-2") << QStringLiteral("Signature") << QStringLiteral("foo bla, bli\nbb") << KIdentityManagementCore::Signature::Start 0230 << KIdentityManagementCore::Signature::AddSeparator; 0231 QTest::newRow("withnewline-2") << QStringLiteral("Signature\nnew line") << QStringLiteral("foo bla, bli\nbb") << KIdentityManagementCore::Signature::Start 0232 << KIdentityManagementCore::Signature::AddSeparator; 0233 QTest::newRow("withnewlineatbegin-2") << QStringLiteral("\nSignature\nnew line") << QStringLiteral("foo bla, bli\nbb") 0234 << KIdentityManagementCore::Signature::Start << KIdentityManagementCore::Signature::AddSeparator; 0235 QTest::newRow("withnewlineatbeginandend-2") << QStringLiteral("\nSignature\nnew line\n") << QStringLiteral("foo bla, bli\nbb") 0236 << KIdentityManagementCore::Signature::Start << KIdentityManagementCore::Signature::AddSeparator; 0237 0238 // Add nothing End 0239 // FIXME 0240 // QTest::newRow("newlinebody-3") << QStringLiteral("Signature") << QStringLiteral("\n") 0241 // << KIdentityManagementCore::Signature::End << KIdentityManagementCore::Signature::AddNothing; 0242 QTest::newRow("emptybody-3") << QStringLiteral("Signature") << QString() << KIdentityManagementCore::Signature::End 0243 << KIdentityManagementCore::Signature::AddNothing; 0244 QTest::newRow("spacebody-3") << QStringLiteral("Signature") << QStringLiteral(" ") << KIdentityManagementCore::Signature::End 0245 << KIdentityManagementCore::Signature::AddNothing; 0246 QTest::newRow("simple-3") << QStringLiteral("Signature") << QStringLiteral("foo bla, bli\nbb") << KIdentityManagementCore::Signature::End 0247 << KIdentityManagementCore::Signature::AddNothing; 0248 QTest::newRow("withnewline-3") << QStringLiteral("Signature\nnew line") << QStringLiteral("foo bla, bli\nbb") << KIdentityManagementCore::Signature::End 0249 << KIdentityManagementCore::Signature::AddNothing; 0250 QTest::newRow("withnewlineatbegin-3") << QStringLiteral("\nSignature\nnew line") << QStringLiteral("foo bla, bli\nbb") 0251 << KIdentityManagementCore::Signature::End << KIdentityManagementCore::Signature::AddNothing; 0252 QTest::newRow("withnewlineatbeginandend-3") << QStringLiteral("\nSignature\nnew line\n") << QStringLiteral("foo bla, bli\nbb") 0253 << KIdentityManagementCore::Signature::End << KIdentityManagementCore::Signature::AddNothing; 0254 0255 // Add nothing Start 0256 QTest::newRow("newlinebody-4") << QStringLiteral("Signature") << QStringLiteral("\n") << KIdentityManagementCore::Signature::Start 0257 << KIdentityManagementCore::Signature::AddNothing; 0258 QTest::newRow("emptybody-4") << QStringLiteral("Signature") << QString() << KIdentityManagementCore::Signature::Start 0259 << KIdentityManagementCore::Signature::AddNothing; 0260 QTest::newRow("spacebody-4") << QStringLiteral("Signature") << QStringLiteral(" ") << KIdentityManagementCore::Signature::Start 0261 << KIdentityManagementCore::Signature::AddNothing; 0262 QTest::newRow("simple-4") << QStringLiteral("Signature") << QStringLiteral("foo bla, bli\nbb") << KIdentityManagementCore::Signature::Start 0263 << KIdentityManagementCore::Signature::AddNothing; 0264 QTest::newRow("withnewline-4") << QStringLiteral("Signature\nnew line") << QStringLiteral("foo bla, bli\nbb") << KIdentityManagementCore::Signature::Start 0265 << KIdentityManagementCore::Signature::AddNothing; 0266 QTest::newRow("withnewlineatbegin-4") << QStringLiteral("\nSignature\nnew line") << QStringLiteral("foo bla, bli\nbb") 0267 << KIdentityManagementCore::Signature::Start << KIdentityManagementCore::Signature::AddNothing; 0268 QTest::newRow("withnewlineatbeginandend-4") << QStringLiteral("\nSignature\nnew line\n") << QStringLiteral("foo bla, bli\nbb") 0269 << KIdentityManagementCore::Signature::Start << KIdentityManagementCore::Signature::AddNothing; 0270 0271 // Add newline End 0272 QTest::newRow("emptybody-5") << QStringLiteral("Signature") << QString() << KIdentityManagementCore::Signature::End 0273 << KIdentityManagementCore::Signature::AddNewLines; 0274 QTest::newRow("newlinebody-5") << QStringLiteral("Signature") << QStringLiteral("\n") << KIdentityManagementCore::Signature::End 0275 << KIdentityManagementCore::Signature::AddNewLines; 0276 QTest::newRow("spacebody-5") << QStringLiteral("Signature") << QStringLiteral(" ") << KIdentityManagementCore::Signature::End 0277 << KIdentityManagementCore::Signature::AddNewLines; 0278 QTest::newRow("simple-5") << QStringLiteral("Signature") << QStringLiteral("foo bla, bli\nbb") << KIdentityManagementCore::Signature::End 0279 << KIdentityManagementCore::Signature::AddNewLines; 0280 QTest::newRow("withnewline-5") << QStringLiteral("Signature\nnew line") << QStringLiteral("foo bla, bli\nbb") << KIdentityManagementCore::Signature::End 0281 << KIdentityManagementCore::Signature::AddNewLines; 0282 QTest::newRow("withnewlineatbegin-5") << QStringLiteral("\nSignature\nnew line") << QStringLiteral("foo bla, bli\nbb") 0283 << KIdentityManagementCore::Signature::End << KIdentityManagementCore::Signature::AddNewLines; 0284 QTest::newRow("withnewlineatbeginandend-5") << QStringLiteral("\nSignature\nnew line\n") << QStringLiteral("foo bla, bli\nbb") 0285 << KIdentityManagementCore::Signature::End << KIdentityManagementCore::Signature::AddNewLines; 0286 #if 0 // Need to fix it. 0287 // Add newline start 0288 QTest::newRow("emptybody-6") << QStringLiteral("Signature") << QString() 0289 << KIdentityManagementCore::Signature::Start << KIdentityManagementCore::Signature::AddNewLines; 0290 QTest::newRow("newlinebody-6") << QStringLiteral("Signature") << QStringLiteral("\n") 0291 << KIdentityManagementCore::Signature::Start << KIdentityManagementCore::Signature::AddNewLines; 0292 QTest::newRow("spacebody-6") << QStringLiteral("Signature") << QStringLiteral(" ") 0293 << KIdentityManagementCore::Signature::Start << KIdentityManagementCore::Signature::AddNewLines; 0294 QTest::newRow("simple-6") << QStringLiteral("Signature") << QStringLiteral("foo bla, bli\nbb") 0295 << KIdentityManagementCore::Signature::Start << KIdentityManagementCore::Signature::AddNewLines; 0296 QTest::newRow("withnewline-6") << QStringLiteral("Signature\nnew line") << QStringLiteral("foo bla, bli\nbb") 0297 << KIdentityManagementCore::Signature::Start << KIdentityManagementCore::Signature::AddNewLines; 0298 QTest::newRow("withnewlineatbegin-6") << QStringLiteral("\nSignature\nnew line") << QStringLiteral("foo bla, bli\nbb") 0299 << KIdentityManagementCore::Signature::Start << KIdentityManagementCore::Signature::AddNewLines; 0300 QTest::newRow("withnewlineatbeginandend6") << QStringLiteral("\nSignature\nnew line\n") << QStringLiteral("foo bla, bli\nbb") 0301 << KIdentityManagementCore::Signature::Start << KIdentityManagementCore::Signature::AddNewLines; 0302 #endif 0303 } 0304 0305 void RichTextComposerNgTest::shouldReplaceSignature() 0306 { 0307 QFETCH(QString, signatureText); 0308 QFETCH(QString, bodytext); 0309 QFETCH(KIdentityManagementCore::Signature::Placement, signatureplacement); 0310 QFETCH(KIdentityManagementCore::Signature::AddedTextFlag, signatureaddtext); 0311 0312 MessageComposer::RichTextComposerNg richtextComposerNg; 0313 richtextComposerNg.createActions(new KActionCollection(this)); 0314 const QString original(bodytext); 0315 richtextComposerNg.setPlainText(original); 0316 0317 KIdentityManagementCore::Signature newSignature(signatureText); 0318 newSignature.setEnabledSignature(true); 0319 newSignature.setInlinedHtml(false); 0320 0321 QString addText; 0322 switch (signatureaddtext) { 0323 case KIdentityManagementCore::Signature::AddNothing: 0324 break; 0325 case KIdentityManagementCore::Signature::AddSeparator: 0326 addText = QStringLiteral("-- \n"); 0327 break; 0328 case KIdentityManagementCore::Signature::AddNewLines: 0329 addText = QStringLiteral("\n"); 0330 break; 0331 } 0332 0333 QString expected; 0334 switch (signatureplacement) { 0335 case KIdentityManagementCore::Signature::Start: 0336 expected = addText + signatureText + bodytext; 0337 break; 0338 case KIdentityManagementCore::Signature::End: 0339 expected = bodytext + addText + signatureText; 0340 break; 0341 case KIdentityManagementCore::Signature::AtCursor: 0342 break; 0343 } 0344 richtextComposerNg.insertSignature(newSignature, signatureplacement, signatureaddtext); 0345 QCOMPARE(richtextComposerNg.toPlainText(), expected); 0346 0347 KIdentityManagementCore::Signature emptySignature; 0348 0349 bool replaceSignature = richtextComposerNg.composerSignature()->replaceSignature(newSignature, emptySignature); 0350 QVERIFY(replaceSignature); 0351 QCOMPARE(richtextComposerNg.toPlainText(), original); 0352 0353 replaceSignature = richtextComposerNg.composerSignature()->replaceSignature(emptySignature, newSignature); 0354 QVERIFY(!replaceSignature); 0355 // When signature is empty we can't replace it.=> we need to insertSignature 0356 0357 //=> insertSignature(signature, KIdentityManagementCore::Signature::End, addedText); 0358 richtextComposerNg.insertSignature(newSignature, signatureplacement, signatureaddtext); 0359 QCOMPARE(richtextComposerNg.toPlainText(), expected); 0360 } 0361 0362 void RichTextComposerNgTest::shouldLoadSignatureFromFile_data() 0363 { 0364 QTest::addColumn<QString>("signatureFile"); 0365 QTest::addColumn<QString>("bodytext"); 0366 QTest::addColumn<KIdentityManagementCore::Signature::Placement>("signatureplacement"); 0367 QTest::addColumn<KIdentityManagementCore::Signature::AddedTextFlag>("signatureaddtext"); 0368 0369 QTest::newRow("signature1") << QStringLiteral("signature1.txt") << QStringLiteral("\n") << KIdentityManagementCore::Signature::End 0370 << KIdentityManagementCore::Signature::AddSeparator; 0371 0372 QTest::newRow("signature2") << QStringLiteral("signature2.txt") << QStringLiteral("\n") << KIdentityManagementCore::Signature::End 0373 << KIdentityManagementCore::Signature::AddSeparator; 0374 } 0375 0376 void RichTextComposerNgTest::shouldLoadSignatureFromFile() 0377 { 0378 QFETCH(QString, signatureFile); 0379 QFETCH(QString, bodytext); 0380 QFETCH(KIdentityManagementCore::Signature::Placement, signatureplacement); 0381 QFETCH(KIdentityManagementCore::Signature::AddedTextFlag, signatureaddtext); 0382 0383 MessageComposer::RichTextComposerNg richtextComposerNg; 0384 richtextComposerNg.createActions(new KActionCollection(this)); 0385 const QString original(bodytext); 0386 richtextComposerNg.setPlainText(original); 0387 0388 KIdentityManagementCore::Signature newSignature(QLatin1StringView(SIGNATURE_DATA_DIR) + QLatin1Char('/') + signatureFile, false); 0389 newSignature.setEnabledSignature(true); 0390 newSignature.setInlinedHtml(false); 0391 0392 QString addText; 0393 switch (signatureaddtext) { 0394 case KIdentityManagementCore::Signature::AddNothing: 0395 break; 0396 case KIdentityManagementCore::Signature::AddSeparator: 0397 addText = QStringLiteral("-- \n"); 0398 break; 0399 case KIdentityManagementCore::Signature::AddNewLines: 0400 addText = QStringLiteral("\n"); 0401 break; 0402 } 0403 0404 QString expected; 0405 QString signatureText = newSignature.toPlainText(); 0406 QVERIFY(!signatureText.isEmpty()); 0407 switch (signatureplacement) { 0408 case KIdentityManagementCore::Signature::Start: 0409 expected = addText + signatureText + bodytext; 0410 break; 0411 case KIdentityManagementCore::Signature::End: 0412 expected = bodytext + addText + signatureText; 0413 break; 0414 case KIdentityManagementCore::Signature::AtCursor: 0415 break; 0416 } 0417 0418 richtextComposerNg.insertSignature(newSignature, signatureplacement, signatureaddtext); 0419 QCOMPARE(richtextComposerNg.toPlainText(), expected); 0420 0421 KIdentityManagementCore::Signature emptySignature; 0422 0423 bool replaceSignature = richtextComposerNg.composerSignature()->replaceSignature(newSignature, emptySignature); 0424 QVERIFY(replaceSignature); 0425 QCOMPARE(richtextComposerNg.toPlainText(), original); 0426 0427 replaceSignature = richtextComposerNg.composerSignature()->replaceSignature(emptySignature, newSignature); 0428 QVERIFY(!replaceSignature); 0429 // When signature is empty we can't replace it.=> we need to insertSignature 0430 0431 //=> insertSignature(signature, KIdentityManagementCore::Signature::End, addedText); 0432 richtextComposerNg.insertSignature(newSignature, signatureplacement, signatureaddtext); 0433 QCOMPARE(richtextComposerNg.toPlainText(), expected); 0434 } 0435 0436 void RichTextComposerNgTest::shouldLoadSignatureFromCommand_data() 0437 { 0438 QTest::addColumn<QString>("command"); 0439 QTest::addColumn<QString>("bodytext"); 0440 QTest::addColumn<KIdentityManagementCore::Signature::Placement>("signatureplacement"); 0441 QTest::addColumn<KIdentityManagementCore::Signature::AddedTextFlag>("signatureaddtext"); 0442 0443 QTest::newRow("command1") << QStringLiteral("echo \"foo\"") << QStringLiteral("\n") << KIdentityManagementCore::Signature::End 0444 << KIdentityManagementCore::Signature::AddSeparator; 0445 QTest::newRow("command2") << QStringLiteral("echo \"foo\"") << QStringLiteral("foo ddd \n") << KIdentityManagementCore::Signature::End 0446 << KIdentityManagementCore::Signature::AddSeparator; 0447 QTest::newRow("command3") << QStringLiteral("echo \"foo\"") << QString() << KIdentityManagementCore::Signature::End 0448 << KIdentityManagementCore::Signature::AddSeparator; 0449 QTest::newRow("command4") << QStringLiteral("echo \"foo\nsss\"") << QString() << KIdentityManagementCore::Signature::End 0450 << KIdentityManagementCore::Signature::AddSeparator; 0451 QTest::newRow("command5") << QStringLiteral("echo \"foo\nsss\n\"") << QStringLiteral("foo ddd \n") << KIdentityManagementCore::Signature::End 0452 << KIdentityManagementCore::Signature::AddSeparator; 0453 0454 // Start 0455 QTest::newRow("command6") << QStringLiteral("echo \"foo\nsss\n\"") << QStringLiteral("foo ddd \n") << KIdentityManagementCore::Signature::Start 0456 << KIdentityManagementCore::Signature::AddSeparator; 0457 0458 // Failed 0459 // QTest::newRow("command7") << QStringLiteral("echo \"foo\nsss\n\"") << QStringLiteral("foo ddd \n") 0460 // << KIdentityManagementCore::Signature::Start << KIdentityManagementCore::Signature::AddNewLines; 0461 } 0462 0463 void RichTextComposerNgTest::shouldLoadSignatureFromCommand() 0464 { 0465 QFETCH(QString, command); 0466 QFETCH(QString, bodytext); 0467 QFETCH(KIdentityManagementCore::Signature::Placement, signatureplacement); 0468 QFETCH(KIdentityManagementCore::Signature::AddedTextFlag, signatureaddtext); 0469 0470 MessageComposer::RichTextComposerNg richtextComposerNg; 0471 richtextComposerNg.createActions(new KActionCollection(this)); 0472 const QString original(bodytext); 0473 richtextComposerNg.setPlainText(original); 0474 0475 KIdentityManagementCore::Signature newSignature(command, true); 0476 newSignature.setEnabledSignature(true); 0477 newSignature.setInlinedHtml(false); 0478 0479 QString addText; 0480 switch (signatureaddtext) { 0481 case KIdentityManagementCore::Signature::AddNothing: 0482 break; 0483 case KIdentityManagementCore::Signature::AddSeparator: 0484 addText = QStringLiteral("-- \n"); 0485 break; 0486 case KIdentityManagementCore::Signature::AddNewLines: 0487 addText = QStringLiteral("\n"); 0488 break; 0489 } 0490 0491 QString expected; 0492 QString signatureText = newSignature.toPlainText(); 0493 QVERIFY(!signatureText.isEmpty()); 0494 switch (signatureplacement) { 0495 case KIdentityManagementCore::Signature::Start: 0496 expected = addText + signatureText + bodytext; 0497 break; 0498 case KIdentityManagementCore::Signature::End: 0499 expected = bodytext + addText + signatureText; 0500 break; 0501 case KIdentityManagementCore::Signature::AtCursor: 0502 break; 0503 } 0504 0505 richtextComposerNg.insertSignature(newSignature, signatureplacement, signatureaddtext); 0506 QCOMPARE(richtextComposerNg.toPlainText(), expected); 0507 0508 KIdentityManagementCore::Signature emptySignature; 0509 0510 bool replaceSignature = richtextComposerNg.composerSignature()->replaceSignature(newSignature, emptySignature); 0511 QVERIFY(replaceSignature); 0512 QCOMPARE(richtextComposerNg.toPlainText(), original); 0513 0514 replaceSignature = richtextComposerNg.composerSignature()->replaceSignature(emptySignature, newSignature); 0515 QVERIFY(!replaceSignature); 0516 // When signature is empty we can't replace it.=> we need to insertSignature 0517 0518 //=> insertSignature(signature, KIdentityManagementCore::Signature::End, addedText); 0519 richtextComposerNg.insertSignature(newSignature, signatureplacement, signatureaddtext); 0520 QCOMPARE(richtextComposerNg.toPlainText(), expected); 0521 } 0522 0523 void RichTextComposerNgTest::fixHtmlFontSizeTest() 0524 { 0525 MessageComposer::RichTextComposerNg richtextComposerNg; 0526 QString str = QStringLiteral( 0527 "<span style=\"color: green; font-size: 10pt;\">int font</span> size\n" 0528 "<span style=\"font-size: 10.8pt; font-family: foo;\">double font</span> size\n" 0529 "<span style=\"font-size: 15,2pt;\">invalid font</span> size, left as is\n"); 0530 0531 richtextComposerNg.fixHtmlFontSize(str); 0532 const QString expected( 0533 QStringLiteral("<span style=\"color: green; font-size:0.83em;\">int font</span> size\n" 0534 "<span style=\"font-size:0.9em; font-family: foo;\">double font</span> size\n" 0535 "<span style=\"font-size: 15,2pt;\">invalid font</span> size, left as is\n")); 0536 0537 QCOMPARE(str, expected); 0538 } 0539 0540 void RichTextComposerNgTest::toCleanHtmlRegexTest() 0541 { 0542 MessageComposer::RichTextComposerNg richtextComposerNg; 0543 richtextComposerNg.setHtml( 0544 QStringLiteral("<p style=\"-qt-paragraph-type:empty\"></p>\n" 0545 "<p>some text</p>\n" 0546 "<p style=\"-qt-paragraph-type:empty\"></p>\n")); 0547 0548 const QString result = richtextComposerNg.toCleanHtml(); 0549 const int idx = result.indexOf(QStringLiteral("<p style=\"-qt-paragraph-type:empty")); 0550 // Remove the XHTML DOCTYPE and <style> parts as they differ 0551 // based on the fonts on the system 0552 const QString resultStripped = result.mid(idx); 0553 0554 const QString expected = QStringLiteral( 0555 "<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; " 0556 "\"> </p>\n" 0557 "<p style=\" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">some text</p>\n" 0558 "<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; " 0559 "\"> </p></body></html>"); 0560 0561 QCOMPARE(resultStripped, expected); 0562 } 0563 0564 QTEST_MAIN(RichTextComposerNgTest) 0565 0566 #include "moc_richtextcomposerngtest.cpp"