File indexing completed on 2024-04-28 04:48:44
0001 /* 0002 SPDX-FileCopyrightText: 2015 (c) Matthieu Gallien <matthieu_gallien@yahoo.fr> 0003 0004 SPDX-License-Identifier: LGPL-3.0-or-later 0005 */ 0006 0007 #include "databasetestdata.h" 0008 0009 #include "file/localfilelisting.h" 0010 #include "elisa_settings.h" 0011 0012 #include "config-upnp-qt.h" 0013 0014 #include <QObject> 0015 #include <QUrl> 0016 #include <QString> 0017 #include <QStringList> 0018 #include <QHash> 0019 #include <QVector> 0020 #include <QThread> 0021 #include <QStandardPaths> 0022 #include <QDir> 0023 #include <QFile> 0024 0025 #include <QSignalSpy> 0026 #include <QTest> 0027 0028 #include <algorithm> 0029 0030 class LocalFileListingTests: public QObject, public DatabaseTestData 0031 { 0032 Q_OBJECT 0033 0034 public: 0035 0036 LocalFileListingTests(QObject *parent = nullptr) : QObject(parent) 0037 { 0038 } 0039 0040 private Q_SLOTS: 0041 0042 void initTestCase() 0043 { 0044 qRegisterMetaType<QHash<qulonglong,int>>("QHash<qulonglong,int>"); 0045 qRegisterMetaType<QHash<QString,QUrl>>("QHash<QString,QUrl>"); 0046 qRegisterMetaType<QVector<qlonglong>>("QVector<qlonglong>"); 0047 qRegisterMetaType<QHash<qlonglong,int>>("QHash<qlonglong,int>"); 0048 qRegisterMetaType<QList<QUrl>>("QList<QUrl>"); 0049 Elisa::ElisaConfiguration::instance(QStringLiteral("scanAtStartupFeature")); 0050 } 0051 0052 void initialTestWithNoTrack() 0053 { 0054 LocalFileListing myListing; 0055 0056 QSignalSpy tracksListSpy(&myListing, &LocalFileListing::tracksList); 0057 QSignalSpy removedTracksListSpy(&myListing, &LocalFileListing::removedTracksList); 0058 0059 QCOMPARE(tracksListSpy.count(), 0); 0060 QCOMPARE(removedTracksListSpy.count(), 0); 0061 0062 myListing.init(); 0063 0064 QCOMPARE(tracksListSpy.count(), 0); 0065 QCOMPARE(removedTracksListSpy.count(), 0); 0066 0067 myListing.setAllRootPaths({QStringLiteral("/directoryNotExist")}); 0068 0069 QCOMPARE(tracksListSpy.count(), 0); 0070 QCOMPARE(removedTracksListSpy.count(), 0); 0071 0072 QCOMPARE(myListing.allRootPaths(), QStringList{QStringLiteral("/directoryNotExist")}); 0073 0074 myListing.refreshContent(); 0075 0076 QCOMPARE(tracksListSpy.count(), 0); 0077 QCOMPARE(removedTracksListSpy.count(), 0); 0078 } 0079 0080 void initialTestWithEnabledScanOnStartupSetting() 0081 { 0082 LocalFileListing myListing; 0083 0084 Elisa::ElisaConfiguration::self()->setDefaults(); 0085 0086 QSignalSpy tracksListSpy(&myListing, &LocalFileListing::tracksList); 0087 QSignalSpy askRestoredTracksSpy(&myListing, &LocalFileListing::askRestoredTracks); 0088 0089 QCOMPARE(tracksListSpy.count(), 0); 0090 QCOMPARE(askRestoredTracksSpy.count(), 0); 0091 0092 myListing.init(); 0093 0094 QCOMPARE(tracksListSpy.count(), 0); 0095 QCOMPARE(askRestoredTracksSpy.count(), 1); 0096 } 0097 0098 void initialTestWithDisabledScanOnStartupSetting() 0099 { 0100 LocalFileListing myListing; 0101 0102 Elisa::ElisaConfiguration::self()->setDefaults(); 0103 Elisa::ElisaConfiguration::self()->setScanAtStartup(false); 0104 0105 QSignalSpy tracksListSpy(&myListing, &LocalFileListing::tracksList); 0106 QSignalSpy askRestoredTracksSpy(&myListing, &LocalFileListing::askRestoredTracks); 0107 0108 QCOMPARE(tracksListSpy.count(), 0); 0109 QCOMPARE(askRestoredTracksSpy.count(), 0); 0110 0111 myListing.init(); 0112 0113 QCOMPARE(tracksListSpy.count(), 0); 0114 QCOMPARE(askRestoredTracksSpy.count(), 0); 0115 } 0116 0117 void initialTestWithTracks() 0118 { 0119 LocalFileListing myListing; 0120 0121 QString musicPath = QStringLiteral(LOCAL_FILE_TESTS_SAMPLE_FILES_PATH) + QStringLiteral("/music"); 0122 0123 QSignalSpy tracksListSpy(&myListing, &LocalFileListing::tracksList); 0124 QSignalSpy removedTracksListSpy(&myListing, &LocalFileListing::removedTracksList); 0125 0126 QCOMPARE(tracksListSpy.count(), 0); 0127 QCOMPARE(removedTracksListSpy.count(), 0); 0128 0129 myListing.init(); 0130 0131 QCOMPARE(tracksListSpy.count(), 0); 0132 QCOMPARE(removedTracksListSpy.count(), 0); 0133 0134 myListing.setAllRootPaths({musicPath}); 0135 0136 QCOMPARE(tracksListSpy.count(), 0); 0137 QCOMPARE(removedTracksListSpy.count(), 0); 0138 0139 //QCOMPARE(myListing.rootPath(), musicPath); 0140 0141 myListing.refreshContent(); 0142 0143 QCOMPARE(tracksListSpy.count(), 2); 0144 QCOMPARE(removedTracksListSpy.count(), 0); 0145 0146 const auto &firstNewTracksSignal = tracksListSpy.at(0); 0147 auto firstNewTracks = firstNewTracksSignal.at(0).value<DataTypes::ListTrackDataType>(); 0148 const auto &secondNewTracksSignal = tracksListSpy.at(1); 0149 auto secondNewTracks = secondNewTracksSignal.at(0).value<DataTypes::ListTrackDataType>(); 0150 auto newCovers = secondNewTracksSignal.at(1).value<QHash<QString, QUrl>>(); 0151 0152 QCOMPARE(firstNewTracks.count() + secondNewTracks.count(), 5); 0153 QCOMPARE(newCovers.count(), 5); 0154 } 0155 0156 void addAndRemoveTracks() 0157 { 0158 LocalFileListing myListing; 0159 0160 QString musicOriginPath = QStringLiteral(LOCAL_FILE_TESTS_SAMPLE_FILES_PATH) + QStringLiteral("/music"); 0161 0162 QString musicPath = QStringLiteral(LOCAL_FILE_TESTS_WORKING_PATH) + QStringLiteral("/music2/data/innerData"); 0163 0164 QString musicParentPath = QStringLiteral(LOCAL_FILE_TESTS_WORKING_PATH) + QStringLiteral("/music2"); 0165 QDir musicParentDirectory(musicParentPath); 0166 QDir rootDirectory(QStringLiteral(LOCAL_FILE_TESTS_WORKING_PATH)); 0167 0168 musicParentDirectory.removeRecursively(); 0169 rootDirectory.mkpath(QStringLiteral("music2/data/innerData")); 0170 0171 QSignalSpy tracksListSpy(&myListing, &LocalFileListing::tracksList); 0172 QSignalSpy removedTracksListSpy(&myListing, &LocalFileListing::removedTracksList); 0173 QSignalSpy errorWatchingFileSystemChangesSpy(&myListing, &LocalFileListing::errorWatchingFileSystemChanges); 0174 0175 QCOMPARE(tracksListSpy.count(), 0); 0176 QCOMPARE(removedTracksListSpy.count(), 0); 0177 0178 myListing.init(); 0179 0180 QCOMPARE(tracksListSpy.count(), 0); 0181 QCOMPARE(removedTracksListSpy.count(), 0); 0182 0183 myListing.setAllRootPaths({musicParentPath}); 0184 0185 QCOMPARE(tracksListSpy.count(), 0); 0186 QCOMPARE(removedTracksListSpy.count(), 0); 0187 0188 QCOMPARE(myListing.allRootPaths(), QStringList{musicParentPath}); 0189 0190 myListing.refreshContent(); 0191 0192 QCOMPARE(tracksListSpy.count(), 0); 0193 QCOMPARE(removedTracksListSpy.count(), 0); 0194 0195 QFile myTrack(musicOriginPath + QStringLiteral("/test.ogg")); 0196 myTrack.copy(musicPath + QStringLiteral("/test.ogg")); 0197 QFile myCover(musicOriginPath + QStringLiteral("/cover.jpg")); 0198 myCover.copy(musicPath + QStringLiteral("/cover.jpg")); 0199 0200 QCOMPARE(tracksListSpy.wait(), true); 0201 0202 QCOMPARE(tracksListSpy.count(), 1); 0203 QCOMPARE(removedTracksListSpy.count(), 0); 0204 0205 auto newTracksSignal = tracksListSpy.at(0); 0206 auto newTracks = newTracksSignal.at(0).value<DataTypes::ListTrackDataType>(); 0207 auto newCovers = newTracksSignal.at(1).value<QHash<QString, QUrl>>(); 0208 0209 QCOMPARE(newTracks.count(), 1); 0210 QCOMPARE(newCovers.count(), 1); 0211 0212 QDir musicDirectory(musicPath); 0213 QCOMPARE(musicDirectory.removeRecursively(), true); 0214 0215 auto removedFilesWorking = removedTracksListSpy.wait(); 0216 0217 if (!removedFilesWorking && errorWatchingFileSystemChangesSpy.count()) { 0218 QEXPECT_FAIL("", "Impossible watching file system for changes", Abort); 0219 } 0220 QCOMPARE(removedFilesWorking, true); 0221 0222 QCOMPARE(tracksListSpy.count(), 1); 0223 QCOMPARE(removedTracksListSpy.count(), 1); 0224 0225 auto removeSignal = removedTracksListSpy.at(0); 0226 auto removedTracks = removeSignal.at(0).value<QList<QUrl>>(); 0227 QCOMPARE(removedTracks.isEmpty(), false); 0228 0229 QCOMPARE(rootDirectory.mkpath(QStringLiteral("music2/data/innerData")), true); 0230 QCOMPARE(myTrack.copy(musicPath + QStringLiteral("/test.ogg")), true); 0231 QCOMPARE(myCover.copy(musicPath + QStringLiteral("/cover.jpg")), true); 0232 0233 if (tracksListSpy.count() == 1) { 0234 QCOMPARE(tracksListSpy.wait(), true); 0235 } 0236 0237 QCOMPARE(tracksListSpy.count(), 2); 0238 QCOMPARE(removedTracksListSpy.count(), 1); 0239 0240 auto newTracksSignalLast = tracksListSpy.at(1); 0241 auto newTracksLast = newTracksSignalLast.at(0).value<DataTypes::ListTrackDataType>(); 0242 auto newCoversLast = newTracksSignalLast.at(1).value<QHash<QString, QUrl>>(); 0243 0244 QCOMPARE(newTracksLast.count(), 1); 0245 QCOMPARE(newCoversLast.count(), 1); 0246 } 0247 0248 void addTracksAndRemoveDirectory() 0249 { 0250 LocalFileListing myListing; 0251 0252 QString musicOriginPath = QStringLiteral(LOCAL_FILE_TESTS_SAMPLE_FILES_PATH) + QStringLiteral("/music"); 0253 0254 QString musicPath = QStringLiteral(LOCAL_FILE_TESTS_WORKING_PATH) + QStringLiteral("/music2/data/innerData"); 0255 0256 QString innerMusicPath = QStringLiteral(LOCAL_FILE_TESTS_WORKING_PATH) + QStringLiteral("/music2/data"); 0257 0258 QString musicParentPath = QStringLiteral(LOCAL_FILE_TESTS_WORKING_PATH) + QStringLiteral("/music2"); 0259 QDir musicParentDirectory(musicParentPath); 0260 QDir rootDirectory(QStringLiteral(LOCAL_FILE_TESTS_WORKING_PATH)); 0261 0262 musicParentDirectory.removeRecursively(); 0263 rootDirectory.mkpath(QStringLiteral("music2/data/innerData")); 0264 0265 QSignalSpy tracksListSpy(&myListing, &LocalFileListing::tracksList); 0266 QSignalSpy removedTracksListSpy(&myListing, &LocalFileListing::removedTracksList); 0267 QSignalSpy errorWatchingFileSystemChangesSpy(&myListing, &LocalFileListing::errorWatchingFileSystemChanges); 0268 0269 QCOMPARE(tracksListSpy.count(), 0); 0270 QCOMPARE(removedTracksListSpy.count(), 0); 0271 0272 myListing.init(); 0273 0274 QCOMPARE(tracksListSpy.count(), 0); 0275 QCOMPARE(removedTracksListSpy.count(), 0); 0276 0277 myListing.setAllRootPaths({musicParentPath}); 0278 0279 QCOMPARE(tracksListSpy.count(), 0); 0280 QCOMPARE(removedTracksListSpy.count(), 0); 0281 0282 QCOMPARE(myListing.allRootPaths(), QStringList{musicParentPath}); 0283 0284 myListing.refreshContent(); 0285 0286 QCOMPARE(tracksListSpy.count(), 0); 0287 QCOMPARE(removedTracksListSpy.count(), 0); 0288 0289 QFile myTrack(musicOriginPath + QStringLiteral("/test.ogg")); 0290 myTrack.copy(musicPath + QStringLiteral("/test.ogg")); 0291 QFile myCover(musicOriginPath + QStringLiteral("/cover.jpg")); 0292 myCover.copy(musicPath + QStringLiteral("/cover.jpg")); 0293 0294 QCOMPARE(tracksListSpy.wait(), true); 0295 0296 QCOMPARE(tracksListSpy.count(), 1); 0297 QCOMPARE(removedTracksListSpy.count(), 0); 0298 0299 auto newTracksSignal = tracksListSpy.at(0); 0300 auto newTracks = newTracksSignal.at(0).value<DataTypes::ListTrackDataType>(); 0301 auto newCovers = newTracksSignal.at(1).value<QHash<QString, QUrl>>(); 0302 0303 QCOMPARE(newTracks.count(), 1); 0304 QCOMPARE(newCovers.count(), 1); 0305 0306 QDir musicDirectory(innerMusicPath); 0307 musicDirectory.removeRecursively(); 0308 0309 auto removedFilesWorking = removedTracksListSpy.wait(); 0310 0311 if (!removedFilesWorking && errorWatchingFileSystemChangesSpy.count()) { 0312 QEXPECT_FAIL("", "Impossible watching file system for changes", Abort); 0313 } 0314 QCOMPARE(removedFilesWorking, true); 0315 0316 QCOMPARE(tracksListSpy.count(), 1); 0317 QCOMPARE(removedTracksListSpy.count(), 1); 0318 0319 auto removeSignal = removedTracksListSpy.at(0); 0320 auto removedTracks = removeSignal.at(0).value<QList<QUrl>>(); 0321 QCOMPARE(removedTracks.isEmpty(), false); 0322 0323 QCOMPARE(rootDirectory.mkpath(QStringLiteral("music2/data/innerData")), true); 0324 QCOMPARE(myTrack.copy(musicPath + QStringLiteral("/test.ogg")), true); 0325 QCOMPARE(myCover.copy(musicPath + QStringLiteral("/cover.jpg")), true); 0326 0327 if (tracksListSpy.count() == 1) { 0328 QCOMPARE(tracksListSpy.wait(), true); 0329 } 0330 0331 QCOMPARE(tracksListSpy.count(), 2); 0332 QCOMPARE(removedTracksListSpy.count(), 1); 0333 0334 auto newTracksSignalLast = tracksListSpy.at(1); 0335 auto newTracksLast = newTracksSignalLast.at(0).value<DataTypes::ListTrackDataType>(); 0336 auto newCoversLast = newTracksSignalLast.at(1).value<QHash<QString, QUrl>>(); 0337 0338 QCOMPARE(newTracksLast.count(), 1); 0339 QCOMPARE(newCoversLast.count(), 1); 0340 } 0341 0342 void addAndMoveTracks() 0343 { 0344 LocalFileListing myListing; 0345 0346 QString musicOriginPath = QStringLiteral(LOCAL_FILE_TESTS_SAMPLE_FILES_PATH) + QStringLiteral("/music"); 0347 0348 QString musicPath = QStringLiteral(LOCAL_FILE_TESTS_WORKING_PATH) + QStringLiteral("/music2/data/innerData"); 0349 QDir musicDirectory(musicPath); 0350 0351 QString musicParentPath = QStringLiteral(LOCAL_FILE_TESTS_WORKING_PATH) + QStringLiteral("/music2"); 0352 QDir musicParentDirectory(musicParentPath); 0353 0354 QString musicFriendPath = QStringLiteral(LOCAL_FILE_TESTS_WORKING_PATH) + QStringLiteral("/music3"); 0355 QDir musicFriendDirectory(musicFriendPath); 0356 0357 QCOMPARE(musicFriendDirectory.removeRecursively(), true); 0358 QCOMPARE(musicParentDirectory.removeRecursively(), true); 0359 0360 musicFriendDirectory.mkpath(musicFriendPath); 0361 musicDirectory.mkpath(musicPath); 0362 0363 QSignalSpy tracksListSpy(&myListing, &LocalFileListing::tracksList); 0364 QSignalSpy removedTracksListSpy(&myListing, &LocalFileListing::removedTracksList); 0365 QSignalSpy modifiedTracksListSpy(&myListing, &LocalFileListing::modifyTracksList); 0366 QSignalSpy errorWatchingFileSystemChangesSpy(&myListing, &LocalFileListing::errorWatchingFileSystemChanges); 0367 0368 QCOMPARE(tracksListSpy.count(), 0); 0369 QCOMPARE(removedTracksListSpy.count(), 0); 0370 QCOMPARE(modifiedTracksListSpy.count(), 0); 0371 0372 myListing.init(); 0373 0374 QCOMPARE(tracksListSpy.count(), 0); 0375 QCOMPARE(removedTracksListSpy.count(), 0); 0376 QCOMPARE(modifiedTracksListSpy.count(), 0); 0377 0378 myListing.setAllRootPaths({musicParentPath}); 0379 0380 QCOMPARE(tracksListSpy.count(), 0); 0381 QCOMPARE(removedTracksListSpy.count(), 0); 0382 QCOMPARE(modifiedTracksListSpy.count(), 0); 0383 0384 QCOMPARE(myListing.allRootPaths(), QStringList{musicParentPath}); 0385 0386 myListing.refreshContent(); 0387 0388 QCOMPARE(tracksListSpy.count(), 0); 0389 QCOMPARE(removedTracksListSpy.count(), 0); 0390 QCOMPARE(modifiedTracksListSpy.count(), 0); 0391 0392 QFile myTrack(musicOriginPath + QStringLiteral("/test.ogg")); 0393 myTrack.copy(musicPath + QStringLiteral("/test.ogg")); 0394 QFile myCover(musicOriginPath + QStringLiteral("/cover.jpg")); 0395 myCover.copy(musicPath + QStringLiteral("/cover.jpg")); 0396 0397 QCOMPARE(tracksListSpy.wait(), true); 0398 0399 QCOMPARE(tracksListSpy.count(), 1); 0400 QCOMPARE(removedTracksListSpy.count(), 0); 0401 QCOMPARE(modifiedTracksListSpy.count(), 0); 0402 0403 auto newTracksSignal = tracksListSpy.at(0); 0404 auto newTracks = newTracksSignal.at(0).value<DataTypes::ListTrackDataType>(); 0405 auto newCovers = newTracksSignal.at(1).value<QHash<QString, QUrl>>(); 0406 0407 QCOMPARE(newTracks.count(), 1); 0408 QCOMPARE(newCovers.count(), 1); 0409 0410 QDir().rename(musicPath, musicFriendPath); 0411 0412 auto removedFilesWorking = removedTracksListSpy.wait(); 0413 0414 if (!removedFilesWorking && errorWatchingFileSystemChangesSpy.count()) { 0415 QEXPECT_FAIL("", "Impossible watching file system for changes", Abort); 0416 } 0417 QCOMPARE(removedFilesWorking, true); 0418 0419 QCOMPARE(tracksListSpy.count(), 1); 0420 QCOMPARE(removedTracksListSpy.count(), 1); 0421 QCOMPARE(modifiedTracksListSpy.count(), 0); 0422 0423 auto removeSignal = removedTracksListSpy.at(0); 0424 auto removedTracks = removeSignal.at(0).value<QList<QUrl>>(); 0425 QCOMPARE(removedTracks.isEmpty(), false); 0426 0427 QCOMPARE(musicFriendDirectory.mkpath(musicFriendPath), true); 0428 QCOMPARE(musicDirectory.mkpath(musicPath), true); 0429 QCOMPARE(myTrack.copy(musicPath + QStringLiteral("/test.ogg")), true); 0430 QCOMPARE(myCover.copy(musicPath + QStringLiteral("/cover.jpg")), true); 0431 0432 if (tracksListSpy.count() == 1) { 0433 QCOMPARE(tracksListSpy.wait(), true); 0434 } 0435 0436 QCOMPARE(tracksListSpy.count(), 2); 0437 QCOMPARE(removedTracksListSpy.count(), 1); 0438 QCOMPARE(modifiedTracksListSpy.count(), 0); 0439 0440 auto newTracksSignalLast = tracksListSpy.at(1); 0441 auto newTracksLast = newTracksSignalLast.at(0).value<DataTypes::ListTrackDataType>(); 0442 auto newCoversLast = newTracksSignalLast.at(1).value<QHash<QString, QUrl>>(); 0443 0444 QCOMPARE(newTracksLast.count(), 1); 0445 QCOMPARE(newCoversLast.count(), 1); 0446 } 0447 0448 void restoreRemovedTracks() 0449 { 0450 LocalFileListing myListing; 0451 0452 Elisa::ElisaConfiguration::self()->setDefaults(); 0453 0454 QSignalSpy tracksListSpy(&myListing, &LocalFileListing::tracksList); 0455 QSignalSpy removedTracksListSpy(&myListing, &LocalFileListing::removedTracksList); 0456 QSignalSpy modifiedTracksListSpy(&myListing, &LocalFileListing::modifyTracksList); 0457 QSignalSpy indexingStartedSpy(&myListing, &LocalFileListing::indexingStarted); 0458 QSignalSpy indexingFinishedSpy(&myListing, &LocalFileListing::indexingFinished); 0459 QSignalSpy askRestoredTracksSpy(&myListing, &LocalFileListing::askRestoredTracks); 0460 0461 QCOMPARE(tracksListSpy.count(), 0); 0462 QCOMPARE(removedTracksListSpy.count(), 0); 0463 QCOMPARE(modifiedTracksListSpy.count(), 0); 0464 QCOMPARE(indexingStartedSpy.count(), 0); 0465 QCOMPARE(indexingFinishedSpy.count(), 0); 0466 QCOMPARE(askRestoredTracksSpy.count(), 0); 0467 0468 myListing.setAllRootPaths({QStringLiteral("/does/not/exists")}); 0469 0470 QCOMPARE(tracksListSpy.count(), 0); 0471 QCOMPARE(removedTracksListSpy.count(), 0); 0472 QCOMPARE(modifiedTracksListSpy.count(), 0); 0473 QCOMPARE(indexingStartedSpy.count(), 0); 0474 QCOMPARE(indexingFinishedSpy.count(), 0); 0475 QCOMPARE(askRestoredTracksSpy.count(), 0); 0476 0477 myListing.init(); 0478 0479 QCOMPARE(tracksListSpy.count(), 0); 0480 QCOMPARE(removedTracksListSpy.count(), 0); 0481 QCOMPARE(modifiedTracksListSpy.count(), 0); 0482 QCOMPARE(indexingStartedSpy.count(), 0); 0483 QCOMPARE(indexingFinishedSpy.count(), 0); 0484 QCOMPARE(askRestoredTracksSpy.count(), 1); 0485 0486 myListing.restoredTracks({{QUrl::fromLocalFile(QStringLiteral("/removed/files1")), QDateTime::fromMSecsSinceEpoch(1)}, 0487 {QUrl::fromLocalFile(QStringLiteral("/removed/files2")), QDateTime::fromMSecsSinceEpoch(2)}}); 0488 0489 QCOMPARE(tracksListSpy.count(), 0); 0490 QCOMPARE(removedTracksListSpy.count(), 1); 0491 QCOMPARE(modifiedTracksListSpy.count(), 0); 0492 QCOMPARE(indexingStartedSpy.count(), 1); 0493 QCOMPARE(indexingFinishedSpy.count(), 0); 0494 QCOMPARE(askRestoredTracksSpy.count(), 1); 0495 0496 auto removedTracksSignal = removedTracksListSpy.at(0); 0497 0498 QCOMPARE(removedTracksSignal.count(), 1); 0499 0500 auto removedTracks = removedTracksSignal.at(0).value<QList<QUrl>>(); 0501 0502 QCOMPARE(removedTracks.count(), 2); 0503 0504 std::sort(removedTracks.begin(), removedTracks.end()); 0505 0506 QCOMPARE(removedTracks[0], QUrl::fromLocalFile(QStringLiteral("/removed/files1"))); 0507 QCOMPARE(removedTracks[1], QUrl::fromLocalFile(QStringLiteral("/removed/files2"))); 0508 } 0509 }; 0510 0511 QTEST_GUILESS_MAIN(LocalFileListingTests) 0512 0513 0514 #include "localfilelistingtest.moc"