summaryrefslogtreecommitdiff
path: root/source/test
diff options
context:
space:
mode:
Diffstat (limited to 'source/test')
-rw-r--r--source/test/unittests/CMakeLists.txt2
-rw-r--r--source/test/unittests/file.test.c198
2 files changed, 199 insertions, 1 deletions
diff --git a/source/test/unittests/CMakeLists.txt b/source/test/unittests/CMakeLists.txt
index 29dd1b2..fe4c902 100644
--- a/source/test/unittests/CMakeLists.txt
+++ b/source/test/unittests/CMakeLists.txt
@@ -5,4 +5,4 @@ target_sources(
main.test.c string_ref.test.c atomic.test.c thread.test.c
array_ref.test.c input_stream.test.c lower_bound.test.c
condition_variable.test.c mersenne_twister_64.test.c input_buffer.test.c
- move_back.test.c dynamic_array.test.c)
+ move_back.test.c dynamic_array.test.c file.test.c)
diff --git a/source/test/unittests/file.test.c b/source/test/unittests/file.test.c
new file mode 100644
index 0000000..d6b72f6
--- /dev/null
+++ b/source/test/unittests/file.test.c
@@ -0,0 +1,198 @@
+#include "../../kit/file.h"
+#include "../../kit/string_ref.h"
+#include <string.h>
+
+#define KIT_TEST_FILE file
+#include "../../kit_test/test.h"
+
+#if defined(_WIN32) && !defined(__CYGWIN__)
+# define S_DELIM_ "\\"
+#else
+# define S_DELIM_ "/"
+#endif
+
+TEST("file path normalize one") {
+ SZ(foo, "foo/bar/../baz");
+ SZ(foo_norm, "foo" S_DELIM_ "baz");
+
+ string_t bar = path_norm(foo, kit_alloc_default());
+
+ REQUIRE(AR_EQUAL(foo_norm, bar));
+
+ DA_DESTROY(bar);
+}
+
+TEST("file path normalize two") {
+ SZ(foo, "foo/bar/../../baz");
+ SZ(foo_norm, "baz");
+
+ string_t bar = path_norm(foo, kit_alloc_default());
+
+ REQUIRE(AR_EQUAL(foo_norm, bar));
+
+ DA_DESTROY(bar);
+}
+
+TEST("file path normalize parent") {
+ SZ(foo, "../baz");
+ SZ(foo_norm, ".." S_DELIM_ "baz");
+
+ string_t bar = path_norm(foo, kit_alloc_default());
+
+ REQUIRE(AR_EQUAL(foo_norm, bar));
+
+ DA_DESTROY(bar);
+}
+
+TEST("file path normalize double parent") {
+ SZ(foo, "foo/../../baz");
+ SZ(foo_norm, ".." S_DELIM_ "baz");
+
+ string_t bar = path_norm(foo, kit_alloc_default());
+
+ REQUIRE(AR_EQUAL(foo_norm, bar));
+
+ DA_DESTROY(bar);
+}
+
+TEST("file path normalize windows delim") {
+ SZ(foo, "foo\\bar\\..\\baz");
+ SZ(foo_norm, "foo" S_DELIM_ "baz");
+
+ string_t bar = path_norm(foo, kit_alloc_default());
+
+ REQUIRE(AR_EQUAL(foo_norm, bar));
+
+ DA_DESTROY(bar);
+}
+
+TEST("file path join no delim") {
+ SZ(foo, "foo");
+ SZ(bar, "bar");
+ SZ(joined, "foo/bar");
+
+ string_t foobar = path_join(foo, bar, kit_alloc_default());
+
+ REQUIRE(AR_EQUAL(joined, foobar));
+
+ DA_DESTROY(foobar);
+}
+
+TEST("file path join delim left") {
+ SZ(foo, "foo/");
+ SZ(bar, "bar");
+ SZ(joined, "foo/bar");
+
+ string_t foobar = path_join(foo, bar, kit_alloc_default());
+
+ REQUIRE(AR_EQUAL(joined, foobar));
+
+ DA_DESTROY(foobar);
+}
+
+TEST("file path join delim right") {
+ SZ(foo, "foo");
+ SZ(bar, "/bar");
+ SZ(joined, "foo/bar");
+
+ string_t foobar = path_join(foo, bar, kit_alloc_default());
+
+ REQUIRE(AR_EQUAL(joined, foobar));
+
+ DA_DESTROY(foobar);
+}
+
+TEST("file path join delim both") {
+ SZ(foo, "foo/");
+ SZ(bar, "/bar");
+ SZ(joined, "foo/bar");
+
+ string_t foobar = path_join(foo, bar, kit_alloc_default());
+
+ REQUIRE(AR_EQUAL(joined, foobar));
+
+ DA_DESTROY(foobar);
+}
+
+TEST("file path user") {
+ string_t user = path_user(kit_alloc_default());
+
+ REQUIRE(user.size > 0);
+
+ DA_DESTROY(user);
+}
+
+TEST("file path index relative") {
+ SZ(foobar, "foo/bar");
+ SZ(foo, "foo");
+ SZ(bar, "bar");
+
+ REQUIRE(AR_EQUAL(path_index(foobar, 0), foo));
+ REQUIRE(AR_EQUAL(path_index(foobar, 1), bar));
+ REQUIRE(path_index(foobar, 2).size == 0);
+}
+
+TEST("file path index absolute") {
+ SZ(foobar, "/foo/bar");
+ SZ(foo, "foo");
+ SZ(bar, "bar");
+
+ REQUIRE(AR_EQUAL(path_index(foobar, 0), foo));
+ REQUIRE(AR_EQUAL(path_index(foobar, 1), bar));
+ REQUIRE(path_index(foobar, 2).size == 0);
+}
+
+TEST("file path index windows disk name") {
+ SZ(foobar, "c:\\foo\\bar");
+ SZ(disk, "c:");
+ SZ(foo, "foo");
+ SZ(bar, "bar");
+
+ REQUIRE(AR_EQUAL(path_index(foobar, 0), disk));
+ REQUIRE(AR_EQUAL(path_index(foobar, 1), foo));
+ REQUIRE(AR_EQUAL(path_index(foobar, 2), bar));
+ REQUIRE(path_index(foobar, 3).size == 0);
+}
+
+TEST("file path take relative") {
+ SZ(foobar, "foo/bar/");
+ SZ(foo, "foo");
+ SZ(bar, "foo/bar");
+ SZ(bar_end, "foo/bar/");
+
+ REQUIRE(AR_EQUAL(path_take(foobar, 0), foo));
+ REQUIRE(AR_EQUAL(path_take(foobar, 1), bar));
+ REQUIRE(AR_EQUAL(path_take(foobar, 2), bar_end));
+}
+
+TEST("file path take absolute") {
+ SZ(foobar, "/foo/bar");
+ SZ(foo, "/foo");
+ SZ(bar, "/foo/bar");
+
+ REQUIRE(AR_EQUAL(path_take(foobar, 0), foo));
+ REQUIRE(AR_EQUAL(path_take(foobar, 1), bar));
+}
+
+TEST("file path take windows disk name") {
+ SZ(foobar, "c:\\foo\\bar");
+ SZ(disk, "c:");
+ SZ(foo, "c:\\foo");
+ SZ(bar, "c:\\foo\\bar");
+
+ REQUIRE(AR_EQUAL(path_take(foobar, 0), disk));
+ REQUIRE(AR_EQUAL(path_take(foobar, 1), foo));
+ REQUIRE(AR_EQUAL(path_take(foobar, 2), bar));
+}
+
+TEST("file create folder") { }
+
+TEST("file create folder recursive") { }
+
+TEST("file remove") { }
+
+TEST("file remove folder") { }
+
+TEST("file remove recursive") { }
+
+TEST("file enum folder") { }