diff --git a/apps/openmw_test_suite/misc/test_resourcehelpers.cpp b/apps/openmw_test_suite/misc/test_resourcehelpers.cpp index dda9ce4962..0db147d8a3 100644 --- a/apps/openmw_test_suite/misc/test_resourcehelpers.cpp +++ b/apps/openmw_test_suite/misc/test_resourcehelpers.cpp @@ -27,7 +27,7 @@ namespace { std::unique_ptr mVFS = TestingOpenMW::createTestVFS({}); EXPECT_EQ(correctSoundPath("sound\\foo.wav", mVFS.get()), "sound/foo.mp3"); - EXPECT_EQ(correctSoundPath("SOUND\\foo.WAV", mVFS.get()), "SOUND/foo.mp3"); + EXPECT_EQ(correctSoundPath("SOUND\\foo.WAV", mVFS.get()), "sound/foo.mp3"); } namespace diff --git a/apps/openmw_test_suite/testing_util.hpp b/apps/openmw_test_suite/testing_util.hpp index 6a965adc18..89fb7f9e73 100644 --- a/apps/openmw_test_suite/testing_util.hpp +++ b/apps/openmw_test_suite/testing_util.hpp @@ -7,6 +7,7 @@ #include #include #include +#include namespace TestingOpenMW { @@ -49,21 +50,25 @@ namespace TestingOpenMW struct VFSTestData : public VFS::Archive { - std::map mFiles; + std::map mFiles; - VFSTestData(std::map files) + VFSTestData(std::map files) : mFiles(std::move(files)) { } - void listResources(std::map& out) override { out = mFiles; } + void listResources(std::map& out) override + { + for (const auto& [key, value] : mFiles) + out.emplace(VFS::Path::normalizeFilename(key), value); + } bool contains(const std::string& file) const override { return mFiles.count(file) != 0; } std::string getDescription() const override { return "TestData"; } }; - inline std::unique_ptr createTestVFS(std::map files) + inline std::unique_ptr createTestVFS(std::map files) { auto vfs = std::make_unique(); vfs->addArchive(std::make_unique(std::move(files))); diff --git a/components/vfs/pathutil.hpp b/components/vfs/pathutil.hpp index b400dc3bd0..3ffc13b4e2 100644 --- a/components/vfs/pathutil.hpp +++ b/components/vfs/pathutil.hpp @@ -1,50 +1,57 @@ -#ifndef OPENMW_COMPONENTS_RESOURCE_PATH_H -#define OPENMW_COMPONENTS_RESOURCE_PATH_H - -#include - -#include -#include -#include - -namespace VFS::Path -{ - inline constexpr char normalize(char c) - { - return c == '\\' ? '/' : Misc::StringUtils::toLower(c); - } - - inline void normalizeFilenameInPlace(std::string& name) - { - for (char& ch : name) - ch = normalize(ch); - } - - /// Normalize the given filename, making slashes/backslashes consistent, and lower-casing. - [[nodiscard]] inline std::string normalizeFilename(std::string_view name) - { - std::string out(name); - normalizeFilenameInPlace(out); - return out; - } - - struct PathCharLess - { - bool operator()(char x, char y) const { return normalize(x) < normalize(y); } - }; - - inline bool pathLess(std::string_view x, std::string_view y) - { - return std::lexicographical_compare(x.begin(), x.end(), y.begin(), y.end(), PathCharLess()); - } - - inline bool pathEqual(std::string_view x, std::string_view y) - { - if (std::size(x) != std::size(y)) - return false; - return std::equal( - std::begin(x), std::end(x), std::begin(y), [](char l, char r) { return normalize(l) == normalize(r); }); - } -} - -#endif +#ifndef OPENMW_COMPONENTS_RESOURCE_PATH_H +#define OPENMW_COMPONENTS_RESOURCE_PATH_H + +#include + +#include +#include +#include + +namespace VFS::Path +{ + inline constexpr char normalize(char c) + { + return c == '\\' ? '/' : Misc::StringUtils::toLower(c); + } + + inline void normalizeFilenameInPlace(std::string& name) + { + for (char& ch : name) + ch = normalize(ch); + } + + /// Normalize the given filename, making slashes/backslashes consistent, and lower-casing. + [[nodiscard]] inline std::string normalizeFilename(std::string_view name) + { + std::string out(name); + normalizeFilenameInPlace(out); + return out; + } + + struct PathCharLess + { + bool operator()(char x, char y) const { return normalize(x) < normalize(y); } + }; + + inline bool pathLess(std::string_view x, std::string_view y) + { + return std::lexicographical_compare(x.begin(), x.end(), y.begin(), y.end(), PathCharLess()); + } + + inline bool pathEqual(std::string_view x, std::string_view y) + { + if (std::size(x) != std::size(y)) + return false; + return std::equal( + std::begin(x), std::end(x), std::begin(y), [](char l, char r) { return normalize(l) == normalize(r); }); + } + + struct PathLess + { + using is_transparent = void; + + bool operator()(std::string_view left, std::string_view right) const { return pathLess(left, right); } + }; +} + +#endif