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         "\">&nbsp;</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         "\">&nbsp;</p></body></html>");
0560 
0561     QCOMPARE(resultStripped, expected);
0562 }
0563 
0564 QTEST_MAIN(RichTextComposerNgTest)
0565 
0566 #include "moc_richtextcomposerngtest.cpp"