Add StringUtils tests and Paths test and fix detected problem with rooted path starting with ./
This commit is contained in:
@@ -336,7 +336,7 @@ void StringUtils::PathRemoveRelativeParts(String& path)
|
||||
Array<String> components;
|
||||
path.Split(TEXT('/'), components);
|
||||
|
||||
Array<String> stack;
|
||||
Array<String, InlinedAllocation<16>> stack;
|
||||
for (auto& bit : components)
|
||||
{
|
||||
if (bit == TEXT(".."))
|
||||
@@ -365,7 +365,7 @@ void StringUtils::PathRemoveRelativeParts(String& path)
|
||||
}
|
||||
}
|
||||
|
||||
const bool isRooted = path.StartsWith(TEXT('/'));
|
||||
const bool isRooted = path.StartsWith(TEXT('/')) || (path.Length() >= 2 && path[0] == '.' && path[1] == '/');
|
||||
path.Clear();
|
||||
for (auto& e : stack)
|
||||
path /= e;
|
||||
|
||||
@@ -0,0 +1,63 @@
|
||||
// Copyright (c) 2012-2022 Wojciech Figat. All rights reserved.
|
||||
|
||||
#include "Engine/Core/Types/String.h"
|
||||
#include "Engine/Core/Types/StringView.h"
|
||||
#include "Engine/Platform/StringUtils.h"
|
||||
#include "Engine/Platform/Windows/WindowsFileSystem.h"
|
||||
#include <ThirdParty/catch2/catch.hpp>
|
||||
|
||||
String TestNormalizePath(const StringView& input)
|
||||
{
|
||||
String path(input);
|
||||
FileSystem::NormalizePath(path);
|
||||
StringUtils::PathRemoveRelativeParts(path);
|
||||
return path;
|
||||
}
|
||||
|
||||
TEST_CASE("StringUtils")
|
||||
{
|
||||
SECTION("Test Length")
|
||||
{
|
||||
CHECK(StringUtils::Length("1234") == 4);
|
||||
CHECK(StringUtils::Length(TEXT("1234")) == 4);
|
||||
}
|
||||
|
||||
SECTION("Test Paths")
|
||||
{
|
||||
CHECK(StringUtils::GetFileName(TEXT("file")) == TEXT("file"));
|
||||
CHECK(StringUtils::GetFileName(TEXT("file.ext")) == TEXT("file.ext"));
|
||||
CHECK(StringUtils::GetFileName(TEXT("folder/file.ext")) == TEXT("file.ext"));
|
||||
CHECK(StringUtils::GetFileName(TEXT("folder\\file.ext")) == TEXT("file.ext"));
|
||||
CHECK(StringUtils::GetFileName(TEXT("folder/d/file.ext")) == TEXT("file.ext"));
|
||||
CHECK(StringUtils::GetFileName(TEXT("folder/d//file.ext")) == TEXT("file.ext"));
|
||||
CHECK(StringUtils::GetFileName(TEXT("folder/d/../file.ext")) == TEXT("file.ext"));
|
||||
CHECK(StringUtils::GetFileName(TEXT("folder/d/./file.ext")) == TEXT("file.ext"));
|
||||
CHECK(StringUtils::GetFileName(TEXT("C:\\folder/d/./file.ext")) == TEXT("file.ext"));
|
||||
CHECK(StringUtils::GetFileName(TEXT("/folder/d/./file.ext")) == TEXT("file.ext"));
|
||||
CHECK(StringUtils::GetFileName(TEXT("./folder/d/./file.ext")) == TEXT("file.ext"));
|
||||
|
||||
CHECK(StringUtils::GetDirectoryName(TEXT("file")) == TEXT(""));
|
||||
CHECK(StringUtils::GetDirectoryName(TEXT("file.ext")) == TEXT(""));
|
||||
CHECK(StringUtils::GetDirectoryName(TEXT("folder")) == TEXT(""));
|
||||
CHECK(StringUtils::GetDirectoryName(TEXT("folder\\file.ext")) == TEXT("folder"));
|
||||
CHECK(StringUtils::GetDirectoryName(TEXT("folder/d/file.ext")) == TEXT("folder/d"));
|
||||
CHECK(StringUtils::GetDirectoryName(TEXT("folder/d//file.ext")) == TEXT("folder/d/"));
|
||||
CHECK(StringUtils::GetDirectoryName(TEXT("folder/d/../file.ext")) == TEXT("folder/d/.."));
|
||||
CHECK(StringUtils::GetDirectoryName(TEXT("folder/d/./file.ext")) == TEXT("folder/d/."));
|
||||
CHECK(StringUtils::GetDirectoryName(TEXT("C:\\folder/d/./file.ext")) == TEXT("C:\\folder/d/."));
|
||||
CHECK(StringUtils::GetDirectoryName(TEXT("/folder/d/./file.ext")) == TEXT("/folder/d/."));
|
||||
CHECK(StringUtils::GetDirectoryName(TEXT("./folder/d/./file.ext")) == TEXT("./folder/d/."));
|
||||
|
||||
CHECK(TestNormalizePath(TEXT("file")) == TEXT("file"));
|
||||
CHECK(TestNormalizePath(TEXT("file.ext")) == TEXT("file.ext"));
|
||||
CHECK(TestNormalizePath(TEXT("folder")) == TEXT("folder"));
|
||||
CHECK(TestNormalizePath(TEXT("folder\\file.ext")) == TEXT("folder/file.ext"));
|
||||
CHECK(TestNormalizePath(TEXT("folder/d/file.ext")) == TEXT("folder/d/file.ext"));
|
||||
CHECK(TestNormalizePath(TEXT("folder/d//file.ext")) == TEXT("folder/d/file.ext"));
|
||||
CHECK(TestNormalizePath(TEXT("folder/d/../file.ext")) == TEXT("folder/file.ext"));
|
||||
CHECK(TestNormalizePath(TEXT("folder/d/./file.ext")) == TEXT("folder/d/file.ext"));
|
||||
CHECK(TestNormalizePath(TEXT("C:\\folder/d/./file.ext")) == TEXT("C:\\folder/d/file.ext"));
|
||||
CHECK(TestNormalizePath(TEXT("/folder/d/./file.ext")) == TEXT("/folder/d/file.ext"));
|
||||
CHECK(TestNormalizePath(TEXT("./folder/d/./file.ext")) == TEXT("/folder/d/file.ext"));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user