1 /*
2  *  SPDX-License-Identifier: GPL-2.0-only OR LGPL-2.0-only OR LicenseRef-KDE-Accepted-GPL
3  */
4 
5 #include <QDir>
6 #include <QFile>
7 #include <QTest>
8 #include <QUuid>
9 
10 #include "ExportManager.h"
11 #include "SpectacleCommon.h"
12 
13 class FilenameTest : public QObject
14 {
15     Q_OBJECT
16 
17 private:
18     ExportManager *mExportManager;
19 
20 private Q_SLOTS:
21 
22     void initTestCase();
23     void testStrings();
24     void testDateTokens();
25     void testWindowTitle();
26     void testNumbering();
27     void testCombined();
28 };
29 
initTestCase()30 void FilenameTest::initTestCase()
31 {
32     mExportManager = ExportManager::instance();
33     mExportManager->setTimestamp(QDateTime::fromString(QStringLiteral("2019-03-22T10:43:25"), Qt::ISODate));
34     mExportManager->setWindowTitle(QStringLiteral("Spectacle"));
35 }
36 
testStrings()37 void FilenameTest::testStrings()
38 {
39     QCOMPARE(mExportManager->formatFilename(QStringLiteral("Screenshot")), QStringLiteral("Screenshot"));
40     // empty string produces Screenshot per default
41     QCOMPARE(mExportManager->formatFilename(QString()), QStringLiteral("Screenshot"));
42     // not a placeholder
43     QCOMPARE(mExportManager->formatFilename(QStringLiteral("%")), QStringLiteral("%"));
44     QCOMPARE(mExportManager->formatFilename(QStringLiteral("%K")), QStringLiteral("%K"));
45 }
46 
testDateTokens()47 void FilenameTest::testDateTokens()
48 {
49     QCOMPARE(mExportManager->formatFilename(QStringLiteral("%Y")), QStringLiteral("2019"));
50     QCOMPARE(mExportManager->formatFilename(QStringLiteral("%y")), QStringLiteral("19"));
51     QCOMPARE(mExportManager->formatFilename(QStringLiteral("%M")), QStringLiteral("03"));
52     QCOMPARE(mExportManager->formatFilename(QStringLiteral("%D")), QStringLiteral("22"));
53     QCOMPARE(mExportManager->formatFilename(QStringLiteral("%H")), QStringLiteral("10"));
54     QCOMPARE(mExportManager->formatFilename(QStringLiteral("%m")), QStringLiteral("43"));
55     QCOMPARE(mExportManager->formatFilename(QStringLiteral("%S")), QStringLiteral("25"));
56 }
57 
testWindowTitle()58 void FilenameTest::testWindowTitle()
59 {
60     mExportManager->setCaptureMode(Spectacle::CaptureMode::ActiveWindow);
61     QCOMPARE(mExportManager->formatFilename(QStringLiteral("%T")), QStringLiteral("Spectacle"));
62     QCOMPARE(mExportManager->formatFilename(QStringLiteral("Before%TAfter")), QStringLiteral("BeforeSpectacleAfter"));
63     mExportManager->setCaptureMode(Spectacle::CaptureMode::AllScreens);
64     // Empty String produces Screenshot
65     QCOMPARE(mExportManager->formatFilename(QStringLiteral("%T")), QStringLiteral("Screenshot"));
66     QCOMPARE(mExportManager->formatFilename(QStringLiteral("Before%TAfter")), QStringLiteral("BeforeAfter"));
67     QCOMPARE(mExportManager->formatFilename(QStringLiteral("Before_%T_After")), QStringLiteral("Before_After"));
68 }
69 
testNumbering()70 void FilenameTest::testNumbering()
71 {
72     QString BaseName = QLatin1String("spectacle_test_") + QUuid::createUuid().toString();
73     QCOMPARE(mExportManager->formatFilename(BaseName + QStringLiteral("_%d")), BaseName + QStringLiteral("_1"));
74     QCOMPARE(mExportManager->formatFilename(BaseName + QStringLiteral("_%1d")), BaseName + QStringLiteral("_1"));
75     QCOMPARE(mExportManager->formatFilename(BaseName + QStringLiteral("_%2d")), BaseName + QStringLiteral("_01"));
76     QCOMPARE(mExportManager->formatFilename(BaseName + QStringLiteral("_%3d")), BaseName + QStringLiteral("_001"));
77     QCOMPARE(mExportManager->formatFilename(BaseName + QStringLiteral("_%4d")), BaseName + QStringLiteral("_0001"));
78     QCOMPARE(mExportManager->formatFilename(BaseName + QStringLiteral("_%d_%2d_%3d")), BaseName + QStringLiteral("_1_01_001"));
79 
80     QFile file(QDir(mExportManager->defaultSaveLocation()).filePath(BaseName + QStringLiteral("_1.png")));
81     file.open(QIODevice::WriteOnly);
82     file.close();
83     QCOMPARE(mExportManager->formatFilename(BaseName + QStringLiteral("_%d")), BaseName + QStringLiteral("_2"));
84     file.remove();
85     file.setFileName(QDir(mExportManager->defaultSaveLocation()).filePath(BaseName + QStringLiteral("_1_01_001")));
86     file.open(QIODevice::WriteOnly);
87     file.close();
88     QCOMPARE(mExportManager->formatFilename(BaseName + QStringLiteral("_%d_%2d_%3d")), BaseName + QStringLiteral("_2_02_002"));
89     file.remove();
90 }
91 
testCombined()92 void FilenameTest::testCombined()
93 {
94     mExportManager->setCaptureMode(Spectacle::CaptureMode::ActiveWindow);
95     QCOMPARE(mExportManager->formatFilename(QStringLiteral("App_%T_Date_%Y%M%D_Time_%H:%m:%S%F")),
96              QStringLiteral("App_Spectacle_Date_20190322_Time_10:43:25%F"));
97     mExportManager->setCaptureMode(Spectacle::CaptureMode::AllScreens);
98     QCOMPARE(mExportManager->formatFilename(QStringLiteral("App_%T_Date_%Y%M%D_Time_%H:%m:%S%F")), QStringLiteral("App_Date_20190322_Time_10:43:25%F"));
99 }
100 
101 QTEST_GUILESS_MAIN(FilenameTest)
102 
103 #include "FilenameTest.moc"
104