diff --git a/autotests/CMakeLists.txt b/autotests/CMakeLists.txt index c86f1e17..0d65f706 100644 --- a/autotests/CMakeLists.txt +++ b/autotests/CMakeLists.txt @@ -1,188 +1,197 @@ enable_testing() configure_file(mediaplaylisttestconfig.h.in ${CMAKE_CURRENT_BINARY_DIR}/mediaplaylisttestconfig.h @ONLY) include_directories(${elisa_CURRENT_BINARY_DIR}) include_directories(${elisa_BINARY_DIR}) include_directories(${elisa_BINARY_DIR}/src) set(viewManagerTest_SOURCES viewmanagertest.cpp ../src/elisautils.cpp ) ecm_add_test(${viewManagerTest_SOURCES} TEST_NAME "viewManagerTest" LINK_LIBRARIES Qt5::Test elisaLib) target_include_directories(viewManagerTest PRIVATE ${CMAKE_SOURCE_DIR}/src) set(databaseInterfaceTest_SOURCES databaseinterfacetest.cpp databasetestdata.h ) ecm_add_test(${databaseInterfaceTest_SOURCES} TEST_NAME "databaseInterfaceTest" LINK_LIBRARIES Qt5::Test elisaLib) target_include_directories(databaseInterfaceTest PRIVATE ${CMAKE_SOURCE_DIR}/src) set(managemediaplayercontrolTest_SOURCES managemediaplayercontroltest.cpp ../src/elisautils.cpp ) ecm_add_test(${managemediaplayercontrolTest_SOURCES} TEST_NAME "managemediaplayercontrolTest" LINK_LIBRARIES Qt5::Test elisaLib ) set(manageheaderbarTest_SOURCES manageheaderbartest.cpp ../src/elisautils.cpp ) ecm_add_test(${manageheaderbarTest_SOURCES} TEST_NAME "manageheaderbarTest" LINK_LIBRARIES Qt5::Test elisaLib ) target_include_directories(manageheaderbarTest PRIVATE ${CMAKE_SOURCE_DIR}/src) set(manageaudioplayerTest_SOURCES manageaudioplayertest.cpp ) ecm_add_test(${manageaudioplayerTest_SOURCES} TEST_NAME "manageaudioplayerTest" LINK_LIBRARIES Qt5::Test elisaLib ) target_include_directories(manageaudioplayerTest PRIVATE ${CMAKE_SOURCE_DIR}/src) set(mediaplaylistTest_SOURCES qabstractitemmodeltester.cpp mediaplaylisttest.cpp ../src/elisautils.cpp ) ecm_qt_declare_logging_category(mediaplaylistTest_SOURCES HEADER elisa_debug.h IDENTIFIER lcModelTest CATEGORY_NAME qt.modeltest) ecm_add_test(${mediaplaylistTest_SOURCES} TEST_NAME "mediaplaylistTest" LINK_LIBRARIES Qt5::Test elisaLib Qt5::CorePrivate ) target_include_directories(mediaplaylistTest PRIVATE ${CMAKE_SOURCE_DIR}/src) set(trackslistenertest_SOURCES trackslistenertest.cpp ../src/elisautils.cpp ) ecm_add_test(${trackslistenertest_SOURCES} TEST_NAME "trackslistenertest" LINK_LIBRARIES Qt5::Test elisaLib ) target_include_directories(trackslistenertest PRIVATE ${CMAKE_SOURCE_DIR}/src) set(datamodeltest_SOURCES qabstractitemmodeltester.cpp datamodeltest.cpp ) ecm_qt_declare_logging_category(datamodeltest_SOURCES HEADER elisa_debug.h IDENTIFIER lcModelTest CATEGORY_NAME qt.modeltest) ecm_add_test(${datamodeltest_SOURCES} TEST_NAME "datamodeltest" LINK_LIBRARIES Qt5::Test elisaLib Qt5::CorePrivate ) target_include_directories(datamodeltest PRIVATE ${CMAKE_SOURCE_DIR}/src) set(trackmetadatamodeltest_SOURCES qabstractitemmodeltester.cpp trackmetadatamodeltest.cpp ) ecm_qt_declare_logging_category(trackmetadatamodeltest_SOURCES HEADER elisa_debug.h IDENTIFIER lcModelTest CATEGORY_NAME qt.modeltest) ecm_add_test(${trackmetadatamodeltest_SOURCES} TEST_NAME "trackmetadatamodeltest" LINK_LIBRARIES Qt5::Test elisaLib Qt5::CorePrivate ) target_include_directories(trackmetadatamodeltest PRIVATE ${CMAKE_SOURCE_DIR}/src) set(alltracksproxymodeltest_SOURCES qabstractitemmodeltester.cpp alltracksproxymodeltest.cpp ) ecm_qt_declare_logging_category(alltracksproxymodeltest_SOURCES HEADER elisa_debug.h IDENTIFIER lcModelTest CATEGORY_NAME qt.modeltest) ecm_add_test(${alltracksproxymodeltest_SOURCES} TEST_NAME "alltracksproxymodeltest" LINK_LIBRARIES Qt5::Test elisaLib Qt5::CorePrivate ) target_include_directories(alltracksproxymodeltest PRIVATE ${CMAKE_SOURCE_DIR}/src) if (KF5FileMetaData_FOUND) set(localfilelistingtest_SOURCES localfilelistingtest.cpp ) ecm_add_test(${localfilelistingtest_SOURCES} TEST_NAME "localfilelistingtest" LINK_LIBRARIES Qt5::Test elisaLib ) target_include_directories(localfilelistingtest PRIVATE ${CMAKE_SOURCE_DIR}/src) endif() if (KF5XmlGui_FOUND AND KF5KCMUtils_FOUND) set(elisaapplicationtest_SOURCES elisaapplicationtest.cpp ../src/elisautils.cpp ) ecm_add_test(${elisaapplicationtest_SOURCES} TEST_NAME "elisaapplicationtest" LINK_LIBRARIES Qt5::Test elisaLib ) target_include_directories(elisaapplicationtest PRIVATE ${CMAKE_SOURCE_DIR}/src) endif() if (Qt5Quick_FOUND AND Qt5Widgets_FOUND AND NOT WIN32) set(elisaqmltests_SOURCES elisaqmltests.cpp qmltests/tst_GridBrowserDelegate.qml qmltests/tst_NavigationActionBar.qml qmltests/tst_PlayListEntry.qml ) ecm_add_test(${elisaqmltests_SOURCES} TEST_NAME "elisaqmltests" LINK_LIBRARIES Qt5::Core Qt5::Widgets Qt5::Test Qt5::QuickTest GUI) target_compile_definitions(elisaqmltests PRIVATE QUICK_TEST_SOURCE_DIR="${CMAKE_SOURCE_DIR}/autotests/qmltests") target_include_directories(elisaqmltests PRIVATE ${CMAKE_SOURCE_DIR}/src) endif() + +set(filescannerTest_SOURCES + filescannertest.cpp +) + +ecm_add_test(${filescannerTest_SOURCES} + TEST_NAME "filescannerTest" + LINK_LIBRARIES Qt5::Test elisaLib +) diff --git a/autotests/data/cover_art/artist1/album1/cover.jpg b/autotests/data/cover_art/artist1/album1/cover.jpg new file mode 100644 index 00000000..5dff3d50 Binary files /dev/null and b/autotests/data/cover_art/artist1/album1/cover.jpg differ diff --git a/autotests/data/cover_art/artist1/album2/album2.jpg b/autotests/data/cover_art/artist1/album2/album2.jpg new file mode 100644 index 00000000..5dff3d50 Binary files /dev/null and b/autotests/data/cover_art/artist1/album2/album2.jpg differ diff --git a/autotests/data/cover_art/artist1/album3/folder.jpg b/autotests/data/cover_art/artist1/album3/folder.jpg new file mode 100644 index 00000000..5dff3d50 Binary files /dev/null and b/autotests/data/cover_art/artist1/album3/folder.jpg differ diff --git a/autotests/data/cover_art/artist2/album1/Folder.png b/autotests/data/cover_art/artist2/album1/Folder.png new file mode 100644 index 00000000..36006e6e Binary files /dev/null and b/autotests/data/cover_art/artist2/album1/Folder.png differ diff --git a/autotests/data/cover_art/artist2/album2/Cover.png b/autotests/data/cover_art/artist2/album2/Cover.png new file mode 100644 index 00000000..36006e6e Binary files /dev/null and b/autotests/data/cover_art/artist2/album2/Cover.png differ diff --git a/autotests/data/cover_art/artist2/album3/Album3.png b/autotests/data/cover_art/artist2/album3/Album3.png new file mode 100644 index 00000000..36006e6e Binary files /dev/null and b/autotests/data/cover_art/artist2/album3/Album3.png differ diff --git a/autotests/data/cover_art/artist3/album1/front.jpg b/autotests/data/cover_art/artist3/album1/front.jpg new file mode 100644 index 00000000..5dff3d50 Binary files /dev/null and b/autotests/data/cover_art/artist3/album1/front.jpg differ diff --git a/autotests/data/cover_art/artist3/album2/Front.png b/autotests/data/cover_art/artist3/album2/Front.png new file mode 100644 index 00000000..36006e6e Binary files /dev/null and b/autotests/data/cover_art/artist3/album2/Front.png differ diff --git a/autotests/data/cover_art/artist3/album3/album_cover.png b/autotests/data/cover_art/artist3/album3/album_cover.png new file mode 100644 index 00000000..36006e6e Binary files /dev/null and b/autotests/data/cover_art/artist3/album3/album_cover.png differ diff --git a/autotests/data/cover_art/artist4/test.flac b/autotests/data/cover_art/artist4/test.flac new file mode 100644 index 00000000..15eafc5f Binary files /dev/null and b/autotests/data/cover_art/artist4/test.flac differ diff --git a/autotests/data/cover_art/artist4/test.mp3 b/autotests/data/cover_art/artist4/test.mp3 new file mode 100644 index 00000000..8c058808 Binary files /dev/null and b/autotests/data/cover_art/artist4/test.mp3 differ diff --git a/autotests/data/cover_art/artist4/test.ogg b/autotests/data/cover_art/artist4/test.ogg new file mode 100644 index 00000000..901fc00e Binary files /dev/null and b/autotests/data/cover_art/artist4/test.ogg differ diff --git a/autotests/filescannertest.cpp b/autotests/filescannertest.cpp new file mode 100644 index 00000000..dff1e496 --- /dev/null +++ b/autotests/filescannertest.cpp @@ -0,0 +1,119 @@ +/* + * Copyright 2018 Alexander Stippich + * + * This program is free software: you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + */ + +#include "musicaudiotrack.h" +#include "filescanner.h" +#include "config-upnp-qt.h" + +#include +#include +#include +#include +#include + +#include + +#include + +class FileScannerTest: public QObject +{ + Q_OBJECT + +public: + + QString createTrackUrl(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 testFindCoverInDirectory() + { + FileScanner fileScanner; + QVERIFY(!fileScanner.searchForCoverFile(mTestTracksForDirectory.at(0)).isEmpty()); + QVERIFY(!fileScanner.searchForCoverFile(mTestTracksForDirectory.at(1)).isEmpty()); + QVERIFY(!fileScanner.searchForCoverFile(mTestTracksForDirectory.at(2)).isEmpty()); + QVERIFY(!fileScanner.searchForCoverFile(mTestTracksForDirectory.at(3)).isEmpty()); + 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 loadCoverFromMetaData() + { + FileScanner fileScanner; + QVERIFY(fileScanner.checkEmbeddedCoverImage(mTestTracksForMetaData.at(0))); + QVERIFY(fileScanner.checkEmbeddedCoverImage(mTestTracksForMetaData.at(1))); + QVERIFY(fileScanner.checkEmbeddedCoverImage(mTestTracksForMetaData.at(2))); + } + + 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)); + } + } + void benchmarkCoverFromMetadata() + { + FileScanner fileScanner; + QBENCHMARK { + fileScanner.checkEmbeddedCoverImage(mTestTracksForMetaData.at(0)); + fileScanner.checkEmbeddedCoverImage(mTestTracksForMetaData.at(1)); + fileScanner.checkEmbeddedCoverImage(mTestTracksForMetaData.at(2)); + } + } + +}; + +QTEST_GUILESS_MAIN(FileScannerTest) + + +#include "filescannertest.moc"