tests: add a helper to build sandbox subpaths quickly
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94
diff --git a/tests/clar_libgit2.c b/tests/clar_libgit2.c
index 7ffa015..740264c 100644
--- a/tests/clar_libgit2.c
+++ b/tests/clar_libgit2.c
@@ -319,6 +319,35 @@ const char* cl_git_path_url(const char *path)
return url;
}
+const char *cl_git_sandbox_path(int is_dir, ...)
+{
+ const char *path = NULL;
+ static char _temp[GIT_PATH_MAX];
+ git_buf buf = GIT_BUF_INIT;
+ va_list arg;
+
+ cl_git_pass(git_buf_sets(&buf, clar_sandbox_path()));
+
+ va_start(arg, is_dir);
+
+ while ((path = va_arg(arg, const char *)) != NULL) {
+ cl_git_pass(git_buf_joinpath(&buf, buf.ptr, path));
+ }
+ va_end(arg);
+
+ cl_git_pass(git_path_prettify(&buf, buf.ptr, NULL));
+ if (is_dir)
+ git_path_to_dir(&buf);
+
+ /* make sure we won't truncate */
+ cl_assert(git_buf_len(&buf) < sizeof(_temp));
+ git_buf_copy_cstr(_temp, sizeof(_temp), &buf);
+
+ git_buf_dispose(&buf);
+
+ return _temp;
+}
+
typedef struct {
const char *filename;
size_t filename_len;
diff --git a/tests/clar_libgit2.h b/tests/clar_libgit2.h
index c72d37d..618aed0 100644
--- a/tests/clar_libgit2.h
+++ b/tests/clar_libgit2.h
@@ -181,6 +181,13 @@ git_repository *cl_git_sandbox_init_new(const char *name);
void cl_git_sandbox_cleanup(void);
git_repository *cl_git_sandbox_reopen(void);
+/*
+ * build a sandbox-relative from path segments
+ * is_dir will add a trailing slash
+ * vararg must be a NULL-terminated char * list
+ */
+const char *cl_git_sandbox_path(int is_dir, ...);
+
/* Local-repo url helpers */
const char* cl_git_fixture_url(const char *fixturename);
const char* cl_git_path_url(const char *path);
diff --git a/tests/worktree/open.c b/tests/worktree/open.c
index 8ea43b2..52d4733 100644
--- a/tests/worktree/open.c
+++ b/tests/worktree/open.c
@@ -11,28 +11,11 @@ static worktree_fixture fixture =
static void assert_worktree_valid(git_repository *wt, const char *parentdir, const char *wtdir)
{
- git_buf path = GIT_BUF_INIT;
-
cl_assert(wt->is_worktree);
- cl_git_pass(git_buf_joinpath(&path, clar_sandbox_path(), wtdir));
- cl_git_pass(git_path_prettify(&path, path.ptr, NULL));
- cl_git_pass(git_path_to_dir(&path));
- cl_assert_equal_s(wt->workdir, path.ptr);
-
- cl_git_pass(git_buf_joinpath(&path, path.ptr, ".git"));
- cl_git_pass(git_path_prettify(&path, path.ptr, NULL));
- cl_assert_equal_s(wt->gitlink, path.ptr);
-
- cl_git_pass(git_buf_joinpath(&path, clar_sandbox_path(), parentdir));
- cl_git_pass(git_buf_joinpath(&path, path.ptr, ".git"));
- cl_git_pass(git_buf_joinpath(&path, path.ptr, "worktrees"));
- cl_git_pass(git_buf_joinpath(&path, path.ptr, wtdir));
- cl_git_pass(git_path_prettify(&path, path.ptr, NULL));
- cl_git_pass(git_path_to_dir(&path));
- cl_assert_equal_s(wt->gitdir, path.ptr);
-
- git_buf_dispose(&path);
+ cl_assert_equal_s(wt->workdir, cl_git_sandbox_path(1, wtdir, NULL));
+ cl_assert_equal_s(wt->gitlink, cl_git_sandbox_path(0, wtdir, ".git", NULL));
+ cl_assert_equal_s(wt->gitdir, cl_git_sandbox_path(1, parentdir, ".git", "worktrees", wtdir, NULL));
}
void test_worktree_open__initialize(void)