diff --git a/CMakeLists.txt b/CMakeLists.txt --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -32,6 +32,7 @@ include(ECMSetupVersion) include(FeatureSummary) include(ECMQtDeclareLoggingCategory) +include(ECMAddTests) find_package( Qt5 ${QT_MIN_VERSION} CONFIG REQUIRED @@ -41,6 +42,7 @@ DBus PrintSupport Quick + Test ) find_package( @@ -106,6 +108,7 @@ add_subdirectory(desktop) add_subdirectory(icons) add_subdirectory(doc) +add_subdirectory(tests) install( FILES spectacle.categories DESTINATION ${KDE_INSTALL_CONFDIR} ) # summaries diff --git a/src/ExportManager.h b/src/ExportManager.h --- a/src/ExportManager.h +++ b/src/ExportManager.h @@ -63,6 +63,7 @@ void setPixmap(const QPixmap &pixmap); QPixmap pixmap() const; void updatePixmapTimestamp(); + void setTimestamp(const QDateTime ×tamp); void setWindowTitle(const QString &windowTitle); QString windowTitle() const; ImageGrabber::GrabMode grabMode() const; diff --git a/src/ExportManager.cpp b/src/ExportManager.cpp --- a/src/ExportManager.cpp +++ b/src/ExportManager.cpp @@ -109,6 +109,11 @@ mPixmapTimestamp = QDateTime::currentDateTime(); } +void ExportManager::setTimestamp(const QDateTime ×tamp) +{ + mPixmapTimestamp = timestamp; +} + // native file save helpers QString ExportManager::defaultSaveLocation() const diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt new file mode 100644 --- /dev/null +++ b/tests/CMakeLists.txt @@ -0,0 +1,9 @@ +include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../src) +include_directories(${CMAKE_CURRENT_BINARY_DIR}) + +ecm_add_test(FilenameTest.cpp + ../src/ExportManager.cpp ../src/SpectacleConfig.cpp ../src/PlatformBackends/ImageGrabber.cpp + TEST_NAME "filename_test" + LINK_LIBRARIES Qt5::Test + Qt5::PrintSupport KF5::I18n KF5::ConfigCore KF5::KIOCore KF5::WindowSystem +) diff --git a/tests/FilenameTest.cpp b/tests/FilenameTest.cpp new file mode 100644 --- /dev/null +++ b/tests/FilenameTest.cpp @@ -0,0 +1,91 @@ +#include +#include +#include +#include + +#include "ExportManager.h" + +class FilenameTest : public QObject +{ + Q_OBJECT +private: + ExportManager* em; +private Q_SLOTS: + void initTestCase(); + void testStrings(); + void testDateTokens(); + void testWindowTitle(); + void testNumbering(); + void testCombined(); +}; + +void FilenameTest::initTestCase() +{ + em = ExportManager::instance(); + em->setTimestamp(QDateTime::fromString(QStringLiteral("2019-03-22T10:43:25"), Qt::ISODate)); + em->setWindowTitle(QStringLiteral("Spectacle")); +} + +void FilenameTest::testStrings() +{ + QCOMPARE(em->formatFilename(QStringLiteral("Screenshot")), QStringLiteral("Screenshot")); + // empty string produces Screenshot per default + QCOMPARE(em->formatFilename(QStringLiteral("")), QStringLiteral("Screenshot")); + // not a placeholder + QCOMPARE(em->formatFilename(QStringLiteral("%")), QStringLiteral("%")); + QCOMPARE(em->formatFilename(QStringLiteral("%K")), QStringLiteral("%K")); +} + +void FilenameTest::testDateTokens() +{ + QCOMPARE(em->formatFilename(QStringLiteral("%Y")), QStringLiteral("2019")); + QCOMPARE(em->formatFilename(QStringLiteral("%y")), QStringLiteral("19")); + QCOMPARE(em->formatFilename(QStringLiteral("%M")), QStringLiteral("03")); + QCOMPARE(em->formatFilename(QStringLiteral("%D")), QStringLiteral("22")); + QCOMPARE(em->formatFilename(QStringLiteral("%H")), QStringLiteral("10")); + QCOMPARE(em->formatFilename(QStringLiteral("%m")), QStringLiteral("43")); + QCOMPARE(em->formatFilename(QStringLiteral("%S")), QStringLiteral("25")); +} + +void FilenameTest::testWindowTitle() +{ + em->setGrabMode(ImageGrabber::ActiveWindow); + QCOMPARE(em->formatFilename(QStringLiteral("%T")), QStringLiteral("Spectacle")); + QCOMPARE(em->formatFilename(QStringLiteral("Before%TAfter")), + QStringLiteral("BeforeSpectacleAfter")); + em->setGrabMode(ImageGrabber::FullScreen); + //Empty String produces Screenshot + QCOMPARE(em->formatFilename(QStringLiteral("%T")), QStringLiteral("Screenshot")); + QCOMPARE(em->formatFilename(QStringLiteral("Before%TAfter")), QStringLiteral("BeforeAfter")); + QCOMPARE(em->formatFilename(QStringLiteral("Before_%T_After")), QStringLiteral("Before_After")); +} + +void FilenameTest::testNumbering() +{ + QString baseName = QStringLiteral("spectacle_test_")+ QUuid::createUuid().toString(); + QCOMPARE(em->formatFilename(baseName+QStringLiteral("_%d")), baseName+QStringLiteral("_1")); + QCOMPARE(em->formatFilename(baseName+QStringLiteral("_%1d")), baseName+QStringLiteral("_1")); + QCOMPARE(em->formatFilename(baseName+QStringLiteral("_%2d")), baseName+QStringLiteral("_01")); + QCOMPARE(em->formatFilename(baseName+QStringLiteral("_%3d")), baseName+QStringLiteral("_001")); + QCOMPARE(em->formatFilename(baseName+QStringLiteral("_%4d")), baseName+QStringLiteral("_0001")); + QCOMPARE(em->formatFilename(baseName+QStringLiteral("_%d_%2d_%3d")), + baseName+QStringLiteral("_1_01_001")); + QFile file(QDir(em->defaultSaveLocation()).filePath(baseName + QStringLiteral("_1.png"))); + file.open(QIODevice::WriteOnly); + QCOMPARE(em->formatFilename(baseName+QStringLiteral("_%d")), baseName+QStringLiteral("_2")); + file.remove(); +} + +void FilenameTest::testCombined() +{ + em->setGrabMode(ImageGrabber::ActiveWindow); + QCOMPARE(em->formatFilename(QStringLiteral("App_%T_Date_%Y%M%D_Time_%H:%m:%S%F")), + QStringLiteral("App_Spectacle_Date_20190322_Time_10:43:25%F")); + em->setGrabMode(ImageGrabber::FullScreen); + QCOMPARE(em->formatFilename(QStringLiteral("App_%T_Date_%Y%M%D_Time_%H:%m:%S%F")), + QStringLiteral("App_Date_20190322_Time_10:43:25%F")); +} + +QTEST_MAIN(FilenameTest) + +#include "FilenameTest.moc"