File indexing completed on 2025-05-04 04:59:01
0001 /* 0002 SPDX-FileCopyrightText: 2017 Sandro Knauß <sknauss@kde.org> 0003 0004 SPDX-License-Identifier: GPL-2.0-only 0005 */ 0006 0007 #include "urlhandlermanagertest.h" 0008 0009 #include "util.h" 0010 #include "viewer/urlhandlermanager_p.h" 0011 #include "viewer/viewer.h" 0012 #include "viewer/viewer_p.h" 0013 0014 #include <MimeTreeParser/BodyPart> 0015 #include <MimeTreeParser/Enums> 0016 0017 #include <MessageViewer/BodyPartURLHandler> 0018 0019 #include <QTest> 0020 0021 using namespace MessageViewer; 0022 0023 class TestBodyPartURLHandler : public Interface::BodyPartURLHandler 0024 { 0025 public: 0026 [[nodiscard]] QString name() const override 0027 { 0028 return QStringLiteral("TestBodyPartURLHandler"); 0029 } 0030 0031 void testPath(const QString &path) const 0032 { 0033 QCOMPARE(path, mPath); 0034 } 0035 0036 void testViewer(MessageViewer::Viewer *viewerInstance) const 0037 { 0038 QCOMPARE(viewerInstance, mViewerInstance); 0039 } 0040 0041 void testContent(KMime::Content *content) const 0042 { 0043 QCOMPARE(content, mContent); 0044 } 0045 0046 bool handleClick(MessageViewer::Viewer *viewerInstance, MimeTreeParser::Interface::BodyPart *part, const QString &path) const override 0047 { 0048 testContent(part->content()); 0049 testViewer(viewerInstance); 0050 testPath(path); 0051 return mHandleClick; 0052 } 0053 0054 bool handleContextMenuRequest(MimeTreeParser::Interface::BodyPart *part, const QString &path, const QPoint &p) const override 0055 { 0056 Q_UNUSED(p) 0057 testContent(part->content()); 0058 testPath(path); 0059 return mHandleContextMenuRequest; 0060 } 0061 0062 QString statusBarMessage(MimeTreeParser::Interface::BodyPart *part, const QString &path) const override 0063 { 0064 testContent(part->content()); 0065 testPath(path); 0066 return mStatusBarMessageRet; 0067 } 0068 0069 QString mPath; 0070 QString mStatusBarMessageRet; 0071 bool mHandleClick; 0072 bool mHandleContextMenuRequest; 0073 MessageViewer::Viewer *mViewerInstance; 0074 KMime::Content *mContent; 0075 }; 0076 0077 BodyPartUrlHandlerManagerTest::BodyPartUrlHandlerManagerTest(QObject *parent) 0078 : QObject(parent) 0079 { 0080 } 0081 0082 void BodyPartUrlHandlerManagerTest::testHandleClick_data() 0083 { 0084 QTest::addColumn<QString>("url"); 0085 QTest::addColumn<QString>("path"); 0086 QTest::addColumn<KMime::ContentIndex>("index"); 0087 QTest::addColumn<bool>("ret"); 0088 0089 QTest::newRow("completely_empty") << QString() << QString() << KMime::ContentIndex() << false; 0090 QTest::newRow("empty") << QStringLiteral("x-kmail:") << QString() << KMime::ContentIndex() << false; 0091 QTest::newRow("pgpkey") << QStringLiteral("x-kmail:/bodypart/1234/2/pgpkey") << QStringLiteral("pgpkey") << KMime::ContentIndex(QStringLiteral("2")) 0092 << true; 0093 QTest::newRow("test") << QStringLiteral("x-kmail:/bodypart/1234/1/test") << QStringLiteral("test") << KMime::ContentIndex(QStringLiteral("1")) << true; 0094 QTest::newRow("test_with_arguments") << QStringLiteral("x-kmail:/bodypart/1234/1/test?foo=qua") << QStringLiteral("test?foo=qua") 0095 << KMime::ContentIndex(QStringLiteral("1")) << true; 0096 } 0097 0098 void BodyPartUrlHandlerManagerTest::testHandleClick() 0099 { 0100 QFETCH(QString, url); 0101 QFETCH(QString, path); 0102 QFETCH(KMime::ContentIndex, index); 0103 QFETCH(bool, ret); 0104 0105 BodyPartURLHandlerManager manager; 0106 TestBodyPartURLHandler handler; 0107 0108 manager.registerHandler(&handler, QLatin1StringView("")); 0109 Viewer v(nullptr); 0110 ViewerPrivate vp(&v, nullptr, nullptr); 0111 const KMime::Message::Ptr msg(Test::readAndParseMail(QStringLiteral("encapsulated-with-attachment.mbox"))); 0112 vp.setMessage(msg, MimeTreeParser::Delayed); 0113 0114 handler.mViewerInstance = &v; 0115 handler.mPath = path; 0116 handler.mHandleClick = true; 0117 handler.mContent = msg->content(index); 0118 0119 QCOMPARE(manager.handleClick(QUrl(url), &vp), ret); 0120 manager.unregisterHandler(&handler); 0121 } 0122 0123 QTEST_MAIN(BodyPartUrlHandlerManagerTest) 0124 0125 #include "moc_urlhandlermanagertest.cpp"