Skip to content

Commit e526fbc

Browse files
committed
tests: add test suite for opening submodules
1 parent 924f5d1 commit e526fbc

File tree

1 file changed

+71
-0
lines changed

1 file changed

+71
-0
lines changed

tests/submodule/open.c

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
#include "clar_libgit2.h"
2+
#include "submodule_helpers.h"
3+
#include "path.h"
4+
5+
static git_repository *g_parent;
6+
static git_repository *g_child;
7+
static git_submodule *g_module;
8+
9+
void test_submodule_open__initialize(void)
10+
{
11+
g_parent = setup_fixture_submod2();
12+
}
13+
14+
void test_submodule_open__cleanup(void)
15+
{
16+
git_submodule_free(g_module);
17+
git_repository_free(g_child);
18+
cl_git_sandbox_cleanup();
19+
g_parent = NULL;
20+
g_child = NULL;
21+
g_module = NULL;
22+
}
23+
24+
static void assert_sm_valid(git_repository *parent, git_repository *child, const char *sm_name)
25+
{
26+
git_buf expected = GIT_BUF_INIT, actual = GIT_BUF_INIT;
27+
28+
/* assert working directory */
29+
cl_git_pass(git_buf_joinpath(&expected, git_repository_workdir(parent), sm_name));
30+
cl_git_pass(git_path_prettify_dir(&expected, expected.ptr, NULL));
31+
cl_git_pass(git_buf_sets(&actual, git_repository_workdir(child)));
32+
cl_git_pass(git_path_prettify_dir(&actual, actual.ptr, NULL));
33+
cl_assert_equal_s(expected.ptr, actual.ptr);
34+
35+
git_buf_clear(&expected);
36+
git_buf_clear(&actual);
37+
38+
/* assert common directory */
39+
cl_git_pass(git_buf_joinpath(&expected, git_repository_commondir(parent), "modules"));
40+
cl_git_pass(git_buf_joinpath(&expected, expected.ptr, sm_name));
41+
cl_git_pass(git_path_prettify_dir(&expected, expected.ptr, NULL));
42+
cl_git_pass(git_buf_sets(&actual, git_repository_commondir(child)));
43+
cl_git_pass(git_path_prettify_dir(&actual, actual.ptr, NULL));
44+
cl_assert_equal_s(expected.ptr, actual.ptr);
45+
46+
/* assert git directory */
47+
cl_git_pass(git_buf_sets(&actual, git_repository_path(child)));
48+
cl_git_pass(git_path_prettify_dir(&actual, actual.ptr, NULL));
49+
cl_assert_equal_s(expected.ptr, actual.ptr);
50+
51+
git_buf_free(&expected);
52+
git_buf_free(&actual);
53+
}
54+
55+
void test_submodule_open__opening_via_lookup_succeeds(void)
56+
{
57+
cl_git_pass(git_submodule_lookup(&g_module, g_parent, "sm_unchanged"));
58+
cl_git_pass(git_submodule_open(&g_child, g_module));
59+
assert_sm_valid(g_parent, g_child, "sm_unchanged");
60+
}
61+
62+
void test_submodule_open__direct_open_succeeds(void)
63+
{
64+
git_buf path = GIT_BUF_INIT;
65+
66+
cl_git_pass(git_buf_joinpath(&path, git_repository_workdir(g_parent), "sm_unchanged"));
67+
cl_git_pass(git_repository_open(&g_child, path.ptr));
68+
assert_sm_valid(g_parent, g_child, "sm_unchanged");
69+
70+
git_buf_free(&path);
71+
}

0 commit comments

Comments
 (0)