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"