/* SPDX-FileCopyrightText: 2018 (c) Alexander Stippich SPDX-License-Identifier: LGPL-3.0-or-later */ #include "filescanner.h" #include "config-upnp-qt.h" #include #include #include #include class FileScannerTest: public QObject { Q_OBJECT public: explicit FileScannerTest(QObject *aParent = nullptr) : QObject(aParent) { } public: QString createTrackUrl(const QString &subpath) { return QStringLiteral(LOCAL_FILE_TESTS_SAMPLE_FILES_PATH) + QStringLiteral("/cover_art") + subpath; } QList mTestTracksForDirectory = { createTrackUrl(QStringLiteral("/artist1/album1/not_existing.ogg")), createTrackUrl(QStringLiteral("/artist1/album2/not_existing.ogg")), createTrackUrl(QStringLiteral("/artist1/album3/not_existing.ogg")), createTrackUrl(QStringLiteral("/artist2/album1/not_existing.ogg")), createTrackUrl(QStringLiteral("/artist2/album2/not_existing.ogg")), createTrackUrl(QStringLiteral("/artist2/album3/not_existing.ogg")), createTrackUrl(QStringLiteral("/artist3/album1/not_existing.ogg")), createTrackUrl(QStringLiteral("/artist3/album2/not_existing.ogg")), createTrackUrl(QStringLiteral("/artist3/album3/not_existing.ogg")), }; QList mTestTracksForMetaData = { createTrackUrl(QStringLiteral("/artist4/test.ogg")), createTrackUrl(QStringLiteral("/artist4/test.flac")), createTrackUrl(QStringLiteral("/artist4/test.mp3")), }; private Q_SLOTS: void initTestCase() { } void testFileMetaDataScan() { FileScanner fileScanner; auto scannedTrack = fileScanner.scanOneFile(QUrl::fromLocalFile(QStringLiteral(LOCAL_FILE_TESTS_SAMPLE_FILES_PATH) + QStringLiteral("/music/test.ogg"))); QCOMPARE(scannedTrack.title(), QStringLiteral("Title")); QCOMPARE(scannedTrack.genre(), QStringLiteral("Genre")); QCOMPARE(scannedTrack.album(), QStringLiteral("Test")); QCOMPARE(scannedTrack.artist(), QStringLiteral("Artist")); auto scannedTrackCover1 = fileScanner.scanOneFile(QUrl::fromLocalFile(mTestTracksForMetaData.at(0))); QCOMPARE(scannedTrackCover1.hasEmbeddedCover(), true); auto scannedTrackCover2 = fileScanner.scanOneFile(QUrl::fromLocalFile(mTestTracksForMetaData.at(1))); QCOMPARE(scannedTrackCover2.hasEmbeddedCover(), true); auto scannedTrackCover3 = fileScanner.scanOneFile(QUrl::fromLocalFile(mTestTracksForMetaData.at(2))); QCOMPARE(scannedTrackCover2.hasEmbeddedCover(), true); } void testFindCoverInDirectory() { FileScanner fileScanner; auto singleImageInDir = fileScanner.searchForCoverFile(mTestTracksForDirectory.at(0)); QVERIFY(!singleImageInDir.isEmpty()); QCOMPARE(singleImageInDir.fileName(), QStringLiteral("image_file.jpg")); QVERIFY(!fileScanner.searchForCoverFile(mTestTracksForDirectory.at(1)).isEmpty()); auto matchExactName = fileScanner.searchForCoverFile(mTestTracksForDirectory.at(2)); QVERIFY(!matchExactName.isEmpty()); QCOMPARE(matchExactName.fileName(), QStringLiteral("folder.jpg")); auto firstAlphabetical = fileScanner.searchForCoverFile(mTestTracksForDirectory.at(3)); QVERIFY(!firstAlphabetical.isEmpty()); QCOMPARE(firstAlphabetical.fileName(), QStringLiteral("image1.png")); QVERIFY(!fileScanner.searchForCoverFile(mTestTracksForDirectory.at(4)).isEmpty()); QVERIFY(!fileScanner.searchForCoverFile(mTestTracksForDirectory.at(5)).isEmpty()); QVERIFY(!fileScanner.searchForCoverFile(mTestTracksForDirectory.at(6)).isEmpty()); QVERIFY(!fileScanner.searchForCoverFile(mTestTracksForDirectory.at(7)).isEmpty()); QVERIFY(!fileScanner.searchForCoverFile(mTestTracksForDirectory.at(8)).isEmpty()); } void benchmarkFileScan() { FileScanner fileScanner; QBENCHMARK { for (int i = 0; i < 100; i++) { auto scannedTrack = fileScanner.scanOneFile(QUrl::fromLocalFile(QStringLiteral(LOCAL_FILE_TESTS_SAMPLE_FILES_PATH) + QStringLiteral("/music/test.ogg"))); auto scannedTrack2 = fileScanner.scanOneFile(QUrl::fromLocalFile(QStringLiteral(LOCAL_FILE_TESTS_SAMPLE_FILES_PATH) + QStringLiteral("/music/testMultiple.ogg"))); auto scannedTrack3 = fileScanner.scanOneFile(QUrl::fromLocalFile(QStringLiteral(LOCAL_FILE_TESTS_SAMPLE_FILES_PATH) + QStringLiteral("/music/testMany.ogg"))); } } } void benchmarkCoverInDirectory() { FileScanner fileScanner; QBENCHMARK { fileScanner.searchForCoverFile(mTestTracksForDirectory.at(0)); fileScanner.searchForCoverFile(mTestTracksForDirectory.at(1)); fileScanner.searchForCoverFile(mTestTracksForDirectory.at(2)); fileScanner.searchForCoverFile(mTestTracksForDirectory.at(3)); fileScanner.searchForCoverFile(mTestTracksForDirectory.at(4)); fileScanner.searchForCoverFile(mTestTracksForDirectory.at(5)); fileScanner.searchForCoverFile(mTestTracksForDirectory.at(6)); fileScanner.searchForCoverFile(mTestTracksForDirectory.at(7)); fileScanner.searchForCoverFile(mTestTracksForDirectory.at(8)); } } }; QTEST_GUILESS_MAIN(FileScannerTest) #include "filescannertest.moc"