Commit d0921127c9ff2baaa8a766de43d3921933ad919d

Etienne Samson 2018-06-29T14:39:13

tests: add a helper to build sandbox subpaths quickly

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)