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"