File indexing completed on 2024-05-12 08:34:16

0001 /*
0002  *  SPDX-License-Identifier: GPL-2.0-only OR LGPL-2.0-only OR LicenseRef-KDE-Accepted-GPL
0003  */
0004 
0005 #include <QDir>
0006 #include <QFile>
0007 #include <QLocale>
0008 #include <QTest>
0009 #include <QUuid>
0010 
0011 #include "ExportManager.h"
0012 #include "CaptureModeModel.h"
0013 
0014 using namespace Qt::StringLiterals;
0015 
0016 class FilenameTest : public QObject
0017 {
0018     Q_OBJECT
0019 
0020 private:
0021     ExportManager *mExportManager;
0022     QDateTime timestamp;
0023 
0024 private Q_SLOTS:
0025 
0026     void initTestCase();
0027     void testStrings();
0028     void testDateTokens();
0029     void testWindowTitle();
0030     void testNumbering();
0031     void testCombined();
0032 };
0033 
0034 void FilenameTest::initTestCase()
0035 {
0036     mExportManager = ExportManager::instance();
0037     timestamp = QDateTime::fromString(u"2019-03-22T20:43:25Z"_s, Qt::ISODate);
0038     mExportManager->setTimestamp(timestamp);
0039     mExportManager->setWindowTitle(u"Spectacle"_s);
0040 }
0041 
0042 void FilenameTest::testStrings()
0043 {
0044     QCOMPARE(mExportManager->formattedFilename(u"Screenshot"_s), u"Screenshot"_s);
0045     // empty string produces Screenshot per default
0046     QCOMPARE(mExportManager->formattedFilename({}), u"Screenshot"_s);
0047     // not a placeholder
0048     QCOMPARE(mExportManager->formattedFilename(u"<"_s), u"<"_s);
0049     QCOMPARE(mExportManager->formattedFilename(u">"_s), u">"_s);
0050     QCOMPARE(mExportManager->formattedFilename(u"<>"_s), u"<>"_s);
0051     QCOMPARE(mExportManager->formattedFilename(u"<notaplaceholder>"_s), u"<notaplaceholder>"_s);
0052 }
0053 
0054 void FilenameTest::testDateTokens()
0055 {
0056     const auto &placeholders = mExportManager->filenamePlaceholders;
0057     const auto &locale = QLocale::system();
0058     for (auto it = placeholders.cbegin(); it != placeholders.cend(); ++it) {
0059         using Flag = ExportManager::Placeholder::Flag;
0060         if (it->flags.testFlag(Flag::QDateTime)) {
0061             QCOMPARE(mExportManager->formattedFilename(it->plainKey), locale.toString(timestamp, it->baseKey));
0062         }
0063     }
0064 }
0065 
0066 void FilenameTest::testWindowTitle()
0067 {
0068     mExportManager->setWindowTitle(u"Spectacle"_s);
0069     QCOMPARE(mExportManager->formattedFilename(u"<title>"_s), u"Spectacle"_s);
0070     QCOMPARE(mExportManager->formattedFilename(u"Before<title>After"_s), u"BeforeSpectacleAfter"_s);
0071     mExportManager->setWindowTitle({});
0072     // Empty String produces Screenshot
0073     QCOMPARE(mExportManager->formattedFilename(u"<title>"_s), u"Screenshot"_s);
0074     QCOMPARE(mExportManager->formattedFilename(u"Before<title>After"_s), u"BeforeAfter"_s);
0075     QCOMPARE(mExportManager->formattedFilename(u"Before_<title>_After"_s), u"Before_After"_s);
0076 }
0077 
0078 void FilenameTest::testNumbering()
0079 {
0080     QString BaseName = u"spectacle_test_" + QUuid::createUuid().toString();
0081     QCOMPARE(mExportManager->formattedFilename(BaseName + u"_<#>"_s), BaseName + u"_1"_s);
0082     QCOMPARE(mExportManager->formattedFilename(BaseName + u"_<##>"_s), BaseName + u"_01"_s);
0083     QCOMPARE(mExportManager->formattedFilename(BaseName + u"_<###>"_s), BaseName + u"_001"_s);
0084     QCOMPARE(mExportManager->formattedFilename(BaseName + u"_<####>"_s), BaseName + u"_0001"_s);
0085     QCOMPARE(mExportManager->formattedFilename(BaseName + u"_<#>_<##>_<###>"_s), BaseName + u"_1_01_001"_s);
0086 
0087     QFile file(QDir(mExportManager->defaultSaveLocation()).filePath(BaseName + u"_1.png"_s));
0088     file.open(QIODevice::WriteOnly);
0089     file.close();
0090     QCOMPARE(mExportManager->formattedFilename(BaseName + u"_<#>"_s), BaseName + u"_2"_s);
0091     file.remove();
0092     file.setFileName(QDir(mExportManager->defaultSaveLocation()).filePath(BaseName + u"_1_01_001"_s));
0093     file.open(QIODevice::WriteOnly);
0094     file.close();
0095     QCOMPARE(mExportManager->formattedFilename(BaseName + u"_<#>_<##>_<###>"_s), BaseName + u"_2_02_002"_s);
0096     file.remove();
0097 }
0098 
0099 void FilenameTest::testCombined()
0100 {
0101     mExportManager->setWindowTitle(u"Spectacle"_s);
0102     QCOMPARE(mExportManager->formattedFilename(u"App_<title>_Date_<yyyy><MM><dd>_Time_<HH>:<mm>:<ss><notaplaceholder>"_s),
0103              u"App_Spectacle_Date_20190322_Time_20:43:25<notaplaceholder>"_s);
0104     mExportManager->setWindowTitle({});
0105     QCOMPARE(mExportManager->formattedFilename(u"App_<title>_Date_<yyyy><MM><dd>_Time_<HH>:<mm>:<ss><notaplaceholder>"_s),
0106              u"App_Date_20190322_Time_20:43:25<notaplaceholder>"_s);
0107 }
0108 
0109 QTEST_GUILESS_MAIN(FilenameTest)
0110 
0111 #include "FilenameTest.moc"