File indexing completed on 2024-10-13 03:37:55
0001 /* 0002 This file is part of the KDE project 0003 SPDX-FileCopyrightText: 2007 David Faure <faure@kde.org> 0004 0005 SPDX-License-Identifier: LGPL-2.0-or-later 0006 */ 0007 #ifndef KDIRLISTERTEST_H 0008 #define KDIRLISTERTEST_H 0009 0010 #include <QDate> 0011 #include <QEventLoop> 0012 #include <QObject> 0013 #include <QSignalSpy> 0014 #include <QTemporaryDir> 0015 #include <kdirlister.h> 0016 0017 #include <memory> 0018 0019 Q_DECLARE_METATYPE(KFileItemList) 0020 0021 class GlobalInits 0022 { 0023 public: 0024 GlobalInits(); 0025 }; 0026 0027 class MyDirLister : public KDirLister, GlobalInits 0028 { 0029 public: 0030 MyDirLister() 0031 : spyStarted(this, &KCoreDirLister::started) 0032 , spyItemsDeleted(this, &KCoreDirLister::itemsDeleted) 0033 , spyClear(this, qOverload<>(&KCoreDirLister::clear)) 0034 , spyClearDir(this, &KCoreDirLister::clearDir) 0035 , spyCompleted(this, qOverload<>(&KCoreDirLister::completed)) 0036 , spyCanceled(this, qOverload<>(&KCoreDirLister::canceled)) 0037 , spyCompletedQUrl(this, &KCoreDirLister::listingDirCompleted) 0038 , spyCanceledQUrl(this, &KCoreDirLister::listingDirCanceled) 0039 , spyRedirection(this, &KCoreDirLister::redirection) 0040 , spyJobError(this, &KCoreDirLister::jobError) 0041 { 0042 } 0043 0044 void clearSpies() 0045 { 0046 spyStarted.clear(); 0047 spyClear.clear(); 0048 spyCompleted.clear(); 0049 spyCompletedQUrl.clear(); 0050 spyCanceled.clear(); 0051 spyCanceledQUrl.clear(); 0052 spyRedirection.clear(); 0053 spyItemsDeleted.clear(); 0054 spyJobError.clear(); 0055 } 0056 0057 QSignalSpy spyStarted; 0058 QSignalSpy spyItemsDeleted; 0059 QSignalSpy spyClear; 0060 QSignalSpy spyClearDir; 0061 QSignalSpy spyCompleted; 0062 QSignalSpy spyCanceled; 0063 QSignalSpy spyCompletedQUrl; 0064 QSignalSpy spyCanceledQUrl; 0065 QSignalSpy spyRedirection; 0066 QSignalSpy spyJobError; 0067 }; 0068 0069 class KDirListerTest : public QObject 0070 { 0071 Q_OBJECT 0072 private Q_SLOTS: 0073 void initTestCase(); 0074 void cleanup(); 0075 void testInvalidUrl(); 0076 void testNonListableUrl(); 0077 void testOpenUrl(); 0078 void testOpenUrlFromCache(); 0079 void testNewItem(); 0080 void testNewItems(); 0081 void benchFindByUrl(); 0082 void testNewItemByCopy(); 0083 void testNewItemByCopyInSubDir(); 0084 void testNewItemsInSymlink(); 0085 void testRefreshItems(); 0086 void testRefreshRootItem(); 0087 void testDeleteItem(); 0088 void testDeleteItems(); 0089 void testRenameItem(); 0090 void testRenameAndOverwrite(); 0091 void testConcurrentListing(); 0092 void testConcurrentHoldingListing(); 0093 void testConcurrentListingAndStop(); 0094 void testDeleteListerEarly(); 0095 void testOpenUrlTwice(); 0096 void testOpenUrlTwiceWithKeep(); 0097 void testOpenAndStop(); 0098 void testBug211472(); 0099 void testRenameCurrentDir(); 0100 void testRenameCurrentDirOpenUrl(); 0101 void testRedirection(); 0102 void testListEmptyDirFromCache(); 0103 void testWatchingAfterCopyJob(); 0104 void testRemoveWatchedDirectory(); 0105 void testDirPermissionChange(); 0106 void testCopyAfterListingAndMove(); // #353195 0107 void testRenameDirectory(); // #401552 0108 void testRequestMimeType(); 0109 void testMimeFilter_data(); 0110 void testMimeFilter(); 0111 void testBug386763(); 0112 void testCacheEviction(); 0113 void testDeleteCurrentDir(); // must be just before last! 0114 void testForgetDir(); // must be last! 0115 0116 protected Q_SLOTS: // 'more private than private slots' - i.e. not seen by qtestlib 0117 void slotNewItems(const KFileItemList &); 0118 void slotNewItems2(const KFileItemList &); 0119 void slotRefreshItems(const QList<QPair<KFileItem, KFileItem>> &); 0120 void slotRefreshItems2(const QList<QPair<KFileItem, KFileItem>> &); 0121 void slotOpenUrlOnRename(const QUrl &); 0122 0123 Q_SIGNALS: 0124 void refreshItemsReceived(); 0125 0126 private: 0127 int fileCount() const; 0128 QString tempPath() const; 0129 void createSimpleFile(const QString &fileName); 0130 void fillDirLister2(MyDirLister &lister, const QString &path); 0131 void waitUntilMTimeChange(const QString &path); 0132 void waitUntilAfter(const QDateTime &ctime); 0133 0134 private: 0135 int m_exitCount; 0136 QEventLoop m_eventLoop; 0137 std::unique_ptr<QTemporaryDir> m_tempDir; 0138 MyDirLister m_dirLister; 0139 KFileItemList m_items; 0140 KFileItemList m_items2; 0141 QList<QPair<KFileItem, KFileItem>> m_refreshedItems, m_refreshedItems2; 0142 }; 0143 0144 #endif