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"