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"