summaryrefslogtreecommitdiff
path: root/Source/UnitTests/Common/StringUtilTest.cpp
diff options
context:
space:
mode:
authorTilka <tilkax@gmail.com>2024-12-27 18:10:47 +0100
committerGitHub <noreply@github.com>2024-12-27 18:10:47 +0100
commit05cad38abc1d25f57500e530d63b545fa7b56499 (patch)
treef434541f38165f74e0e8010459c508d5dcbfaa84 /Source/UnitTests/Common/StringUtilTest.cpp
parent532a8621daa5c0d8a3a55f64ffba9cb20209d455 (diff)
parentbae4616dd1eb756891f193a8e56b9bc9c80fba41 (diff)
Merge pull request #13243 from nlebeck/stringutil-tests
Add some unit test coverage of the `SplitPath` function
Diffstat (limited to 'Source/UnitTests/Common/StringUtilTest.cpp')
-rw-r--r--Source/UnitTests/Common/StringUtilTest.cpp111
1 files changed, 111 insertions, 0 deletions
diff --git a/Source/UnitTests/Common/StringUtilTest.cpp b/Source/UnitTests/Common/StringUtilTest.cpp
index f887157d52..abf37be585 100644
--- a/Source/UnitTests/Common/StringUtilTest.cpp
+++ b/Source/UnitTests/Common/StringUtilTest.cpp
@@ -81,3 +81,114 @@ TEST(StringUtil, GetEscapedHtml)
EXPECT_EQ(Common::GetEscapedHtml("&<>'\""), "&amp;&lt;&gt;&apos;&quot;");
EXPECT_EQ(Common::GetEscapedHtml("&&&"), "&amp;&amp;&amp;");
}
+
+TEST(StringUtil, SplitPath)
+{
+ std::string path;
+ std::string filename;
+ std::string extension;
+ EXPECT_TRUE(SplitPath("/usr/lib/some_file.txt", &path, &filename, &extension));
+ EXPECT_EQ(path, "/usr/lib/");
+ EXPECT_EQ(filename, "some_file");
+ EXPECT_EQ(extension, ".txt");
+}
+
+TEST(StringUtil, SplitPathNullOutputPathAllowed)
+{
+ std::string filename;
+ std::string extension;
+ EXPECT_TRUE(SplitPath("/usr/lib/some_file.txt", /*path=*/nullptr, &filename, &extension));
+ EXPECT_EQ(filename, "some_file");
+ EXPECT_EQ(extension, ".txt");
+}
+
+TEST(StringUtil, SplitPathNullOutputFilenameAllowed)
+{
+ std::string path;
+ std::string extension;
+ EXPECT_TRUE(SplitPath("/usr/lib/some_file.txt", &path, /*filename=*/nullptr, &extension));
+ EXPECT_EQ(path, "/usr/lib/");
+ EXPECT_EQ(extension, ".txt");
+}
+
+TEST(StringUtil, SplitPathNullOutputExtensionAllowed)
+{
+ std::string path;
+ std::string filename;
+ EXPECT_TRUE(SplitPath("/usr/lib/some_file.txt", &path, &filename, /*extension=*/nullptr));
+ EXPECT_EQ(path, "/usr/lib/");
+ EXPECT_EQ(filename, "some_file");
+}
+
+TEST(StringUtil, SplitPathReturnsFalseIfFullPathIsEmpty)
+{
+ std::string path;
+ std::string filename;
+ std::string extension;
+ EXPECT_FALSE(SplitPath(/*full_path=*/"", &path, &filename, &extension));
+ EXPECT_EQ(path, "");
+ EXPECT_EQ(filename, "");
+ EXPECT_EQ(extension, "");
+}
+
+TEST(StringUtil, SplitPathNoPath)
+{
+ std::string path;
+ std::string filename;
+ std::string extension;
+ EXPECT_TRUE(SplitPath("some_file.txt", &path, &filename, &extension));
+ EXPECT_EQ(path, "");
+ EXPECT_EQ(filename, "some_file");
+ EXPECT_EQ(extension, ".txt");
+}
+
+TEST(StringUtil, SplitPathNoFileName)
+{
+ std::string path;
+ std::string filename;
+ std::string extension;
+ EXPECT_TRUE(SplitPath("/usr/lib/.txt", &path, &filename, &extension));
+ EXPECT_EQ(path, "/usr/lib/");
+ EXPECT_EQ(filename, "");
+ EXPECT_EQ(extension, ".txt");
+}
+
+TEST(StringUtil, SplitPathNoExtension)
+{
+ std::string path;
+ std::string filename;
+ std::string extension;
+ EXPECT_TRUE(SplitPath("/usr/lib/some_file", &path, &filename, &extension));
+ EXPECT_EQ(path, "/usr/lib/");
+ EXPECT_EQ(filename, "some_file");
+ EXPECT_EQ(extension, "");
+}
+
+TEST(StringUtil, SplitPathDifferentPathLengths)
+{
+ std::string path;
+ std::string filename;
+ std::string extension;
+ EXPECT_TRUE(SplitPath("/usr/some_file.txt", &path, &filename, &extension));
+ EXPECT_EQ(path, "/usr/");
+ EXPECT_EQ(filename, "some_file");
+ EXPECT_EQ(extension, ".txt");
+
+ EXPECT_TRUE(SplitPath("/usr/lib/foo/some_file.txt", &path, &filename, &extension));
+ EXPECT_EQ(path, "/usr/lib/foo/");
+ EXPECT_EQ(filename, "some_file");
+ EXPECT_EQ(extension, ".txt");
+}
+
+TEST(StringUtil, SplitPathBackslashesNotRecognizedAsSeparators)
+{
+ std::string path;
+ std::string filename;
+ std::string extension;
+ EXPECT_TRUE(SplitPath("\\usr\\some_file.txt", &path, &filename, &extension));
+ EXPECT_EQ(path, "");
+ EXPECT_EQ(filename, "\\usr\\some_file");
+ EXPECT_EQ(extension, ".txt");
+}
+
+// TODO: add `SplitPath` test coverage for paths containing Windows drives, e.g., "C:".