File indexing completed on 2024-12-08 09:40:30

0001 /*
0002     This file is part of KDE
0003     SPDX-FileCopyrightText: 2013 Dawit Alemayehu <adawit@kde.org>
0004 
0005     SPDX-License-Identifier: LGPL-2.0-or-later
0006 */
0007 
0008 #include "clipboardupdatertest.h"
0009 
0010 #include <QtTestWidgets>
0011 
0012 #include "kiotesthelper.h"
0013 #include <kio/copyjob.h>
0014 #include <kio/deletejob.h>
0015 #include <kio/filecopyjob.h>
0016 #include <kio/paste.h>
0017 #include <kio/pastejob.h>
0018 #include <kio/simplejob.h>
0019 
0020 #include <QApplication>
0021 #include <QClipboard>
0022 #include <QMimeData>
0023 #include <QTemporaryDir>
0024 
0025 QTEST_MAIN(ClipboardUpdaterTest)
0026 
0027 using namespace KIO;
0028 
0029 static QList<QUrl> tempFiles(const QTemporaryDir &dir, const QString &baseName, int count = 3)
0030 {
0031     QList<QUrl> urls;
0032     const QString path = dir.path();
0033     for (int i = 1; i < count + 1; ++i) {
0034         const QString file = (path + '/' + baseName + QString::number(i));
0035         urls << QUrl::fromLocalFile(file);
0036         createTestFile(file);
0037     }
0038     return urls;
0039 }
0040 
0041 void ClipboardUpdaterTest::testPasteAfterRenameFiles()
0042 {
0043     QTemporaryDir dir;
0044     const QList<QUrl> urls = tempFiles(dir, QStringLiteral("rfile"));
0045 
0046     QClipboard *clipboard = QApplication::clipboard();
0047     QMimeData *mimeData = new QMimeData();
0048     mimeData->setUrls(urls);
0049     clipboard->setMimeData(mimeData);
0050 
0051     for (const QUrl &url : urls) {
0052         QUrl newUrl = url;
0053         newUrl.setPath(url.path() + QLatin1String("_renamed"));
0054         KIO::SimpleJob *job = KIO::rename(url, newUrl, KIO::HideProgressInfo);
0055         QVERIFY2(job->exec(), qPrintable(job->errorString()));
0056     }
0057 
0058     const QString pasteDir = dir.path() + QLatin1String("/pastedir");
0059     createTestDirectory(pasteDir, NoSymlink);
0060     KIO::Job *job = KIO::paste(clipboard->mimeData(), QUrl::fromLocalFile(pasteDir));
0061     QVERIFY2(job->exec(), qPrintable(job->errorString()));
0062     QCOMPARE(job->error(), 0);
0063 }
0064 
0065 void ClipboardUpdaterTest::testPasteAfterMoveFile()
0066 {
0067     QTemporaryDir dir;
0068     const QList<QUrl> urls = tempFiles(dir, QStringLiteral("mfile"), 1);
0069 
0070     QClipboard *clipboard = QApplication::clipboard();
0071     QMimeData *mimeData = new QMimeData();
0072     mimeData->setUrls(urls);
0073     clipboard->setMimeData(mimeData);
0074 
0075     const QString moveDir = dir.path() + QLatin1String("/movedir/");
0076     createTestDirectory(moveDir, NoSymlink);
0077     const QUrl srcUrl = urls.first();
0078     QUrl destUrl = QUrl::fromLocalFile(moveDir);
0079     destUrl = destUrl.adjusted(QUrl::RemoveFilename);
0080     destUrl.setPath(destUrl.path() + srcUrl.fileName());
0081     KIO::FileCopyJob *mJob = KIO::file_move(srcUrl, destUrl, -1, KIO::HideProgressInfo);
0082     QVERIFY(mJob->exec());
0083 
0084     const QString pasteDir = dir.path() + QLatin1String("/pastedir");
0085     createTestDirectory(pasteDir, NoSymlink);
0086     KIO::Job *job = KIO::paste(clipboard->mimeData(), QUrl::fromLocalFile(pasteDir));
0087     QVERIFY2(job->exec(), qPrintable(job->errorString()));
0088     QCOMPARE(job->error(), 0);
0089 }
0090 
0091 void ClipboardUpdaterTest::testPasteAfterMoveFiles()
0092 {
0093     QTemporaryDir dir;
0094     const QList<QUrl> urls = tempFiles(dir, QStringLiteral("mfile"));
0095 
0096     QClipboard *clipboard = QApplication::clipboard();
0097     QMimeData *mimeData = new QMimeData();
0098     mimeData->setUrls(urls);
0099     clipboard->setMimeData(mimeData);
0100 
0101     const QString moveDir = dir.path() + QLatin1String("/movedir");
0102     createTestDirectory(moveDir, NoSymlink);
0103     KIO::CopyJob *mJob = KIO::move(urls, QUrl::fromLocalFile(moveDir), KIO::HideProgressInfo);
0104     QVERIFY(mJob->exec());
0105 
0106     const QString pasteDir = dir.path() + QLatin1String("/pastedir");
0107     createTestDirectory(pasteDir, NoSymlink);
0108     KIO::Job *job = KIO::paste(clipboard->mimeData(), QUrl::fromLocalFile(pasteDir));
0109     QVERIFY2(job->exec(), qPrintable(job->errorString()));
0110     QCOMPARE(job->error(), 0);
0111 }
0112 
0113 void ClipboardUpdaterTest::testPasteAfterDeleteFile()
0114 {
0115     QTemporaryDir dir;
0116     const QList<QUrl> urls = tempFiles(dir, QStringLiteral("dfile"), 1);
0117 
0118     QClipboard *clipboard = QApplication::clipboard();
0119     QMimeData *mimeData = new QMimeData();
0120     mimeData->setUrls(urls);
0121     clipboard->setMimeData(mimeData);
0122 
0123     SimpleJob *sJob = KIO::file_delete(urls.first(), KIO::HideProgressInfo);
0124     QVERIFY(sJob->exec());
0125 
0126     QVERIFY(!clipboard->mimeData()->hasUrls());
0127 
0128     const QString pasteDir = dir.path() + QLatin1String("/pastedir");
0129     createTestDirectory(pasteDir, NoSymlink);
0130     KIO::Job *job = KIO::paste(clipboard->mimeData(), QUrl::fromLocalFile(pasteDir), KIO::DefaultFlags);
0131     QVERIFY(job);
0132     QVERIFY(!job->exec());
0133     QCOMPARE(job->error(), int(KIO::ERR_NO_CONTENT));
0134 }
0135 
0136 void ClipboardUpdaterTest::testPasteAfterDeleteFiles()
0137 {
0138     QTemporaryDir dir;
0139     const QList<QUrl> urls = tempFiles(dir, QStringLiteral("dfile"));
0140 
0141     QClipboard *clipboard = QApplication::clipboard();
0142     QMimeData *mimeData = new QMimeData();
0143     mimeData->setUrls(urls);
0144     clipboard->setMimeData(mimeData);
0145 
0146     DeleteJob *dJob = KIO::del(urls, KIO::HideProgressInfo);
0147     QVERIFY(dJob->exec());
0148 
0149     QVERIFY(!clipboard->mimeData()->hasUrls());
0150 
0151     const QString pasteDir = dir.path() + QLatin1String("/pastedir");
0152     createTestDirectory(pasteDir, NoSymlink);
0153     KIO::Job *job = KIO::paste(clipboard->mimeData(), QUrl::fromLocalFile(pasteDir), KIO::DefaultFlags);
0154     QVERIFY(job);
0155     QVERIFY(!job->exec());
0156     QCOMPARE(job->error(), int(KIO::ERR_NO_CONTENT));
0157 }
0158 
0159 #include "moc_clipboardupdatertest.cpp"