diff options
author | Etienne Samson <samson.etienne@gmail.com> | 2018-06-29 14:39:13 +0200 |
---|---|---|
committer | Etienne Samson <samson.etienne@gmail.com> | 2018-06-29 14:39:13 +0200 |
commit | d0921127c9ff2baaa8a766de43d3921933ad919d (patch) | |
tree | cf5c1021570ca9e5c6acb5780fa1561ff21d5cf6 | |
parent | 83c35f7ea4f48a1f805c53277e65ab5e8429c6a7 (diff) | |
download | libgit2-d0921127c9ff2baaa8a766de43d3921933ad919d.tar.gz |
tests: add a helper to build sandbox subpaths quickly
-rw-r--r-- | tests/clar_libgit2.c | 29 | ||||
-rw-r--r-- | tests/clar_libgit2.h | 7 | ||||
-rw-r--r-- | tests/worktree/open.c | 23 |
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) |