#include "clay_libgit2.h"
#include "fileops.h"
#include "status_data.h"
static
git_repository *_repository = NULL;
static
int
cb_status__normal(
const
char
*path, unsigned
int
status_flags,
void
*payload)
{
struct
status_entry_counts *counts = payload;
if
(counts->entry_count >= counts->expected_entry_count) {
counts->wrong_status_flags_count++;
goto
exit
;
}
if
(
strcmp
(path, counts->expected_paths[counts->entry_count])) {
counts->wrong_sorted_path++;
goto
exit
;
}
if
(status_flags != counts->expected_statuses[counts->entry_count])
counts->wrong_status_flags_count++;
exit
:
counts->entry_count++;
return
GIT_SUCCESS;
}
static
int
cb_status__count(
const
char
*GIT_UNUSED(p), unsigned
int
GIT_UNUSED(s),
void
*payload)
{
volatile
int
*count = (
int
*)payload;
GIT_UNUSED_ARG(p);
GIT_UNUSED_ARG(s);
*count++;
return
GIT_SUCCESS;
}
void
test_status_worktree__initialize(
void
)
{
cl_fixture_sandbox(
"status"
);
cl_git_pass(
p_rename(
"status/.gitted"
,
"status/.git"
)
);
cl_git_pass(git_repository_open(&_repository,
"status/.git"
));
}
void
test_status_worktree__cleanup(
void
)
{
git_repository_free(_repository);
_repository = NULL;
cl_fixture_cleanup(
"status"
);
}
void
test_status_worktree__whole_repository(
void
)
{
struct
status_entry_counts counts;
memset
(&counts, 0x0,
sizeof
(
struct
status_entry_counts));
counts.expected_entry_count = entry_count0;
counts.expected_paths = entry_paths0;
counts.expected_statuses = entry_statuses0;
cl_git_pass(
git_status_foreach(_repository, cb_status__normal, &counts)
);
cl_assert(counts.entry_count == counts.expected_entry_count);
cl_assert(counts.wrong_status_flags_count == 0);
cl_assert(counts.wrong_sorted_path == 0);
}
void
test_status_worktree__empty_repository(
void
)
{
int
count = 0;
git_status_foreach(_repository, cb_status__count, &count);
cl_assert(count == 0);
}