summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEtienne Samson <samson.etienne@gmail.com>2018-06-29 14:39:13 +0200
committerEtienne Samson <samson.etienne@gmail.com>2018-06-29 14:39:13 +0200
commitd0921127c9ff2baaa8a766de43d3921933ad919d (patch)
treecf5c1021570ca9e5c6acb5780fa1561ff21d5cf6
parent83c35f7ea4f48a1f805c53277e65ab5e8429c6a7 (diff)
downloadlibgit2-d0921127c9ff2baaa8a766de43d3921933ad919d.tar.gz
tests: add a helper to build sandbox subpaths quickly
-rw-r--r--tests/clar_libgit2.c29
-rw-r--r--tests/clar_libgit2.h7
-rw-r--r--tests/worktree/open.c23
3 files changed, 39 insertions, 20 deletions
diff --git a/tests/clar_libgit2.c b/tests/clar_libgit2.c
index 7ffa015a4..740264ccc 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 c72d37db3..618aed02d 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 8ea43b2fa..52d47334c 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)