File indexing completed on 2024-05-19 04:36:17

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     QCOMPARE(mExportManager->formattedFilename(u"<h>"_s), u"8"_s);
0065     QCOMPARE(mExportManager->formattedFilename(u"<hh>"_s), u"08"_s);
0066     QCOMPARE(mExportManager->formattedFilename(u"<UnixTime>"_s), QString::number(timestamp.toSecsSinceEpoch()));
0067 }
0068 
0069 void FilenameTest::testWindowTitle()
0070 {
0071     mExportManager->setWindowTitle(u"Spectacle"_s);
0072     QCOMPARE(mExportManager->formattedFilename(u"<title>"_s), u"Spectacle"_s);
0073     QCOMPARE(mExportManager->formattedFilename(u"Before<title>After"_s), u"BeforeSpectacleAfter"_s);
0074     mExportManager->setWindowTitle({});
0075     // Empty String produces Screenshot
0076     QCOMPARE(mExportManager->formattedFilename(u"<title>"_s), u"Screenshot"_s);
0077     QCOMPARE(mExportManager->formattedFilename(u"Before<title>After"_s), u"BeforeAfter"_s);
0078     QCOMPARE(mExportManager->formattedFilename(u"Before_<title>_After"_s), u"Before_After"_s);
0079 }
0080 
0081 void FilenameTest::testNumbering()
0082 {
0083     QString BaseName = u"spectacle_test_" + QUuid::createUuid().toString();
0084     QCOMPARE(mExportManager->formattedFilename(BaseName + u"_<#>"_s), BaseName + u"_1"_s);
0085     QCOMPARE(mExportManager->formattedFilename(BaseName + u"_<##>"_s), BaseName + u"_01"_s);
0086     QCOMPARE(mExportManager->formattedFilename(BaseName + u"_<###>"_s), BaseName + u"_001"_s);
0087     QCOMPARE(mExportManager->formattedFilename(BaseName + u"_<####>"_s), BaseName + u"_0001"_s);
0088     QCOMPARE(mExportManager->formattedFilename(BaseName + u"_<#>_<##>_<###>"_s), BaseName + u"_1_01_001"_s);
0089 
0090     QFile file(QDir(mExportManager->defaultSaveLocation()).filePath(BaseName + u"_1.png"_s));
0091     file.open(QIODevice::WriteOnly);
0092     file.close();
0093     QCOMPARE(mExportManager->formattedFilename(BaseName + u"_<#>"_s), BaseName + u"_2"_s);
0094     file.remove();
0095     file.setFileName(QDir(mExportManager->defaultSaveLocation()).filePath(BaseName + u"_1_01_001"_s));
0096     file.open(QIODevice::WriteOnly);
0097     file.close();
0098     QCOMPARE(mExportManager->formattedFilename(BaseName + u"_<#>_<##>_<###>"_s), BaseName + u"_2_02_002"_s);
0099     file.remove();
0100 }
0101 
0102 void FilenameTest::testCombined()
0103 {
0104     mExportManager->setWindowTitle(u"Spectacle"_s);
0105     QCOMPARE(mExportManager->formattedFilename(u"App_<title>_Date_<yyyy><MM><dd>_Time_<hh>:<mm>:<ss><AP><notaplaceholder>"_s),
0106              u"App_Spectacle_Date_20190322_Time_08:43:25PM<notaplaceholder>"_s);
0107     mExportManager->setWindowTitle({});
0108     QCOMPARE(mExportManager->formattedFilename(u"App_<title>_Date_<yyyy><MM><dd>_Time_<hh>:<mm>:<ss><AP><notaplaceholder>"_s),
0109              u"App_Date_20190322_Time_08:43:25PM<notaplaceholder>"_s);
0110 }
0111 
0112 QTEST_GUILESS_MAIN(FilenameTest)
0113 
0114 #include "FilenameTest.moc"