File indexing completed on 2024-04-28 04:57:42

0001 /*
0002  *   SPDX-FileCopyrightText: 2022 Alex Kuznetsov <alex@vxpro.io>
0003  *
0004  *   SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
0005  */
0006 
0007 #include <QDate>
0008 #include <QTest>
0009 
0010 #include "../KioActivities.h"
0011 #include "../KioActivitiesApi.h"
0012 #include <utils/d_ptr_implementation.h>
0013 class FixActivitiesProtocol
0014 {
0015 public:
0016     D_PTRC(ActivitiesProtocolApi); // using this to test a macro in the main class
0017 
0018     FixActivitiesProtocol()
0019     {
0020     }
0021 
0022     ActivitiesProtocolApi::PathType pathType(const QUrl &url, QString *activity, QString *filePath) const
0023     {
0024         return d->pathType(url, activity, filePath);
0025     }
0026 
0027     QString mangledPath(const QString &path) const
0028     {
0029         return d->mangledPath(path);
0030     }
0031 
0032     QString demangledPath(const QString &mangled) const
0033     {
0034         return d->demangledPath(mangled);
0035     }
0036 
0037     KIO::UDSEntry activityEntry(const QString &activity)
0038     {
0039         return d->activityEntry(activity);
0040     }
0041 
0042     KIO::UDSEntry filesystemEntry(const QString &path)
0043     {
0044         return d->filesystemEntry(path);
0045     }
0046 };
0047 
0048 class ActivityBasicTest : public QObject
0049 {
0050     Q_OBJECT
0051 
0052 private:
0053     QString filer, filerName;
0054 
0055 private Q_SLOTS:
0056     void initTestCase()
0057     {
0058         qDebug("Init activity tests");
0059 
0060         filerName = "filerActivity";
0061 
0062         QDir d = QDir::temp();
0063         filer = d.absoluteFilePath(filerName);
0064         QFile f(filer);
0065         f.open(QIODevice::WriteOnly);
0066         f.write("hello");
0067     }
0068 
0069     void ActivityPathItemTest()
0070     {
0071         FixActivitiesProtocol fix;
0072         QString activity;
0073         QString filepath;
0074         QString surl = "activities:/current/Zm9v"; // activities:/activityName/base64(filepath)
0075         QUrl url;
0076         url.setUrl(surl);
0077 
0078         auto result = fix.pathType(url, &activity, &filepath);
0079 
0080         QVERIFY(result == ActivitiesProtocolApi::PathType::ActivityPathItem);
0081         QCOMPARE(activity, "current");
0082         QCOMPARE(filepath, QString("foo"));
0083     }
0084 
0085     void ActivityRootItemTest()
0086     {
0087         FixActivitiesProtocol fix;
0088         QString activity;
0089         QString filepath;
0090         QString surl = "activities:/current";
0091         QUrl url;
0092         url.setUrl(surl);
0093 
0094         auto result = fix.pathType(url, &activity, &filepath);
0095 
0096         QVERIFY(result == ActivitiesProtocolApi::PathType::ActivityRootItem);
0097         QCOMPARE(activity, "current");
0098     }
0099 
0100     void RootItemTest()
0101     {
0102         FixActivitiesProtocol fix;
0103         QString activity;
0104         QString filepath;
0105         QString surl = "activities:/";
0106         QUrl url;
0107         url.setUrl(surl);
0108 
0109         auto result = fix.pathType(url, &activity, &filepath);
0110 
0111         QVERIFY(result == ActivitiesProtocolApi::PathType::RootItem);
0112         QCOMPARE(activity, "");
0113     }
0114 
0115     void mangleTest()
0116     {
0117         FixActivitiesProtocol fix;
0118         QString surl = "foo";
0119         auto result = fix.mangledPath(surl);
0120         QCOMPARE(result, "Zm9v");
0121     }
0122 
0123     void demangleTest()
0124     {
0125         FixActivitiesProtocol fix;
0126         QString surl = "Zm9v";
0127         auto result = fix.demangledPath(surl);
0128         QCOMPARE(result, "foo");
0129     }
0130 
0131     void activityEntryTest()
0132     {
0133         FixActivitiesProtocol fix;
0134         QString act("current");
0135         auto result = fix.activityEntry(act);
0136 
0137         QCOMPARE(result.count(), 8);
0138 
0139         QVERIFY(result.contains(KIO::UDSEntry::UDS_NAME));
0140         QVERIFY(result.contains(KIO::UDSEntry::UDS_DISPLAY_NAME));
0141         QVERIFY(result.contains(KIO::UDSEntry::UDS_DISPLAY_TYPE));
0142         QVERIFY(result.contains(KIO::UDSEntry::UDS_ICON_NAME));
0143         QVERIFY(result.contains(KIO::UDSEntry::UDS_FILE_TYPE));
0144         QVERIFY(result.contains(KIO::UDSEntry::UDS_MIME_TYPE));
0145         QVERIFY(result.contains(KIO::UDSEntry::UDS_ACCESS));
0146         QVERIFY(result.contains(KIO::UDSEntry::UDS_USER));
0147 
0148         QCOMPARE(result.stringValue(KIO::UDSEntry::UDS_NAME), act);
0149         QCOMPARE(result.numberValue(KIO::UDSEntry::UDS_FILE_TYPE), S_IFDIR);
0150         QCOMPARE(result.stringValue(KIO::UDSEntry::UDS_MIME_TYPE), QStringLiteral("inode/directory"));
0151         QCOMPARE(result.numberValue(KIO::UDSEntry::UDS_ACCESS), 0500);
0152     }
0153 
0154     void fileSystemEntryTest()
0155     {
0156         FixActivitiesProtocol fix;
0157         auto result = fix.filesystemEntry(filer);
0158 
0159         QVERIFY(result.contains(KIO::UDSEntry::UDS_NAME));
0160         QVERIFY(result.contains(KIO::UDSEntry::UDS_DISPLAY_NAME));
0161         QVERIFY(result.contains(KIO::UDSEntry::UDS_TARGET_URL));
0162         QVERIFY(result.contains(KIO::UDSEntry::UDS_LOCAL_PATH));
0163 
0164         auto mfiler = fix.mangledPath(filer);
0165 
0166         QCOMPARE(result.stringValue(KIO::UDSEntry::UDS_NAME), mfiler);
0167         QCOMPARE(result.stringValue(KIO::UDSEntry::UDS_DISPLAY_NAME), filerName);
0168         QUrl ufiler = QUrl::fromLocalFile(filer);
0169         QCOMPARE(result.stringValue(KIO::UDSEntry::UDS_TARGET_URL), ufiler.toString());
0170         QCOMPARE(result.stringValue(KIO::UDSEntry::UDS_LOCAL_PATH), filer);
0171     }
0172 
0173     void cleanupTestCase()
0174     {
0175         QFile::remove(filer);
0176         qDebug("Activites test complete.");
0177     }
0178 };
0179 
0180 QTEST_MAIN(ActivityBasicTest)
0181 
0182 #include "ActivityBasicTest.moc"