File indexing completed on 2024-04-28 04:48:44
0001 /* 0002 SPDX-FileCopyrightText: 2018 (c) Alexander Stippich <a.stippich@gmx.net> 0003 0004 SPDX-License-Identifier: LGPL-3.0-or-later 0005 */ 0006 0007 #include "filescanner.h" 0008 #include "config-upnp-qt.h" 0009 0010 #include <QObject> 0011 #include <QList> 0012 #include <QUrl> 0013 0014 0015 #include <QTest> 0016 0017 class FileScannerTest: public QObject 0018 { 0019 Q_OBJECT 0020 0021 public: 0022 0023 explicit FileScannerTest(QObject *aParent = nullptr) : QObject(aParent) 0024 { 0025 } 0026 0027 public: 0028 0029 QString createTrackUrl(const QString &subpath) { 0030 return QStringLiteral(LOCAL_FILE_TESTS_SAMPLE_FILES_PATH) + QStringLiteral("/cover_art") + subpath; 0031 } 0032 0033 QList<QString> mTestTracksForDirectory = { 0034 createTrackUrl(QStringLiteral("/artist1/album1/not_existing.ogg")), 0035 createTrackUrl(QStringLiteral("/artist1/album2/not_existing.ogg")), 0036 createTrackUrl(QStringLiteral("/artist1/album3/not_existing.ogg")), 0037 createTrackUrl(QStringLiteral("/artist2/album1/not_existing.ogg")), 0038 createTrackUrl(QStringLiteral("/artist2/album2/not_existing.ogg")), 0039 createTrackUrl(QStringLiteral("/artist2/album3/not_existing.ogg")), 0040 createTrackUrl(QStringLiteral("/artist3/album1/not_existing.ogg")), 0041 createTrackUrl(QStringLiteral("/artist3/album2/not_existing.ogg")), 0042 createTrackUrl(QStringLiteral("/artist3/album3/not_existing.ogg")), 0043 }; 0044 0045 QList<QString> mTestTracksForMetaData = { 0046 createTrackUrl(QStringLiteral("/artist4/test.ogg")), 0047 createTrackUrl(QStringLiteral("/artist4/test.flac")), 0048 createTrackUrl(QStringLiteral("/artist4/test.mp3")), 0049 }; 0050 0051 private Q_SLOTS: 0052 0053 void initTestCase() 0054 { 0055 0056 } 0057 0058 void testFileMetaDataScan() 0059 { 0060 FileScanner fileScanner; 0061 auto scannedTrack = fileScanner.scanOneFile(QUrl::fromLocalFile(QStringLiteral(LOCAL_FILE_TESTS_SAMPLE_FILES_PATH) + QStringLiteral("/music/test.ogg"))); 0062 QCOMPARE(scannedTrack.title(), QStringLiteral("Title")); 0063 QCOMPARE(scannedTrack.genre(), QStringLiteral("Genre")); 0064 QCOMPARE(scannedTrack.album(), QStringLiteral("Test")); 0065 QCOMPARE(scannedTrack.artist(), QStringLiteral("Artist")); 0066 0067 auto scannedTrackCover1 = fileScanner.scanOneFile(QUrl::fromLocalFile(mTestTracksForMetaData.at(0))); 0068 QCOMPARE(scannedTrackCover1.hasEmbeddedCover(), true); 0069 0070 auto scannedTrackCover2 = fileScanner.scanOneFile(QUrl::fromLocalFile(mTestTracksForMetaData.at(1))); 0071 QCOMPARE(scannedTrackCover2.hasEmbeddedCover(), true); 0072 0073 auto scannedTrackCover3 = fileScanner.scanOneFile(QUrl::fromLocalFile(mTestTracksForMetaData.at(2))); 0074 QCOMPARE(scannedTrackCover2.hasEmbeddedCover(), true); 0075 0076 } 0077 0078 void testFindCoverInDirectory() 0079 { 0080 FileScanner fileScanner; 0081 auto singleImageInDir = fileScanner.searchForCoverFile(mTestTracksForDirectory.at(0)); 0082 QVERIFY(!singleImageInDir.isEmpty()); 0083 QCOMPARE(singleImageInDir.fileName(), QStringLiteral("image_file.jpg")); 0084 0085 QVERIFY(!fileScanner.searchForCoverFile(mTestTracksForDirectory.at(1)).isEmpty()); 0086 0087 auto matchExactName = fileScanner.searchForCoverFile(mTestTracksForDirectory.at(2)); 0088 QVERIFY(!matchExactName.isEmpty()); 0089 QCOMPARE(matchExactName.fileName(), QStringLiteral("folder.jpg")); 0090 0091 auto firstAlphabetical = fileScanner.searchForCoverFile(mTestTracksForDirectory.at(3)); 0092 QVERIFY(!firstAlphabetical.isEmpty()); 0093 QCOMPARE(firstAlphabetical.fileName(), QStringLiteral("image1.png")); 0094 0095 QVERIFY(!fileScanner.searchForCoverFile(mTestTracksForDirectory.at(4)).isEmpty()); 0096 QVERIFY(!fileScanner.searchForCoverFile(mTestTracksForDirectory.at(5)).isEmpty()); 0097 QVERIFY(!fileScanner.searchForCoverFile(mTestTracksForDirectory.at(6)).isEmpty()); 0098 QVERIFY(!fileScanner.searchForCoverFile(mTestTracksForDirectory.at(7)).isEmpty()); 0099 QVERIFY(!fileScanner.searchForCoverFile(mTestTracksForDirectory.at(8)).isEmpty()); 0100 } 0101 0102 void benchmarkFileScan() 0103 { 0104 FileScanner fileScanner; 0105 QBENCHMARK { 0106 for (int i = 0; i < 100; i++) { 0107 auto scannedTrack = fileScanner.scanOneFile(QUrl::fromLocalFile(QStringLiteral(LOCAL_FILE_TESTS_SAMPLE_FILES_PATH) + QStringLiteral("/music/test.ogg"))); 0108 auto scannedTrack2 = fileScanner.scanOneFile(QUrl::fromLocalFile(QStringLiteral(LOCAL_FILE_TESTS_SAMPLE_FILES_PATH) + QStringLiteral("/music/testMultiple.ogg"))); 0109 auto scannedTrack3 = fileScanner.scanOneFile(QUrl::fromLocalFile(QStringLiteral(LOCAL_FILE_TESTS_SAMPLE_FILES_PATH) + QStringLiteral("/music/testMany.ogg"))); 0110 } 0111 } 0112 } 0113 0114 void benchmarkCoverInDirectory() 0115 { 0116 FileScanner fileScanner; 0117 QBENCHMARK { 0118 fileScanner.searchForCoverFile(mTestTracksForDirectory.at(0)); 0119 fileScanner.searchForCoverFile(mTestTracksForDirectory.at(1)); 0120 fileScanner.searchForCoverFile(mTestTracksForDirectory.at(2)); 0121 fileScanner.searchForCoverFile(mTestTracksForDirectory.at(3)); 0122 fileScanner.searchForCoverFile(mTestTracksForDirectory.at(4)); 0123 fileScanner.searchForCoverFile(mTestTracksForDirectory.at(5)); 0124 fileScanner.searchForCoverFile(mTestTracksForDirectory.at(6)); 0125 fileScanner.searchForCoverFile(mTestTracksForDirectory.at(7)); 0126 fileScanner.searchForCoverFile(mTestTracksForDirectory.at(8)); 0127 } 0128 } 0129 }; 0130 0131 QTEST_GUILESS_MAIN(FileScannerTest) 0132 0133 0134 #include "filescannertest.moc"