Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/libgit2.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRussell Belfer <rb@github.com>2013-07-24 01:34:31 +0400
committerRussell Belfer <rb@github.com>2013-07-24 01:34:31 +0400
commit197b8966dba18770e4b77a17173c8f354ac175e3 (patch)
tree773f3621e87acf5543bb0443f8f1ba0437c78719 /tests-clar/diff
parentb4a4cf24a539ce07d86fed6835c98154fb40e723 (diff)
Add hunk/file headers to git_diff_patch_size
This allows git_diff_patch_size to account for hunk headers and file headers in the returned size. This required some refactoring of the code that is used to print file headers so that it could be invoked by the git_diff_patch_size API. Also this increases the test coverage and fixes an off-by-one bug in the size calculation when newline changes happen at the end of the file.
Diffstat (limited to 'tests-clar/diff')
-rw-r--r--tests-clar/diff/patch.c66
1 files changed, 37 insertions, 29 deletions
diff --git a/tests-clar/diff/patch.c b/tests-clar/diff/patch.c
index 51baadf2e..6a33fa990 100644
--- a/tests-clar/diff/patch.c
+++ b/tests-clar/diff/patch.c
@@ -128,8 +128,10 @@ void test_diff_patch__to_string(void)
cl_assert_equal_s(expected, text);
- cl_assert_equal_sz(31, git_diff_patch_size(patch, 0));
- cl_assert_equal_sz(31, git_diff_patch_size(patch, 1));
+ cl_assert_equal_sz(31, git_diff_patch_size(patch, 0, 0, 0));
+ cl_assert_equal_sz(31, git_diff_patch_size(patch, 1, 0, 0));
+ cl_assert_equal_sz(31 + 16, git_diff_patch_size(patch, 1, 1, 0));
+ cl_assert_equal_sz(strlen(expected), git_diff_patch_size(patch, 1, 1, 1));
git__free(text);
git_diff_patch_free(patch);
@@ -411,8 +413,7 @@ void test_diff_patch__hunks_have_correct_line_numbers(void)
static void check_single_patch_stats(
git_repository *repo, size_t hunks,
- size_t adds, size_t dels, size_t ctxt,
- size_t size_with_context, size_t size_without_context,
+ size_t adds, size_t dels, size_t ctxt, size_t *sizes,
const char *expected)
{
git_diff_list *diff;
@@ -441,14 +442,19 @@ static void check_single_patch_stats(
cl_git_pass(git_diff_patch_to_str(&text, patch));
cl_assert_equal_s(expected, text);
git__free(text);
- }
- if (size_with_context)
- cl_assert_equal_sz(
- size_with_context, git_diff_patch_size(patch, 1));
- if (size_without_context)
cl_assert_equal_sz(
- size_without_context, git_diff_patch_size(patch, 0));
+ strlen(expected), git_diff_patch_size(patch, 1, 1, 1));
+ }
+
+ if (sizes) {
+ if (sizes[0])
+ cl_assert_equal_sz(sizes[0], git_diff_patch_size(patch, 0, 0, 0));
+ if (sizes[1])
+ cl_assert_equal_sz(sizes[1], git_diff_patch_size(patch, 1, 0, 0));
+ if (sizes[2])
+ cl_assert_equal_sz(sizes[2], git_diff_patch_size(patch, 1, 1, 0));
+ }
/* walk lines in hunk with basic sanity checks */
for (; hunks > 0; --hunks) {
@@ -492,6 +498,23 @@ void test_diff_patch__line_counts_with_eofnl(void)
git_buf content = GIT_BUF_INIT;
const char *end;
git_index *index;
+ const char *expected =
+ /* below is pasted output of 'git diff' with fn context removed */
+ "diff --git a/songof7cities.txt b/songof7cities.txt\n"
+ "index 378a7d9..3d0154e 100644\n"
+ "--- a/songof7cities.txt\n"
+ "+++ b/songof7cities.txt\n"
+ "@@ -42,7 +42,7 @@ With peoples undefeated of the dark, enduring blood.\n"
+ " \n"
+ " To the sound of trumpets shall their seed restore my Cities\n"
+ " Wealthy and well-weaponed, that once more may I behold\n"
+ "-All the world go softly when it walks before my Cities,\n"
+ "+#All the world go softly when it walks before my Cities,\n"
+ " And the horses and the chariots fleeing from them as of old!\n"
+ " \n"
+ " -- Rudyard Kipling\n"
+ "\\ No newline at end of file\n";
+ size_t expected_sizes[3] = { 115, 119 + 115 + 114, 119 + 115 + 114 + 71 };
g_repo = cl_git_sandbox_init("renames");
@@ -506,14 +529,14 @@ void test_diff_patch__line_counts_with_eofnl(void)
git_buf_consume(&content, end);
cl_git_rewritefile("renames/songof7cities.txt", content.ptr);
- check_single_patch_stats(g_repo, 1, 0, 1, 3, 0, 0, NULL);
+ check_single_patch_stats(g_repo, 1, 0, 1, 3, NULL, NULL);
/* remove trailing whitespace */
git_buf_rtrim(&content);
cl_git_rewritefile("renames/songof7cities.txt", content.ptr);
- check_single_patch_stats(g_repo, 2, 1, 2, 6, 0, 0, NULL);
+ check_single_patch_stats(g_repo, 2, 1, 2, 6, NULL, NULL);
/* add trailing whitespace */
@@ -525,7 +548,7 @@ void test_diff_patch__line_counts_with_eofnl(void)
cl_git_pass(git_buf_putc(&content, '\n'));
cl_git_rewritefile("renames/songof7cities.txt", content.ptr);
- check_single_patch_stats(g_repo, 1, 1, 1, 3, 0, 0, NULL);
+ check_single_patch_stats(g_repo, 1, 1, 1, 3, NULL, NULL);
/* no trailing whitespace as context line */
@@ -548,22 +571,7 @@ void test_diff_patch__line_counts_with_eofnl(void)
cl_git_rewritefile("renames/songof7cities.txt", content.ptr);
check_single_patch_stats(
- g_repo, 1, 1, 1, 6, 349, 115,
- /* below is pasted output of 'git diff' with fn context removed */
- "diff --git a/songof7cities.txt b/songof7cities.txt\n"
- "index 378a7d9..3d0154e 100644\n"
- "--- a/songof7cities.txt\n"
- "+++ b/songof7cities.txt\n"
- "@@ -42,7 +42,7 @@ With peoples undefeated of the dark, enduring blood.\n"
- " \n"
- " To the sound of trumpets shall their seed restore my Cities\n"
- " Wealthy and well-weaponed, that once more may I behold\n"
- "-All the world go softly when it walks before my Cities,\n"
- "+#All the world go softly when it walks before my Cities,\n"
- " And the horses and the chariots fleeing from them as of old!\n"
- " \n"
- " -- Rudyard Kipling\n"
- "\\ No newline at end of file\n");
+ g_repo, 1, 1, 1, 6, expected_sizes, expected);
git_buf_free(&content);
git_config_free(cfg);