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