summaryrefslogtreecommitdiffstats
path: root/src/tests
diff options
context:
space:
mode:
Diffstat (limited to 'src/tests')
-rw-r--r--src/tests/CMakeLists.txt1
-rw-r--r--src/tests/core/file_sys/path_parser.cpp38
2 files changed, 39 insertions, 0 deletions
diff --git a/src/tests/CMakeLists.txt b/src/tests/CMakeLists.txt
index 457c55571..47799e1c2 100644
--- a/src/tests/CMakeLists.txt
+++ b/src/tests/CMakeLists.txt
@@ -1,5 +1,6 @@
set(SRCS
tests.cpp
+ core/file_sys/path_parser.cpp
)
set(HEADERS
diff --git a/src/tests/core/file_sys/path_parser.cpp b/src/tests/core/file_sys/path_parser.cpp
new file mode 100644
index 000000000..2b543e438
--- /dev/null
+++ b/src/tests/core/file_sys/path_parser.cpp
@@ -0,0 +1,38 @@
+// Copyright 2016 Citra Emulator Project
+// Licensed under GPLv2 or any later version
+// Refer to the license.txt file included.
+
+#include <catch.hpp>
+#include "common/file_util.h"
+#include "core/file_sys/path_parser.h"
+
+namespace FileSys {
+
+TEST_CASE("PathParser", "[core][file_sys]") {
+ REQUIRE(!PathParser(Path(std::vector<u8>{})).IsValid());
+ REQUIRE(!PathParser(Path("a")).IsValid());
+ REQUIRE(!PathParser(Path("/|")).IsValid());
+ REQUIRE(PathParser(Path("/a")).IsValid());
+ REQUIRE(!PathParser(Path("/a/b/../../c/../../d")).IsValid());
+ REQUIRE(PathParser(Path("/a/b/../c/../../d")).IsValid());
+ REQUIRE(PathParser(Path("/")).IsRootDirectory());
+ REQUIRE(!PathParser(Path("/a")).IsRootDirectory());
+ REQUIRE(PathParser(Path("/a/..")).IsRootDirectory());
+}
+
+TEST_CASE("PathParser - Host file system", "[core][file_sys]") {
+ std::string test_dir = "./test";
+ FileUtil::CreateDir(test_dir);
+ FileUtil::CreateDir(test_dir + "/z");
+ FileUtil::CreateEmptyFile(test_dir + "/a");
+
+ REQUIRE(PathParser(Path("/a")).GetHostStatus(test_dir) == PathParser::FileFound);
+ REQUIRE(PathParser(Path("/b")).GetHostStatus(test_dir) == PathParser::NotFound);
+ REQUIRE(PathParser(Path("/z")).GetHostStatus(test_dir) == PathParser::DirectoryFound);
+ REQUIRE(PathParser(Path("/a/c")).GetHostStatus(test_dir) == PathParser::FileInPath);
+ REQUIRE(PathParser(Path("/b/c")).GetHostStatus(test_dir) == PathParser::PathNotFound);
+
+ FileUtil::DeleteDirRecursively(test_dir);
+}
+
+} // namespace FileSys