include/unotest/directories.hxx | 42 ++++++++++++++++++++++++++++++------- sc/qa/unit/filters-test.cxx | 21 +++++------------- test/source/unoapi_test.cxx | 4 +-- unotest/source/cpp/directories.cxx | 20 ----------------- 4 files changed, 43 insertions(+), 44 deletions(-)
New commits: commit 3d80b47851ad9e3dfa48374efaac38ba8e45bea1 Author: Mike Kaganski <mike.kagan...@collabora.com> AuthorDate: Tue Jul 15 23:32:07 2025 +0500 Commit: Mike Kaganski <mike.kagan...@collabora.com> CommitDate: Wed Jul 16 07:14:22 2025 +0200 Avoid double slashes in unit test paths / URLs Like file:///C:/lo/core//sw/qa/extras/rtfexport/data//tabs.rtf Reimplement Directories::get{URL,Path}From{Src,Workdir} to check and insert missing / remove excessive slashes as needed. Change-Id: Ibd3657b0557bf1712c2de9ac74db0977754a2ed9 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/187932 Reviewed-by: Mike Kaganski <mike.kagan...@collabora.com> Tested-by: Jenkins diff --git a/include/unotest/directories.hxx b/include/unotest/directories.hxx index efdcd93a6acf..31bc84c349ce 100644 --- a/include/unotest/directories.hxx +++ b/include/unotest/directories.hxx @@ -15,6 +15,7 @@ #include <string_view> #include <rtl/ustring.hxx> +#include <rtl/ustrbuf.hxx> #include <unotest/detail/unotestdllapi.hxx> namespace test @@ -27,23 +28,50 @@ private: OUString m_aWorkdirRootURL; OUString m_aWorkdirRootPath; + static void concatEnsureSeparator(OUStringBuffer& buf, std::u16string_view s) + { + while (s.starts_with('/')) + s = s.substr(1); + assert(!s.empty()); + if (!OUString::unacquired(buf).endsWith("/")) + buf.append("/"); + buf.append(s); + } + public: Directories(); - const OUString& getSrcRootURL() const { return m_aSrcRootURL; } - const OUString& getSrcRootPath() const { return m_aSrcRootPath; } - // return a URL to a given path from the source directory - OUString getURLFromSrc(std::u16string_view rPath) const; + template <typename... Segments> OUString getURLFromSrc(Segments... segments) const + { + OUStringBuffer buf(m_aSrcRootURL); + (..., concatEnsureSeparator(buf, segments)); + return buf.makeStringAndClear(); + } // return a Path to a given path from the source directory - OUString getPathFromSrc(std::u16string_view rPath) const; + template <typename... Segments> OUString getPathFromSrc(Segments... segments) const + { + OUStringBuffer buf(m_aSrcRootPath); + (..., concatEnsureSeparator(buf, segments)); + return buf.makeStringAndClear(); + } // return a URL to a given path from the workdir directory - OUString getURLFromWorkdir(std::u16string_view rPath) const; + OUString getURLFromWorkdir(std::u16string_view rPath) const + { + OUStringBuffer buf(m_aWorkdirRootURL); + concatEnsureSeparator(buf, rPath); + return buf.makeStringAndClear(); + } // return a Path to a given path from the workdir directory - OUString getPathFromWorkdir(std::u16string_view rPath) const; + OUString getPathFromWorkdir(std::u16string_view rPath) const + { + OUStringBuffer buf(m_aWorkdirRootPath); + concatEnsureSeparator(buf, rPath); + return buf.makeStringAndClear(); + } }; } diff --git a/sc/qa/unit/filters-test.cxx b/sc/qa/unit/filters-test.cxx index 933b48ceba8f..ed9c5ef3ff66 100644 --- a/sc/qa/unit/filters-test.cxx +++ b/sc/qa/unit/filters-test.cxx @@ -51,20 +51,13 @@ public: CPPUNIT_TEST_SUITE_END(); private: - void createFileURL(std::u16string_view aFileBase, std::u16string_view aFileExtension, OUString& rFilePath); + OUString createFileURL(std::u16string_view aFileName); }; -void ScFiltersTest::createFileURL( - std::u16string_view aFileBase, std::u16string_view aFileExtension, OUString& rFilePath) +OUString ScFiltersTest::createFileURL(std::u16string_view aFileName) { - // aFileBase may contain multiple segments, so use - // GetNewAbsURL instead of insertName for them: - INetURLObject url(m_directories.getSrcRootURL()); - url.setFinalSlash(); - url.GetNewAbsURL(u"sc/qa/unit/data"_ustr, &url); - url.insertName(aFileExtension, true); - url.GetNewAbsURL(OUString::Concat(aFileBase) + aFileExtension, &url); - rFilePath = url.GetMainURL(INetURLObject::DecodeMechanism::NONE); + std::u16string_view aFileExtension = aFileName.substr(aFileName.find_last_of('.') + 1); + return m_directories.getURLFromSrc(u"sc/qa/unit/data", aFileExtension, aFileName); } @@ -116,8 +109,7 @@ void ScFiltersTest::testCVEs() void ScFiltersTest::testContentofz9704() { - OUString aFileName; - createFileURL(u"ofz9704.", u"123", aFileName); + OUString aFileName = createFileURL(u"ofz9704.123"); SvFileStream aFileStream(aFileName, StreamMode::READ); TestImportWKS(aFileStream); } @@ -129,8 +121,7 @@ void ScFiltersTest::testTdf90299() const OUString aSavedFileURL = utl::CreateTempURL(&aTmpDirectory1URL); OUString aReferencedFileURL; - OUString aReferencingFileURL; - createFileURL(u"tdf90299.", u"xls", aReferencingFileURL); + OUString aReferencingFileURL = createFileURL(u"tdf90299.xls"); auto eError = osl::File::copy(aReferencingFileURL, aTmpDirectory1URL + "/tdf90299.xls"); CPPUNIT_ASSERT_EQUAL(osl::File::E_None, eError); diff --git a/test/source/unoapi_test.cxx b/test/source/unoapi_test.cxx index 3dcaa35b699e..b833d96a7dc4 100644 --- a/test/source/unoapi_test.cxx +++ b/test/source/unoapi_test.cxx @@ -60,12 +60,12 @@ void UnoApiTest::tearDown() OUString UnoApiTest::createFileURL(std::u16string_view aFileBase) { - return m_directories.getSrcRootURL() + m_aBaseString + "/" + aFileBase; + return m_directories.getURLFromSrc(m_aBaseString, aFileBase); } OUString UnoApiTest::createFilePath(std::u16string_view aFileBase) { - return m_directories.getSrcRootPath() + "/" + m_aBaseString + "/" + aFileBase; + return m_directories.getPathFromSrc(m_aBaseString, aFileBase); } void UnoApiTest::setTestInteractionHandler(const char* pPassword, diff --git a/unotest/source/cpp/directories.cxx b/unotest/source/cpp/directories.cxx index 93bcd4daed6d..5d2c31929458 100644 --- a/unotest/source/cpp/directories.cxx +++ b/unotest/source/cpp/directories.cxx @@ -43,24 +43,4 @@ test::Directories::Directories() m_aWorkdirRootURL = getFileURLFromSystemPath(m_aWorkdirRootPath); } -OUString test::Directories::getURLFromSrc(std::u16string_view rPath) const -{ - return m_aSrcRootURL + rPath; -} - -OUString test::Directories::getPathFromSrc(std::u16string_view rPath) const -{ - return m_aSrcRootPath + rPath; -} - -OUString test::Directories::getURLFromWorkdir(std::u16string_view rPath) const -{ - return m_aWorkdirRootURL + rPath; -} - -OUString test::Directories::getPathFromWorkdir(std::u16string_view rPath) const -{ - return m_aWorkdirRootPath + rPath; -} - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */