File indexing completed on 2024-12-08 12:21:01
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"