File indexing completed on 2024-05-05 03:52:08
0001 /* 0002 SPDX-FileCopyrightText: 2013 Vishesh Handa <me@vhanda.in> 0003 0004 SPDX-License-Identifier: LGPL-2.1-or-later 0005 */ 0006 0007 #include "filemonitor.h" 0008 0009 #include <memory> 0010 #include <QTest> 0011 #include <QSignalSpy> 0012 0013 #include <QDBusConnection> 0014 #include <QDBusMessage> 0015 #include <QRandomGenerator> 0016 0017 using namespace Baloo; 0018 0019 class FileMonitorTest : public QObject 0020 { 0021 Q_OBJECT 0022 private Q_SLOTS: 0023 void test(); 0024 void init(); 0025 void cleanup(); 0026 void testAddFileShouldReturnOneFileIfOneFileAdded(); 0027 void testAddFileShouldReturnTwoFilesIfTwoFilesAdded(); 0028 void testAddFileShouldRemoveTailingSlash(); 0029 void testAddFileShouldNotAddNotLocalUrl(); 0030 void testAddFileShouldAddLocalUrl(); 0031 void testClearIfClearAfterOneFileAddedFilesShouldReturn0Items(); 0032 void testSetFilesIfSetFilesWithOneElementFilesShouldReturn1Item(); 0033 0034 private: 0035 QString getRandomValidFilePath(); 0036 QString getRandomValidWebUrl(); 0037 QString getRandomString(int length) const; 0038 std::unique_ptr<FileMonitor> m_sut; 0039 }; 0040 0041 void FileMonitorTest::init() 0042 { 0043 m_sut = std::make_unique<FileMonitor>(); 0044 } 0045 0046 void FileMonitorTest::cleanup() 0047 { 0048 m_sut.reset(); 0049 } 0050 0051 void FileMonitorTest::test() 0052 { 0053 QString file = getRandomValidFilePath(); 0054 m_sut->addFile(file); 0055 0056 QSignalSpy spy(m_sut.get(), SIGNAL(fileMetaDataChanged(QString))); 0057 0058 QDBusMessage message = QDBusMessage::createSignal(QStringLiteral("/files"), 0059 QStringLiteral("org.kde"), 0060 QStringLiteral("changed")); 0061 0062 QList<QString> list; 0063 list << file; 0064 0065 QVariantList vl; 0066 vl.reserve(1); 0067 vl << QVariant(list); 0068 message.setArguments(vl); 0069 0070 QDBusConnection::sessionBus().send(message); 0071 0072 QEventLoop loop; 0073 connect(m_sut.get(), &FileMonitor::fileMetaDataChanged, &loop, &QEventLoop::quit); 0074 loop.exec(); 0075 0076 QCOMPARE(spy.count(), 1); 0077 0078 QList<QVariant> variantList = spy.at(0); 0079 QCOMPARE(variantList.size(), 1); 0080 0081 QVariant var = variantList.front(); 0082 QCOMPARE(var.typeId(), QMetaType::QString); 0083 QCOMPARE(var.toString(), file); 0084 } 0085 0086 void FileMonitorTest::testAddFileShouldReturnOneFileIfOneFileAdded() 0087 { 0088 QString filePath = getRandomValidFilePath(); 0089 m_sut->addFile(filePath); 0090 0091 QStringList actualList = m_sut->files(); 0092 0093 QCOMPARE(actualList.count(), 1); 0094 QCOMPARE(actualList.first(), filePath); 0095 } 0096 0097 void FileMonitorTest::testAddFileShouldReturnTwoFilesIfTwoFilesAdded() 0098 { 0099 QString filePath1 = getRandomValidFilePath(); 0100 QString filePath2 = getRandomValidFilePath(); 0101 m_sut->addFile(filePath1); 0102 m_sut->addFile(filePath2); 0103 0104 QStringList actualList = m_sut->files(); 0105 0106 QCOMPARE(actualList.count(), 2); 0107 QVERIFY(actualList.contains(filePath1)); 0108 QVERIFY(actualList.contains(filePath2)); 0109 } 0110 0111 void FileMonitorTest::testAddFileShouldRemoveTailingSlash() 0112 { 0113 QString expectedFilePath = getRandomValidFilePath(); 0114 QString filePath(expectedFilePath); 0115 filePath.append(QLatin1Char('/')); 0116 0117 m_sut->addFile(filePath); 0118 0119 QStringList actualList = m_sut->files(); 0120 QCOMPARE(actualList.first(), expectedFilePath); 0121 } 0122 0123 void FileMonitorTest::testAddFileShouldNotAddNotLocalUrl() 0124 { 0125 QUrl fileUrl(getRandomValidWebUrl()); 0126 0127 m_sut->addFile(fileUrl); 0128 QStringList actualList = m_sut->files(); 0129 0130 QCOMPARE(actualList.count(), 0); 0131 } 0132 0133 void FileMonitorTest::testAddFileShouldAddLocalUrl() 0134 { 0135 QUrl fileUrl(getRandomValidFilePath()); 0136 0137 m_sut->addFile(fileUrl); 0138 QStringList actualList = m_sut->files(); 0139 0140 QCOMPARE(actualList.count(), 0); 0141 } 0142 void FileMonitorTest::testClearIfClearAfterOneFileAddedFilesShouldReturn0Items() 0143 { 0144 QUrl fileUrl(getRandomValidFilePath()); 0145 0146 m_sut->addFile(fileUrl); 0147 0148 QStringList actualList = m_sut->files(); 0149 0150 QCOMPARE(actualList.count(), 0); 0151 } 0152 void FileMonitorTest::testSetFilesIfSetFilesWithOneElementFilesShouldReturn1Item() 0153 { 0154 QStringList files = QStringList(getRandomValidFilePath()); 0155 0156 m_sut->setFiles(files); 0157 QStringList actualList = m_sut->files(); 0158 0159 QCOMPARE(actualList.count(), 1); 0160 } 0161 0162 QString FileMonitorTest::getRandomValidWebUrl() 0163 { 0164 QString file = QStringLiteral("http://%1.com/%2").arg(getRandomString(4), getRandomString(4)); 0165 return file; 0166 } 0167 0168 QString FileMonitorTest::getRandomValidFilePath() 0169 { 0170 QString file(QStringLiteral("/tmp/")); 0171 file.append(getRandomString(8)); 0172 return file; 0173 } 0174 0175 QString FileMonitorTest::getRandomString(int length) const 0176 { 0177 const QString possibleCharacters(QStringLiteral("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789")); 0178 // assuming you want random strings of 12 characters 0179 0180 QString randomString; 0181 auto *generator = QRandomGenerator::global(); 0182 for(int i=0; i<length; ++i) 0183 { 0184 int index = generator->bounded(possibleCharacters.length()); 0185 QChar nextChar = possibleCharacters.at(index); 0186 randomString.append(nextChar); 0187 } 0188 return randomString; 0189 } 0190 0191 QTEST_GUILESS_MAIN(FileMonitorTest) 0192 0193 #include "filemonitortest.moc"