Common/FileSystem: Add IsAbsolutePath() and tests
This commit is contained in:
parent
d46c104d1b
commit
266d70c629
|
@ -1,6 +1,7 @@
|
||||||
add_executable(common-tests
|
add_executable(common-tests
|
||||||
bitutils_tests.cpp
|
bitutils_tests.cpp
|
||||||
event_tests.cpp
|
event_tests.cpp
|
||||||
|
file_system_tests.cpp
|
||||||
rectangle_tests.cpp
|
rectangle_tests.cpp
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -46,6 +46,7 @@
|
||||||
<ClCompile Include="..\..\dep\googletest\src\gtest_main.cc" />
|
<ClCompile Include="..\..\dep\googletest\src\gtest_main.cc" />
|
||||||
<ClCompile Include="bitutils_tests.cpp" />
|
<ClCompile Include="bitutils_tests.cpp" />
|
||||||
<ClCompile Include="event_tests.cpp" />
|
<ClCompile Include="event_tests.cpp" />
|
||||||
|
<ClCompile Include="file_system_tests.cpp" />
|
||||||
<ClCompile Include="rectangle_tests.cpp" />
|
<ClCompile Include="rectangle_tests.cpp" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<PropertyGroup Label="Globals">
|
<PropertyGroup Label="Globals">
|
||||||
|
|
|
@ -5,5 +5,6 @@
|
||||||
<ClCompile Include="rectangle_tests.cpp" />
|
<ClCompile Include="rectangle_tests.cpp" />
|
||||||
<ClCompile Include="event_tests.cpp" />
|
<ClCompile Include="event_tests.cpp" />
|
||||||
<ClCompile Include="bitutils_tests.cpp" />
|
<ClCompile Include="bitutils_tests.cpp" />
|
||||||
|
<ClCompile Include="file_system_tests.cpp" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
|
@ -0,0 +1,25 @@
|
||||||
|
#include "common/file_system.h"
|
||||||
|
#include <gtest/gtest.h>
|
||||||
|
|
||||||
|
TEST(FileSystem, IsAbsolutePath)
|
||||||
|
{
|
||||||
|
#ifdef WIN32
|
||||||
|
ASSERT_TRUE(FileSystem::IsAbsolutePath("C:\\"));
|
||||||
|
ASSERT_TRUE(FileSystem::IsAbsolutePath("C:\\Path"));
|
||||||
|
ASSERT_TRUE(FileSystem::IsAbsolutePath("C:\\Path\\Subdirectory"));
|
||||||
|
ASSERT_TRUE(FileSystem::IsAbsolutePath("C:/"));
|
||||||
|
ASSERT_TRUE(FileSystem::IsAbsolutePath("C:/Path"));
|
||||||
|
ASSERT_TRUE(FileSystem::IsAbsolutePath("C:/Path/Subdirectory"));
|
||||||
|
ASSERT_FALSE(FileSystem::IsAbsolutePath(""));
|
||||||
|
ASSERT_FALSE(FileSystem::IsAbsolutePath("C:"));
|
||||||
|
ASSERT_FALSE(FileSystem::IsAbsolutePath("Path"));
|
||||||
|
ASSERT_FALSE(FileSystem::IsAbsolutePath("Path/Subdirectory"));
|
||||||
|
#else
|
||||||
|
ASSERT_TRUE(FileSystem::IsAbsolutePath("/"));
|
||||||
|
ASSERT_TRUE(FileSystem::IsAbsolutePath("/path"));
|
||||||
|
ASSERT_TRUE(FileSystem::IsAbsolutePath("/path/subdirectory"));
|
||||||
|
ASSERT_FALSE(FileSystem::IsAbsolutePath(""));
|
||||||
|
ASSERT_FALSE(FileSystem::IsAbsolutePath("path"));
|
||||||
|
ASSERT_FALSE(FileSystem::IsAbsolutePath("path/subdirectory"));
|
||||||
|
#endif
|
||||||
|
}
|
|
@ -230,6 +230,16 @@ void SanitizeFileName(String& Destination, bool StripSlashes /* = true */)
|
||||||
return SanitizeFileName(Destination, Destination, StripSlashes);
|
return SanitizeFileName(Destination, Destination, StripSlashes);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool IsAbsolutePath(const std::string_view& path)
|
||||||
|
{
|
||||||
|
#ifdef WIN32
|
||||||
|
return (path.length() >= 3 && ((path[0] >= 'A' && path[0] <= 'Z') || (path[0] >= 'a' && path[0] <= 'z')) &&
|
||||||
|
path[1] == ':' && (path[2] == '/' || path[2] == '\\'));
|
||||||
|
#else
|
||||||
|
return (path.length() >= 1 && path[0] == '/');
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
std::string ReplaceExtension(std::string_view path, std::string_view new_extension)
|
std::string ReplaceExtension(std::string_view path, std::string_view new_extension)
|
||||||
{
|
{
|
||||||
std::string_view::size_type pos = path.rfind('.');
|
std::string_view::size_type pos = path.rfind('.');
|
||||||
|
|
|
@ -137,6 +137,9 @@ void SanitizeFileName(char* Destination, u32 cbDestination, const char* FileName
|
||||||
void SanitizeFileName(String& Destination, const char* FileName, bool StripSlashes = true);
|
void SanitizeFileName(String& Destination, const char* FileName, bool StripSlashes = true);
|
||||||
void SanitizeFileName(String& Destination, bool StripSlashes = true);
|
void SanitizeFileName(String& Destination, bool StripSlashes = true);
|
||||||
|
|
||||||
|
/// Returns true if the specified path is an absolute path (C:\Path on Windows or /path on Unix).
|
||||||
|
bool IsAbsolutePath(const std::string_view& path);
|
||||||
|
|
||||||
/// Replaces the extension of a filename with another.
|
/// Replaces the extension of a filename with another.
|
||||||
std::string ReplaceExtension(std::string_view path, std::string_view new_extension);
|
std::string ReplaceExtension(std::string_view path, std::string_view new_extension);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue