Commit 050ab995 by Russell Belfer

Fix up checkout file contents checks

This fixes of the file contents checks in checkout to give
slightly better error messages by directly calling the underlying
clar assertions so the file and line number of the top level call
can be reported correctly, and renames the helpers to not start
with "test_" since that is kind of reserved by clar.

This also enables some of the CRLF tests on all platforms that
were previously Windows only (by pushing a check of the native
line endings into the test body).
parent 4a15ea86
...@@ -50,35 +50,44 @@ void reset_index_to_treeish(git_object *treeish) ...@@ -50,35 +50,44 @@ void reset_index_to_treeish(git_object *treeish)
git_index_free(index); git_index_free(index);
} }
static void test_file_contents_internal( static void check_file_contents_internal(
const char *path, const char *expectedcontents, bool strip_cr) const char *path,
const char *expected_content,
bool strip_cr,
const char *file,
int line,
const char *msg)
{ {
int fd; int fd;
char data[1024] = {0}; char data[1024] = {0};
git_buf buf = GIT_BUF_INIT; git_buf buf = GIT_BUF_INIT;
size_t expectedlen = strlen(expectedcontents); size_t expected_len = expected_content ? strlen(expected_content) : 0;
fd = p_open(path, O_RDONLY); fd = p_open(path, O_RDONLY);
cl_assert(fd >= 0); cl_assert(fd >= 0);
buf.ptr = data; buf.ptr = data;
buf.size = p_read(fd, buf.ptr, 1024); buf.size = p_read(fd, buf.ptr, sizeof(data));
cl_git_pass(p_close(fd)); cl_git_pass(p_close(fd));
if (strip_cr) if (strip_cr)
strip_cr_from_buf(&buf); strip_cr_from_buf(&buf);
cl_assert_equal_i((int)expectedlen, (int)buf.size); clar__assert_equal_i((int)expected_len, (int)buf.size, file, line, "strlen(expected_content) != strlen(actual_content)", 1);
cl_assert_equal_s(expectedcontents, buf.ptr); clar__assert_equal_s(expected_content, buf.ptr, file, line, msg, 1);
} }
void test_file_contents(const char *path, const char *expected) void check_file_contents_at_line(
const char *path, const char *expected,
const char *file, int line, const char *msg)
{ {
test_file_contents_internal(path, expected, false); check_file_contents_internal(path, expected, false, file, line, msg);
} }
void test_file_contents_nocr(const char *path, const char *expected) void check_file_contents_nocr_at_line(
const char *path, const char *expected,
const char *file, int line, const char *msg)
{ {
test_file_contents_internal(path, expected, true); check_file_contents_internal(path, expected, true, file, line, msg);
} }
...@@ -5,5 +5,17 @@ ...@@ -5,5 +5,17 @@
extern void strip_cr_from_buf(git_buf *buf); extern void strip_cr_from_buf(git_buf *buf);
extern void assert_on_branch(git_repository *repo, const char *branch); extern void assert_on_branch(git_repository *repo, const char *branch);
extern void reset_index_to_treeish(git_object *treeish); extern void reset_index_to_treeish(git_object *treeish);
extern void test_file_contents(const char *path, const char *expected);
extern void test_file_contents_nocr(const char *path, const char *expected); extern void check_file_contents_at_line(
const char *path, const char *expected,
const char *file, int line, const char *msg);
extern void check_file_contents_nocr_at_line(
const char *path, const char *expected,
const char *file, int line, const char *msg);
#define check_file_contents(PATH,EXP) \
check_file_contents_at_line(PATH,EXP,__FILE__,__LINE__,"String mismatch: " #EXP " != " #PATH)
#define check_file_contents_nocr(PATH,EXP) \
check_file_contents_nocr_at_line(PATH,EXP,__FILE__,__LINE__,"String mismatch: " #EXP " != " #PATH)
...@@ -28,7 +28,6 @@ void test_checkout_crlf__cleanup(void) ...@@ -28,7 +28,6 @@ void test_checkout_crlf__cleanup(void)
void test_checkout_crlf__detect_crlf_autocrlf_false(void) void test_checkout_crlf__detect_crlf_autocrlf_false(void)
{ {
#ifdef GIT_WIN32
git_checkout_opts opts = GIT_CHECKOUT_OPTS_INIT; git_checkout_opts opts = GIT_CHECKOUT_OPTS_INIT;
opts.checkout_strategy = GIT_CHECKOUT_SAFE_CREATE; opts.checkout_strategy = GIT_CHECKOUT_SAFE_CREATE;
...@@ -36,14 +35,12 @@ void test_checkout_crlf__detect_crlf_autocrlf_false(void) ...@@ -36,14 +35,12 @@ void test_checkout_crlf__detect_crlf_autocrlf_false(void)
git_checkout_head(g_repo, &opts); git_checkout_head(g_repo, &opts);
test_file_contents("./crlf/all-lf", ALL_LF_TEXT_RAW); check_file_contents("./crlf/all-lf", ALL_LF_TEXT_RAW);
test_file_contents("./crlf/all-crlf", ALL_CRLF_TEXT_RAW); check_file_contents("./crlf/all-crlf", ALL_CRLF_TEXT_RAW);
#endif
} }
void test_checkout_crlf__autocrlf_false_index_size_is_unfiltered_size(void) void test_checkout_crlf__autocrlf_false_index_size_is_unfiltered_size(void)
{ {
#ifdef GIT_WIN32
git_index *index; git_index *index;
const git_index_entry *entry; const git_index_entry *entry;
git_checkout_opts opts = GIT_CHECKOUT_OPTS_INIT; git_checkout_opts opts = GIT_CHECKOUT_OPTS_INIT;
...@@ -62,12 +59,10 @@ void test_checkout_crlf__autocrlf_false_index_size_is_unfiltered_size(void) ...@@ -62,12 +59,10 @@ void test_checkout_crlf__autocrlf_false_index_size_is_unfiltered_size(void)
cl_assert(entry->file_size == strlen(ALL_CRLF_TEXT_RAW)); cl_assert(entry->file_size == strlen(ALL_CRLF_TEXT_RAW));
git_index_free(index); git_index_free(index);
#endif
} }
void test_checkout_crlf__detect_crlf_autocrlf_true(void) void test_checkout_crlf__detect_crlf_autocrlf_true(void)
{ {
#ifdef GIT_WIN32
git_checkout_opts opts = GIT_CHECKOUT_OPTS_INIT; git_checkout_opts opts = GIT_CHECKOUT_OPTS_INIT;
opts.checkout_strategy = GIT_CHECKOUT_SAFE_CREATE; opts.checkout_strategy = GIT_CHECKOUT_SAFE_CREATE;
...@@ -75,14 +70,16 @@ void test_checkout_crlf__detect_crlf_autocrlf_true(void) ...@@ -75,14 +70,16 @@ void test_checkout_crlf__detect_crlf_autocrlf_true(void)
git_checkout_head(g_repo, &opts); git_checkout_head(g_repo, &opts);
test_file_contents("./crlf/all-lf", ALL_LF_TEXT_AS_CRLF); if (GIT_EOL_NATIVE == GIT_EOL_LF)
test_file_contents("./crlf/all-crlf", ALL_CRLF_TEXT_RAW); check_file_contents("./crlf/all-lf", ALL_LF_TEXT_RAW);
#endif else
check_file_contents("./crlf/all-lf", ALL_LF_TEXT_AS_CRLF);
check_file_contents("./crlf/all-crlf", ALL_CRLF_TEXT_RAW);
} }
void test_checkout_crlf__more_lf_autocrlf_true(void) void test_checkout_crlf__more_lf_autocrlf_true(void)
{ {
#ifdef GIT_WIN32
git_checkout_opts opts = GIT_CHECKOUT_OPTS_INIT; git_checkout_opts opts = GIT_CHECKOUT_OPTS_INIT;
opts.checkout_strategy = GIT_CHECKOUT_SAFE_CREATE; opts.checkout_strategy = GIT_CHECKOUT_SAFE_CREATE;
...@@ -90,13 +87,14 @@ void test_checkout_crlf__more_lf_autocrlf_true(void) ...@@ -90,13 +87,14 @@ void test_checkout_crlf__more_lf_autocrlf_true(void)
git_checkout_head(g_repo, &opts); git_checkout_head(g_repo, &opts);
test_file_contents("./crlf/more-lf", MORE_LF_TEXT_AS_CRLF); if (GIT_EOL_NATIVE == GIT_EOL_LF)
#endif check_file_contents("./crlf/more-lf", MORE_LF_TEXT_RAW);
else
check_file_contents("./crlf/more-lf", MORE_LF_TEXT_AS_CRLF);
} }
void test_checkout_crlf__more_crlf_autocrlf_true(void) void test_checkout_crlf__more_crlf_autocrlf_true(void)
{ {
#ifdef GIT_WIN32
git_checkout_opts opts = GIT_CHECKOUT_OPTS_INIT; git_checkout_opts opts = GIT_CHECKOUT_OPTS_INIT;
opts.checkout_strategy = GIT_CHECKOUT_SAFE_CREATE; opts.checkout_strategy = GIT_CHECKOUT_SAFE_CREATE;
...@@ -104,13 +102,14 @@ void test_checkout_crlf__more_crlf_autocrlf_true(void) ...@@ -104,13 +102,14 @@ void test_checkout_crlf__more_crlf_autocrlf_true(void)
git_checkout_head(g_repo, &opts); git_checkout_head(g_repo, &opts);
test_file_contents("./crlf/more-crlf", MORE_CRLF_TEXT_AS_CRLF); if (GIT_EOL_NATIVE == GIT_EOL_LF)
#endif check_file_contents("./crlf/more-crlf", MORE_CRLF_TEXT_RAW);
else
check_file_contents("./crlf/more-crlf", MORE_CRLF_TEXT_AS_CRLF);
} }
void test_checkout_crlf__all_crlf_autocrlf_true(void) void test_checkout_crlf__all_crlf_autocrlf_true(void)
{ {
#ifdef GIT_WIN32
git_checkout_opts opts = GIT_CHECKOUT_OPTS_INIT; git_checkout_opts opts = GIT_CHECKOUT_OPTS_INIT;
opts.checkout_strategy = GIT_CHECKOUT_SAFE_CREATE; opts.checkout_strategy = GIT_CHECKOUT_SAFE_CREATE;
...@@ -118,13 +117,11 @@ void test_checkout_crlf__all_crlf_autocrlf_true(void) ...@@ -118,13 +117,11 @@ void test_checkout_crlf__all_crlf_autocrlf_true(void)
git_checkout_head(g_repo, &opts); git_checkout_head(g_repo, &opts);
test_file_contents("./crlf/all-crlf", ALL_CRLF_TEXT_RAW); check_file_contents("./crlf/all-crlf", ALL_CRLF_TEXT_RAW);
#endif
} }
void test_checkout_crlf__autocrlf_true_index_size_is_filtered_size(void) void test_checkout_crlf__autocrlf_true_index_size_is_filtered_size(void)
{ {
#ifdef GIT_WIN32
git_index *index; git_index *index;
const git_index_entry *entry; const git_index_entry *entry;
git_checkout_opts opts = GIT_CHECKOUT_OPTS_INIT; git_checkout_opts opts = GIT_CHECKOUT_OPTS_INIT;
...@@ -137,11 +134,14 @@ void test_checkout_crlf__autocrlf_true_index_size_is_filtered_size(void) ...@@ -137,11 +134,14 @@ void test_checkout_crlf__autocrlf_true_index_size_is_filtered_size(void)
git_repository_index(&index, g_repo); git_repository_index(&index, g_repo);
cl_assert((entry = git_index_get_bypath(index, "all-lf", 0)) != NULL); cl_assert((entry = git_index_get_bypath(index, "all-lf", 0)) != NULL);
cl_assert(entry->file_size == strlen(ALL_LF_TEXT_AS_CRLF));
if (GIT_EOL_NATIVE == GIT_EOL_LF)
cl_assert_equal_sz(strlen(ALL_LF_TEXT_RAW), entry->file_size);
else
cl_assert_equal_sz(strlen(ALL_LF_TEXT_AS_CRLF), entry->file_size);
cl_assert((entry = git_index_get_bypath(index, "all-crlf", 0)) != NULL); cl_assert((entry = git_index_get_bypath(index, "all-crlf", 0)) != NULL);
cl_assert(entry->file_size == strlen(ALL_CRLF_TEXT_RAW)); cl_assert_equal_sz(strlen(ALL_CRLF_TEXT_RAW), entry->file_size);
git_index_free(index); git_index_free(index);
#endif
} }
...@@ -48,9 +48,9 @@ void test_checkout_index__can_create_missing_files(void) ...@@ -48,9 +48,9 @@ void test_checkout_index__can_create_missing_files(void)
cl_git_pass(git_checkout_index(g_repo, NULL, &opts)); cl_git_pass(git_checkout_index(g_repo, NULL, &opts));
test_file_contents("./testrepo/README", "hey there\n"); check_file_contents("./testrepo/README", "hey there\n");
test_file_contents("./testrepo/branch_file.txt", "hi\nbye!\n"); check_file_contents("./testrepo/branch_file.txt", "hi\nbye!\n");
test_file_contents("./testrepo/new.txt", "my new file\n"); check_file_contents("./testrepo/new.txt", "my new file\n");
} }
void test_checkout_index__can_remove_untracked_files(void) void test_checkout_index__can_remove_untracked_files(void)
...@@ -88,8 +88,8 @@ void test_checkout_index__honor_the_specified_pathspecs(void) ...@@ -88,8 +88,8 @@ void test_checkout_index__honor_the_specified_pathspecs(void)
cl_git_pass(git_checkout_index(g_repo, NULL, &opts)); cl_git_pass(git_checkout_index(g_repo, NULL, &opts));
cl_assert_equal_i(false, git_path_isfile("./testrepo/README")); cl_assert_equal_i(false, git_path_isfile("./testrepo/README"));
test_file_contents("./testrepo/branch_file.txt", "hi\nbye!\n"); check_file_contents("./testrepo/branch_file.txt", "hi\nbye!\n");
test_file_contents("./testrepo/new.txt", "my new file\n"); check_file_contents("./testrepo/new.txt", "my new file\n");
} }
void test_checkout_index__honor_the_gitattributes_directives(void) void test_checkout_index__honor_the_gitattributes_directives(void)
...@@ -106,9 +106,9 @@ void test_checkout_index__honor_the_gitattributes_directives(void) ...@@ -106,9 +106,9 @@ void test_checkout_index__honor_the_gitattributes_directives(void)
cl_git_pass(git_checkout_index(g_repo, NULL, &opts)); cl_git_pass(git_checkout_index(g_repo, NULL, &opts));
test_file_contents("./testrepo/README", "hey there\n"); check_file_contents("./testrepo/README", "hey there\n");
test_file_contents("./testrepo/new.txt", "my new file\n"); check_file_contents("./testrepo/new.txt", "my new file\n");
test_file_contents("./testrepo/branch_file.txt", "hi\r\nbye!\r\n"); check_file_contents("./testrepo/branch_file.txt", "hi\r\nbye!\r\n");
} }
void test_checkout_index__honor_coreautocrlf_setting_set_to_true(void) void test_checkout_index__honor_coreautocrlf_setting_set_to_true(void)
...@@ -124,7 +124,7 @@ void test_checkout_index__honor_coreautocrlf_setting_set_to_true(void) ...@@ -124,7 +124,7 @@ void test_checkout_index__honor_coreautocrlf_setting_set_to_true(void)
cl_git_pass(git_checkout_index(g_repo, NULL, &opts)); cl_git_pass(git_checkout_index(g_repo, NULL, &opts));
test_file_contents("./testrepo/README", expected_readme_text); check_file_contents("./testrepo/README", expected_readme_text);
#endif #endif
} }
...@@ -139,7 +139,7 @@ void test_checkout_index__honor_coresymlinks_setting_set_to_true(void) ...@@ -139,7 +139,7 @@ void test_checkout_index__honor_coresymlinks_setting_set_to_true(void)
cl_git_pass(git_checkout_index(g_repo, NULL, &opts)); cl_git_pass(git_checkout_index(g_repo, NULL, &opts));
#ifdef GIT_WIN32 #ifdef GIT_WIN32
test_file_contents("./testrepo/link_to_new.txt", "new.txt"); check_file_contents("./testrepo/link_to_new.txt", "new.txt");
#else #else
{ {
char link_data[1024]; char link_data[1024];
...@@ -149,7 +149,7 @@ void test_checkout_index__honor_coresymlinks_setting_set_to_true(void) ...@@ -149,7 +149,7 @@ void test_checkout_index__honor_coresymlinks_setting_set_to_true(void)
link_data[link_size] = '\0'; link_data[link_size] = '\0';
cl_assert_equal_i(link_size, strlen("new.txt")); cl_assert_equal_i(link_size, strlen("new.txt"));
cl_assert_equal_s(link_data, "new.txt"); cl_assert_equal_s(link_data, "new.txt");
test_file_contents("./testrepo/link_to_new.txt", "my new file\n"); check_file_contents("./testrepo/link_to_new.txt", "my new file\n");
} }
#endif #endif
} }
...@@ -164,7 +164,7 @@ void test_checkout_index__honor_coresymlinks_setting_set_to_false(void) ...@@ -164,7 +164,7 @@ void test_checkout_index__honor_coresymlinks_setting_set_to_false(void)
cl_git_pass(git_checkout_index(g_repo, NULL, &opts)); cl_git_pass(git_checkout_index(g_repo, NULL, &opts));
test_file_contents("./testrepo/link_to_new.txt", "new.txt"); check_file_contents("./testrepo/link_to_new.txt", "new.txt");
} }
void test_checkout_index__donot_overwrite_modified_file_by_default(void) void test_checkout_index__donot_overwrite_modified_file_by_default(void)
...@@ -180,7 +180,7 @@ void test_checkout_index__donot_overwrite_modified_file_by_default(void) ...@@ -180,7 +180,7 @@ void test_checkout_index__donot_overwrite_modified_file_by_default(void)
cl_git_pass(git_checkout_index(g_repo, NULL, &opts)); cl_git_pass(git_checkout_index(g_repo, NULL, &opts));
test_file_contents("./testrepo/new.txt", "This isn't what's stored!"); check_file_contents("./testrepo/new.txt", "This isn't what's stored!");
} }
void test_checkout_index__can_overwrite_modified_file(void) void test_checkout_index__can_overwrite_modified_file(void)
...@@ -193,7 +193,7 @@ void test_checkout_index__can_overwrite_modified_file(void) ...@@ -193,7 +193,7 @@ void test_checkout_index__can_overwrite_modified_file(void)
cl_git_pass(git_checkout_index(g_repo, NULL, &opts)); cl_git_pass(git_checkout_index(g_repo, NULL, &opts));
test_file_contents("./testrepo/new.txt", "my new file\n"); check_file_contents("./testrepo/new.txt", "my new file\n");
} }
void test_checkout_index__options_disable_filters(void) void test_checkout_index__options_disable_filters(void)
...@@ -207,14 +207,14 @@ void test_checkout_index__options_disable_filters(void) ...@@ -207,14 +207,14 @@ void test_checkout_index__options_disable_filters(void)
cl_git_pass(git_checkout_index(g_repo, NULL, &opts)); cl_git_pass(git_checkout_index(g_repo, NULL, &opts));
test_file_contents("./testrepo/new.txt", "my new file\r\n"); check_file_contents("./testrepo/new.txt", "my new file\r\n");
p_unlink("./testrepo/new.txt"); p_unlink("./testrepo/new.txt");
opts.disable_filters = true; opts.disable_filters = true;
cl_git_pass(git_checkout_index(g_repo, NULL, &opts)); cl_git_pass(git_checkout_index(g_repo, NULL, &opts));
test_file_contents("./testrepo/new.txt", "my new file\n"); check_file_contents("./testrepo/new.txt", "my new file\n");
} }
void test_checkout_index__options_dir_modes(void) void test_checkout_index__options_dir_modes(void)
...@@ -274,7 +274,7 @@ void test_checkout_index__options_open_flags(void) ...@@ -274,7 +274,7 @@ void test_checkout_index__options_open_flags(void)
opts.checkout_strategy = GIT_CHECKOUT_FORCE; opts.checkout_strategy = GIT_CHECKOUT_FORCE;
cl_git_pass(git_checkout_index(g_repo, NULL, &opts)); cl_git_pass(git_checkout_index(g_repo, NULL, &opts));
test_file_contents("./testrepo/new.txt", "hi\nmy new file\n"); check_file_contents("./testrepo/new.txt", "hi\nmy new file\n");
} }
struct notify_data { struct notify_data {
...@@ -469,9 +469,9 @@ void test_checkout_index__can_update_prefixed_files(void) ...@@ -469,9 +469,9 @@ void test_checkout_index__can_update_prefixed_files(void)
/* remove untracked will remove the .gitattributes file before the blobs /* remove untracked will remove the .gitattributes file before the blobs
* were created, so they will have had crlf filtering applied on Windows * were created, so they will have had crlf filtering applied on Windows
*/ */
test_file_contents_nocr("./testrepo/README", "hey there\n"); check_file_contents_nocr("./testrepo/README", "hey there\n");
test_file_contents_nocr("./testrepo/branch_file.txt", "hi\nbye!\n"); check_file_contents_nocr("./testrepo/branch_file.txt", "hi\nbye!\n");
test_file_contents_nocr("./testrepo/new.txt", "my new file\n"); check_file_contents_nocr("./testrepo/new.txt", "my new file\n");
cl_assert(!git_path_exists("testrepo/READ")); cl_assert(!git_path_exists("testrepo/READ"));
cl_assert(!git_path_exists("testrepo/README.after")); cl_assert(!git_path_exists("testrepo/README.after"));
...@@ -503,5 +503,5 @@ void test_checkout_index__issue_1397(void) ...@@ -503,5 +503,5 @@ void test_checkout_index__issue_1397(void)
cl_git_pass(git_checkout_index(g_repo, NULL, &opts)); cl_git_pass(git_checkout_index(g_repo, NULL, &opts));
test_file_contents("./issue_1397/crlf_file.txt", "first line\r\nsecond line\r\nboth with crlf"); check_file_contents("./issue_1397/crlf_file.txt", "first line\r\nsecond line\r\nboth with crlf");
} }
...@@ -248,7 +248,7 @@ void test_checkout_tree__can_update_only(void) ...@@ -248,7 +248,7 @@ void test_checkout_tree__can_update_only(void)
cl_assert(!git_path_isdir("testrepo/a")); cl_assert(!git_path_isdir("testrepo/a"));
test_file_contents_nocr("testrepo/branch_file.txt", "hi\nbye!\n"); check_file_contents_nocr("testrepo/branch_file.txt", "hi\nbye!\n");
/* now checkout branch but with update only */ /* now checkout branch but with update only */
...@@ -269,7 +269,7 @@ void test_checkout_tree__can_update_only(void) ...@@ -269,7 +269,7 @@ void test_checkout_tree__can_update_only(void)
cl_assert(!git_path_isdir("testrepo/a")); cl_assert(!git_path_isdir("testrepo/a"));
/* but this file still should have been updated */ /* but this file still should have been updated */
test_file_contents_nocr("testrepo/branch_file.txt", "hi\n"); check_file_contents_nocr("testrepo/branch_file.txt", "hi\n");
git_object_free(obj); git_object_free(obj);
} }
...@@ -500,7 +500,7 @@ void test_checkout_tree__issue_1397(void) ...@@ -500,7 +500,7 @@ void test_checkout_tree__issue_1397(void)
cl_git_pass(git_checkout_tree(g_repo, tree, &opts)); cl_git_pass(git_checkout_tree(g_repo, tree, &opts));
test_file_contents("./issue_1397/crlf_file.txt", "first line\r\nsecond line\r\nboth with crlf"); check_file_contents("./issue_1397/crlf_file.txt", "first line\r\nsecond line\r\nboth with crlf");
git_object_free(tree); git_object_free(tree);
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment