diff options
author | Edward Thomson <ethomson@edwardthomson.com> | 2018-01-21 12:28:13 +0000 |
---|---|---|
committer | Edward Thomson <ethomson@edwardthomson.com> | 2018-01-21 12:28:13 +0000 |
commit | 2a8841ae8750b52645eb85dd56305798a429a26d (patch) | |
tree | 2d03997a949ac7b9339803be3ca90e7c1b7c44e9 | |
parent | 7f52bc5a0f4614608ec0dc47edb1ae64f1b9e941 (diff) | |
download | libgit2-ethomson/conflicts_crlf.tar.gz |
merge: test CR/LF conflicts for CR/LF filesethomson/conflicts_crlf
Ensure that when the files being merged have CR/LF line endings that the
conflict markers produced in the conflict file also have CR/LF line
endings.
-rw-r--r-- | tests/merge/files.c | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/tests/merge/files.c b/tests/merge/files.c index daa73fada..6f5a1fd9c 100644 --- a/tests/merge/files.c +++ b/tests/merge/files.c @@ -377,3 +377,51 @@ void test_merge_files__handles_binaries_when_favored(void) git_merge_file_result_free(&result); } + +void test_merge_files__crlf_conflict_markers_for_crlf_files(void) +{ + git_merge_file_input ancestor = GIT_MERGE_FILE_INPUT_INIT, + ours = GIT_MERGE_FILE_INPUT_INIT, + theirs = GIT_MERGE_FILE_INPUT_INIT; + git_merge_file_options opts = GIT_MERGE_FILE_OPTIONS_INIT; + git_merge_file_result result = {0}; + + const char *expected = + "<<<<<<< file.txt\r\nThis file\r\ndoes, too.\r\n" + "=======\r\nAnd so does\r\nthis one.\r\n>>>>>>> file.txt\r\n"; + size_t expected_len = strlen(expected); + + const char *expected_diff3 = + "<<<<<<< file.txt\r\nThis file\r\ndoes, too.\r\n" + "||||||| file.txt\r\nThis file has\r\nCRLF line endings.\r\n" + "=======\r\nAnd so does\r\nthis one.\r\n>>>>>>> file.txt\r\n"; + size_t expected_diff3_len = strlen(expected_diff3); + + ancestor.ptr = "This file has\r\nCRLF line endings.\r\n"; + ancestor.size = 35; + ancestor.path = "file.txt"; + ancestor.mode = 0100644; + + ours.ptr = "This file\r\ndoes, too.\r\n"; + ours.size = 23; + ours.path = "file.txt"; + ours.mode = 0100644; + + theirs.ptr = "And so does\r\nthis one.\r\n"; + theirs.size = 24; + theirs.path = "file.txt"; + theirs.mode = 0100644; + + cl_git_pass(git_merge_file(&result, &ancestor, &ours, &theirs, &opts)); + cl_assert_equal_i(0, result.automergeable); + cl_assert_equal_i(expected_len, result.len); + cl_assert(memcmp(expected, result.ptr, expected_len) == 0); + git_merge_file_result_free(&result); + + opts.flags |= GIT_MERGE_FILE_STYLE_DIFF3; + cl_git_pass(git_merge_file(&result, &ancestor, &ours, &theirs, &opts)); + cl_assert_equal_i(0, result.automergeable); + cl_assert_equal_i(expected_diff3_len, result.len); + cl_assert(memcmp(expected_diff3, result.ptr, expected_len) == 0); + git_merge_file_result_free(&result); +} |