Skip to content

Commit 5242c42

Browse files
committed
test: discover: split up monolithic test into smaller ones
1 parent 07afeb2 commit 5242c42

File tree

1 file changed

+67
-49
lines changed

1 file changed

+67
-49
lines changed

tests/repo/discover.c

Lines changed: 67 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -75,12 +75,19 @@ static void append_ceiling_dir(git_buf *ceiling_dirs, const char *path)
7575
cl_assert(git_buf_oom(ceiling_dirs) == 0);
7676
}
7777

78+
static git_buf discovered;
79+
static git_buf ceiling_dirs;
80+
7881
void test_repo_discover__initialize(void)
7982
{
8083
git_repository *repo;
8184
const mode_t mode = 0777;
8285
git_futils_mkdir_r(DISCOVER_FOLDER, mode);
8386

87+
git_buf_init(&discovered, 0);
88+
git_buf_init(&ceiling_dirs, 0);
89+
append_ceiling_dir(&ceiling_dirs, TEMP_REPO_FOLDER);
90+
8491
cl_git_pass(git_repository_init(&repo, DISCOVER_FOLDER, 1));
8592
git_repository_free(repo);
8693

@@ -107,67 +114,78 @@ void test_repo_discover__initialize(void)
107114

108115
void test_repo_discover__cleanup(void)
109116
{
117+
git_buf_free(&discovered);
118+
git_buf_free(&ceiling_dirs);
110119
cl_git_pass(git_futils_rmdir_r(TEMP_REPO_FOLDER, NULL, GIT_RMDIR_REMOVE_FILES));
111120
}
112121

113-
void test_repo_discover__0(void)
122+
void test_repo_discover__discovering_repo_with_exact_path_succeeds(void)
114123
{
115-
// test discover
116-
git_buf ceiling_dirs_buf = GIT_BUF_INIT, repository_path = GIT_BUF_INIT,
117-
sub_repository_path = GIT_BUF_INIT, found_path = GIT_BUF_INIT;
118-
const char *ceiling_dirs;
124+
cl_git_pass(git_repository_discover(&discovered, DISCOVER_FOLDER, 0, ceiling_dirs.ptr));
125+
cl_git_pass(git_repository_discover(&discovered, SUB_REPOSITORY_FOLDER, 0, ceiling_dirs.ptr));
126+
}
119127

120-
append_ceiling_dir(&ceiling_dirs_buf, TEMP_REPO_FOLDER);
121-
ceiling_dirs = git_buf_cstr(&ceiling_dirs_buf);
128+
void test_repo_discover__discovering_nonexistent_dir_fails(void)
129+
{
130+
cl_assert_equal_i(GIT_ENOTFOUND, git_repository_discover(&discovered, DISCOVER_FOLDER "-nonexistent", 0, NULL));
131+
}
122132

123-
/* Nonexistent */
124-
cl_assert_equal_i(GIT_ENOTFOUND, git_repository_discover(&repository_path, DISCOVER_FOLDER "-nonexistent", 0, ceiling_dirs));
133+
void test_repo_discover__discovering_repo_with_subdirectory_succeeds(void)
134+
{
135+
ensure_repository_discover(SUB_REPOSITORY_FOLDER_SUB, ceiling_dirs.ptr, SUB_REPOSITORY_GITDIR);
136+
ensure_repository_discover(SUB_REPOSITORY_FOLDER_SUB_SUB, ceiling_dirs.ptr, SUB_REPOSITORY_GITDIR);
137+
ensure_repository_discover(SUB_REPOSITORY_FOLDER_SUB_SUB_SUB, ceiling_dirs.ptr, SUB_REPOSITORY_GITDIR);
138+
}
125139

126-
cl_git_pass(git_repository_discover(&repository_path, DISCOVER_FOLDER, 0, ceiling_dirs));
127-
cl_git_pass(git_repository_discover(&sub_repository_path, SUB_REPOSITORY_FOLDER, 0, ceiling_dirs));
140+
void test_repo_discover__discovering_repository_with_alternative_gitdir_succeeds(void)
141+
{
142+
ensure_repository_discover(REPOSITORY_ALTERNATE_FOLDER, ceiling_dirs.ptr, SUB_REPOSITORY_GITDIR);
143+
ensure_repository_discover(REPOSITORY_ALTERNATE_FOLDER_SUB, ceiling_dirs.ptr, SUB_REPOSITORY_GITDIR);
144+
ensure_repository_discover(REPOSITORY_ALTERNATE_FOLDER_SUB_SUB, ceiling_dirs.ptr, SUB_REPOSITORY_GITDIR);
145+
ensure_repository_discover(REPOSITORY_ALTERNATE_FOLDER_SUB_SUB_SUB, ceiling_dirs.ptr, DISCOVER_FOLDER);
146+
}
147+
148+
void test_repo_discover__discovering_repository_with_malformed_alternative_gitdir_fails(void)
149+
{
150+
cl_git_fail(git_repository_discover(&discovered, ALTERNATE_MALFORMED_FOLDER1, 0, ceiling_dirs.ptr));
151+
cl_git_fail(git_repository_discover(&discovered, ALTERNATE_MALFORMED_FOLDER2, 0, ceiling_dirs.ptr));
152+
cl_git_fail(git_repository_discover(&discovered, ALTERNATE_MALFORMED_FOLDER3, 0, ceiling_dirs.ptr));
153+
cl_assert_equal_i(GIT_ENOTFOUND, git_repository_discover(&discovered, ALTERNATE_NOT_FOUND_FOLDER, 0, ceiling_dirs.ptr));
154+
}
128155

129-
ensure_repository_discover(SUB_REPOSITORY_FOLDER_SUB, ceiling_dirs, SUB_REPOSITORY_GITDIR);
130-
ensure_repository_discover(SUB_REPOSITORY_FOLDER_SUB_SUB, ceiling_dirs, SUB_REPOSITORY_GITDIR);
131-
ensure_repository_discover(SUB_REPOSITORY_FOLDER_SUB_SUB_SUB, ceiling_dirs, SUB_REPOSITORY_GITDIR);
156+
void test_repo_discover__discovering_repository_with_ceiling(void)
157+
{
158+
append_ceiling_dir(&ceiling_dirs, SUB_REPOSITORY_FOLDER_SUB);
132159

133-
ensure_repository_discover(REPOSITORY_ALTERNATE_FOLDER, ceiling_dirs, SUB_REPOSITORY_GITDIR);
134-
ensure_repository_discover(REPOSITORY_ALTERNATE_FOLDER_SUB, ceiling_dirs, SUB_REPOSITORY_GITDIR);
135-
ensure_repository_discover(REPOSITORY_ALTERNATE_FOLDER_SUB_SUB, ceiling_dirs, SUB_REPOSITORY_GITDIR);
136-
ensure_repository_discover(REPOSITORY_ALTERNATE_FOLDER_SUB_SUB_SUB, ceiling_dirs, DISCOVER_FOLDER);
160+
/* this must pass as ceiling_directories cannot prevent the current
161+
* working directory to be checked */
162+
ensure_repository_discover(SUB_REPOSITORY_FOLDER, ceiling_dirs.ptr, SUB_REPOSITORY_GITDIR);
137163

138-
cl_git_fail(git_repository_discover(&found_path, ALTERNATE_MALFORMED_FOLDER1, 0, ceiling_dirs));
139-
cl_git_fail(git_repository_discover(&found_path, ALTERNATE_MALFORMED_FOLDER2, 0, ceiling_dirs));
140-
cl_git_fail(git_repository_discover(&found_path, ALTERNATE_MALFORMED_FOLDER3, 0, ceiling_dirs));
141-
cl_assert_equal_i(GIT_ENOTFOUND, git_repository_discover(&found_path, ALTERNATE_NOT_FOUND_FOLDER, 0, ceiling_dirs));
164+
ensure_repository_discover(SUB_REPOSITORY_FOLDER_SUB, ceiling_dirs.ptr, SUB_REPOSITORY_GITDIR);
165+
cl_assert_equal_i(GIT_ENOTFOUND, git_repository_discover(&discovered, SUB_REPOSITORY_FOLDER_SUB_SUB, 0, ceiling_dirs.ptr));
166+
cl_assert_equal_i(GIT_ENOTFOUND, git_repository_discover(&discovered, SUB_REPOSITORY_FOLDER_SUB_SUB_SUB, 0, ceiling_dirs.ptr));
167+
}
142168

143-
append_ceiling_dir(&ceiling_dirs_buf, SUB_REPOSITORY_FOLDER_SUB);
144-
ceiling_dirs = git_buf_cstr(&ceiling_dirs_buf);
169+
void test_repo_discover__other_ceiling(void)
170+
{
171+
append_ceiling_dir(&ceiling_dirs, SUB_REPOSITORY_FOLDER);
145172

146-
/* this must pass as ceiling_directories cannot prevent the current
173+
/* this must pass as ceiling_directories cannot predent the current
147174
* working directory to be checked */
148-
ensure_repository_discover(SUB_REPOSITORY_FOLDER, ceiling_dirs, SUB_REPOSITORY_GITDIR);
149-
ensure_repository_discover(SUB_REPOSITORY_FOLDER_SUB, ceiling_dirs, SUB_REPOSITORY_GITDIR);
150-
cl_assert_equal_i(GIT_ENOTFOUND, git_repository_discover(&found_path, SUB_REPOSITORY_FOLDER_SUB_SUB, 0, ceiling_dirs));
151-
cl_assert_equal_i(GIT_ENOTFOUND, git_repository_discover(&found_path, SUB_REPOSITORY_FOLDER_SUB_SUB_SUB, 0, ceiling_dirs));
152-
153-
append_ceiling_dir(&ceiling_dirs_buf, SUB_REPOSITORY_FOLDER);
154-
ceiling_dirs = git_buf_cstr(&ceiling_dirs_buf);
155-
156-
//this must pass as ceiling_directories cannot predent the current
157-
//working directory to be checked
158-
ensure_repository_discover(SUB_REPOSITORY_FOLDER, ceiling_dirs, SUB_REPOSITORY_GITDIR);
159-
cl_assert_equal_i(GIT_ENOTFOUND, git_repository_discover(&found_path, SUB_REPOSITORY_FOLDER_SUB, 0, ceiling_dirs));
160-
cl_assert_equal_i(GIT_ENOTFOUND, git_repository_discover(&found_path, SUB_REPOSITORY_FOLDER_SUB_SUB, 0, ceiling_dirs));
161-
cl_assert_equal_i(GIT_ENOTFOUND, git_repository_discover(&found_path, SUB_REPOSITORY_FOLDER_SUB_SUB_SUB, 0, ceiling_dirs));
162-
163-
//.gitfile redirection should not be affected by ceiling directories
164-
ensure_repository_discover(REPOSITORY_ALTERNATE_FOLDER, ceiling_dirs, SUB_REPOSITORY_GITDIR);
165-
ensure_repository_discover(REPOSITORY_ALTERNATE_FOLDER_SUB, ceiling_dirs, SUB_REPOSITORY_GITDIR);
166-
ensure_repository_discover(REPOSITORY_ALTERNATE_FOLDER_SUB_SUB, ceiling_dirs, SUB_REPOSITORY_GITDIR);
167-
ensure_repository_discover(REPOSITORY_ALTERNATE_FOLDER_SUB_SUB_SUB, ceiling_dirs, DISCOVER_FOLDER);
168-
169-
git_buf_free(&ceiling_dirs_buf);
170-
git_buf_free(&repository_path);
171-
git_buf_free(&sub_repository_path);
175+
ensure_repository_discover(SUB_REPOSITORY_FOLDER, ceiling_dirs.ptr, SUB_REPOSITORY_GITDIR);
176+
177+
cl_assert_equal_i(GIT_ENOTFOUND, git_repository_discover(&discovered, SUB_REPOSITORY_FOLDER_SUB, 0, ceiling_dirs.ptr));
178+
cl_assert_equal_i(GIT_ENOTFOUND, git_repository_discover(&discovered, SUB_REPOSITORY_FOLDER_SUB_SUB, 0, ceiling_dirs.ptr));
179+
cl_assert_equal_i(GIT_ENOTFOUND, git_repository_discover(&discovered, SUB_REPOSITORY_FOLDER_SUB_SUB_SUB, 0, ceiling_dirs.ptr));
172180
}
173181

182+
void test_repo_discover__ceiling_should_not_affect_gitdir_redirection(void)
183+
{
184+
append_ceiling_dir(&ceiling_dirs, SUB_REPOSITORY_FOLDER);
185+
186+
/* gitfile redirection should not be affected by ceiling directories */
187+
ensure_repository_discover(REPOSITORY_ALTERNATE_FOLDER, ceiling_dirs.ptr, SUB_REPOSITORY_GITDIR);
188+
ensure_repository_discover(REPOSITORY_ALTERNATE_FOLDER_SUB, ceiling_dirs.ptr, SUB_REPOSITORY_GITDIR);
189+
ensure_repository_discover(REPOSITORY_ALTERNATE_FOLDER_SUB_SUB, ceiling_dirs.ptr, SUB_REPOSITORY_GITDIR);
190+
ensure_repository_discover(REPOSITORY_ALTERNATE_FOLDER_SUB_SUB_SUB, ceiling_dirs.ptr, DISCOVER_FOLDER);
191+
}

0 commit comments

Comments
 (0)