File indexing completed on 2024-05-12 15:55:35
0001 // SPDX-FileCopyrightText: 2021 Johannes Zarl-Zierl <johannes@zarl-zierl.at> 0002 // 0003 // SPDX-License-Identifier: LicenseRef-KDE-Accepted-GPL 0004 0005 #include "TestFileNameUtil.h" 0006 0007 #include "FileName.h" 0008 #include "FileNameUtil.h" 0009 0010 #include <kpabase/SettingsData.h> 0011 0012 #include <QRegularExpression> 0013 #include <QUrl> 0014 0015 namespace 0016 { 0017 constexpr auto msgPreconditionFailed = "Precondition for test failed - please fix unit test!"; 0018 } 0019 0020 void KPATest::TestFileNameUtil::initTestCase() 0021 { 0022 QVERIFY2(m_tmpDir.isValid(), msgPreconditionFailed); 0023 Settings::SettingsData::setup(m_tmpDir.path(), m_uiDelegate); 0024 // qSetGlobalQHashSeed(0); 0025 } 0026 0027 void KPATest::TestFileNameUtil::stripEndingForwardSlash() 0028 { 0029 const auto emptyString = QString(); 0030 const auto absolutePath = QStringLiteral("/path/to/imageroot"); 0031 const auto slash = QStringLiteral("/"); 0032 0033 using Utilities::stripEndingForwardSlash; 0034 QCOMPARE(stripEndingForwardSlash(emptyString), emptyString); 0035 QCOMPARE(stripEndingForwardSlash(absolutePath), absolutePath); 0036 QCOMPARE(stripEndingForwardSlash(absolutePath + slash), absolutePath); 0037 // currently not implemented that way: 0038 // QCOMPARE(stripEndingForwardSlash(absolutePath + slash + slash), absolutePath); 0039 } 0040 0041 void KPATest::TestFileNameUtil::folderName() 0042 { 0043 const auto emptyString = QString(); 0044 const auto absolutePath = QStringLiteral("/path/to/imageroot"); 0045 const auto relativePath = QStringLiteral("dirname/otherdir"); 0046 const auto slash = QStringLiteral("/"); 0047 const auto filename = QStringLiteral("filename.jpg"); 0048 using Utilities::relativeFolderName; 0049 0050 QCOMPARE(relativeFolderName(emptyString), emptyString); 0051 QCOMPARE(relativeFolderName(absolutePath), QStringLiteral("/path/to")); 0052 QCOMPARE(relativeFolderName(absolutePath + slash), absolutePath); 0053 QCOMPARE(relativeFolderName(absolutePath + slash + filename), absolutePath); 0054 // currently not implemented that way: 0055 //QCOMPARE(relativeFolderName(absolutePath + slash + slash + filename), absolutePath); 0056 QCOMPARE(relativeFolderName(relativePath + slash), relativePath); 0057 QCOMPARE(relativeFolderName(relativePath + slash + filename), relativePath); 0058 } 0059 0060 void KPATest::TestFileNameUtil::fileNameFromUserData() 0061 { 0062 using Utilities::fileNameFromUserData; 0063 const auto emptyString = QString(); 0064 const auto emptyUrl = QUrl::fromLocalFile(emptyString).toString(); 0065 const auto absoluteOutsideFilePath = QStringLiteral("/external/path/to/image.jpg"); 0066 const auto absoluteOutsideUrl = QUrl::fromLocalFile(absoluteOutsideFilePath).toString(); 0067 QCOMPARE(fileNameFromUserData(emptyString), DB::FileName()); 0068 QCOMPARE(fileNameFromUserData(emptyUrl), DB::FileName()); 0069 const QRegularExpression imageRootWarning { QStringLiteral("Absolute filename is outside of image root:") }; 0070 QTest::ignoreMessage(QtWarningMsg, imageRootWarning); 0071 QCOMPARE(fileNameFromUserData(absoluteOutsideFilePath), DB::FileName()); 0072 QTest::ignoreMessage(QtWarningMsg, imageRootWarning); 0073 QCOMPARE(fileNameFromUserData(absoluteOutsideUrl), DB::FileName()); 0074 0075 const auto relativeFilePath1 = QStringLiteral("image.jpg"); 0076 const auto absoluteFilePath1 = m_tmpDir.filePath(relativeFilePath1); 0077 const auto absoluteUrl1 = QUrl::fromLocalFile(absoluteFilePath1).toString(); 0078 const auto relativeUrl1 = QUrl::fromLocalFile(relativeFilePath1).toString(); 0079 const auto fileName1 = DB::FileName::fromRelativePath(relativeFilePath1); 0080 QVERIFY(!fileName1.isNull()); 0081 QCOMPARE(fileName1.absolute(), absoluteFilePath1); 0082 QCOMPARE(fileName1.relative(), relativeFilePath1); 0083 QCOMPARE(fileNameFromUserData(relativeFilePath1), fileName1); 0084 QCOMPARE(fileNameFromUserData(absoluteFilePath1), fileName1); 0085 QCOMPARE(fileNameFromUserData(relativeUrl1), fileName1); 0086 QCOMPARE(fileNameFromUserData(absoluteUrl1), fileName1); 0087 0088 const auto relativeFilePath2 = QStringLiteral("subdir/image.jpg"); 0089 const auto absoluteFilePath2 = m_tmpDir.filePath(relativeFilePath2); 0090 const auto absoluteUrl2 = QUrl::fromLocalFile(absoluteFilePath2).toString(); 0091 const auto relativeUrl2 = QUrl::fromLocalFile(relativeFilePath2).toString(); 0092 const auto fileName2 = DB::FileName::fromRelativePath(relativeFilePath2); 0093 QVERIFY(!fileName2.isNull()); 0094 QCOMPARE(fileName2.absolute(), absoluteFilePath2); 0095 QCOMPARE(fileName2.relative(), relativeFilePath2); 0096 QCOMPARE(fileNameFromUserData(relativeFilePath2), fileName2); 0097 QCOMPARE(fileNameFromUserData(absoluteFilePath2), fileName2); 0098 QCOMPARE(fileNameFromUserData(relativeUrl2), fileName2); 0099 QCOMPARE(fileNameFromUserData(absoluteUrl2), fileName2); 0100 0101 const auto nonlocalUrl = QStringLiteral("https://example.com/image.jpg"); 0102 QVERIFY(fileNameFromUserData(nonlocalUrl).isNull()); 0103 } 0104 0105 //void KPATest::TestFileNameUtil::cleanupTestCase() 0106 //{ 0107 //} 0108 0109 QTEST_MAIN(KPATest::TestFileNameUtil) 0110 0111 // vi:expandtab:tabstop=4 shiftwidth=4: 0112 0113 #include "moc_TestFileNameUtil.cpp"