#include "clay_libgit2.h" #include "fileops.h" #include "status_data.h" /** * Test fixtures */ static git_repository *_repository = NULL; /** * Auxiliary methods */ 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; } /** * Initializer * * This method is called once before starting each * test, and will load the required fixtures */ void test_status_worktree__initialize(void) { /* * Sandbox the `status/` repository from our Fixtures. * This will copy the whole folder to our sandbox, * so now it can be accessed with `./status` */ cl_fixture_sandbox("status"); /* * Rename `status/.gitted` to `status/.git` * We do this because we cannot store a folder named `.git` * inside the fixtures folder in our libgit2 repo. */ cl_git_pass( git_futils_mv_atomic("status/.gitted", "status/.git") ); /* * Open the sandboxed "status" repository */ cl_git_pass(git_repository_open(&_repository, "status/.git")); } /** * Cleanup * * This will be called once after each test finishes, even * if the test failed */ void test_status_worktree__cleanup(void) { git_repository_free(_repository); _repository = NULL; cl_fixture_cleanup("status"); } /** * Tests - Status determination on a working tree */ 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); }