summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorEdward Thomson <ethomson@github.com>2016-04-24 16:14:25 -0400
committerEdward Thomson <ethomson@github.com>2016-05-26 13:01:08 -0500
commit94e488a056942f1bb1ebbe7c9f0c693937726609 (patch)
tree3643c91f491d8f06c38a8289f791225956da69c5 /tests
parent17572f67ed9a3eb57b981d97468bd216d571bf10 (diff)
downloadlibgit2-94e488a056942f1bb1ebbe7c9f0c693937726609.tar.gz
patch: differentiate not found and invalid patches
Diffstat (limited to 'tests')
-rw-r--r--tests/patch/parse.c81
1 files changed, 75 insertions, 6 deletions
diff --git a/tests/patch/parse.c b/tests/patch/parse.c
index 92434827a..8350ac2dd 100644
--- a/tests/patch/parse.c
+++ b/tests/patch/parse.c
@@ -4,16 +4,11 @@
#include "patch_common.h"
-void test_patch_parse__original_to_change_middle(void)
+static void ensure_patch_validity(git_patch *patch)
{
- git_patch *patch;
const git_diff_delta *delta;
char idstr[GIT_OID_HEXSZ+1] = {0};
- cl_git_pass(git_patch_from_buffer(
- &patch, PATCH_ORIGINAL_TO_CHANGE_MIDDLE,
- strlen(PATCH_ORIGINAL_TO_CHANGE_MIDDLE), NULL));
-
cl_assert((delta = git_patch_get_delta(patch)) != NULL);
cl_assert_equal_i(2, delta->nfiles);
@@ -30,6 +25,80 @@ void test_patch_parse__original_to_change_middle(void)
git_oid_nfmt(idstr, delta->new_file.id_abbrev, &delta->new_file.id);
cl_assert_equal_s(idstr, "cd8fd12");
cl_assert_equal_i(0, delta->new_file.size);
+}
+
+void test_patch_parse__original_to_change_middle(void)
+{
+ git_patch *patch;
+ cl_git_pass(git_patch_from_buffer(
+ &patch, PATCH_ORIGINAL_TO_CHANGE_MIDDLE,
+ strlen(PATCH_ORIGINAL_TO_CHANGE_MIDDLE), NULL));
+ ensure_patch_validity(patch);
git_patch_free(patch);
}
+
+void test_patch_parse__leading_and_trailing_garbage(void)
+{
+ git_patch *patch;
+ const char *leading = "This is some leading garbage.\n"
+ "Maybe it's email headers?\n"
+ "\n"
+ PATCH_ORIGINAL_TO_CHANGE_MIDDLE;
+ const char *trailing = PATCH_ORIGINAL_TO_CHANGE_MIDDLE
+ "\n"
+ "This is some trailing garbage.\n"
+ "Maybe it's an email signature?\n";
+ const char *both = "Here's some leading garbage\n"
+ PATCH_ORIGINAL_TO_CHANGE_MIDDLE
+ "And here's some trailing.\n";
+
+ cl_git_pass(git_patch_from_buffer(&patch, leading, strlen(leading),
+ NULL));
+ ensure_patch_validity(patch);
+ git_patch_free(patch);
+
+ cl_git_pass(git_patch_from_buffer(&patch, trailing, strlen(trailing),
+ NULL));
+ ensure_patch_validity(patch);
+ git_patch_free(patch);
+
+ cl_git_pass(git_patch_from_buffer(&patch, both, strlen(both),
+ NULL));
+ ensure_patch_validity(patch);
+ git_patch_free(patch);
+}
+
+void test_patch_parse__nonpatches_fail_with_notfound(void)
+{
+ git_patch *patch;
+
+ cl_git_fail_with(GIT_ENOTFOUND,
+ git_patch_from_buffer(&patch, PATCH_NOT_A_PATCH,
+ strlen(PATCH_NOT_A_PATCH), NULL));
+}
+
+void test_patch_parse__invalid_patches_fails(void)
+{
+ git_patch *patch;
+
+ cl_git_fail_with(GIT_ERROR,
+ git_patch_from_buffer(&patch, PATCH_CORRUPT_GIT_HEADER,
+ strlen(PATCH_CORRUPT_GIT_HEADER), NULL));
+ cl_git_fail_with(GIT_ERROR,
+ git_patch_from_buffer(&patch,
+ PATCH_CORRUPT_MISSING_NEW_FILE,
+ strlen(PATCH_CORRUPT_MISSING_NEW_FILE), NULL));
+ cl_git_fail_with(GIT_ERROR,
+ git_patch_from_buffer(&patch,
+ PATCH_CORRUPT_MISSING_OLD_FILE,
+ strlen(PATCH_CORRUPT_MISSING_OLD_FILE), NULL));
+ cl_git_fail_with(GIT_ERROR,
+ git_patch_from_buffer(&patch, PATCH_CORRUPT_NO_CHANGES,
+ strlen(PATCH_CORRUPT_NO_CHANGES), NULL));
+ cl_git_fail_with(GIT_ERROR,
+ git_patch_from_buffer(&patch,
+ PATCH_CORRUPT_MISSING_HUNK_HEADER,
+ strlen(PATCH_CORRUPT_MISSING_HUNK_HEADER), NULL));
+}
+