summaryrefslogtreecommitdiff
path: root/tests/apply/fromdiff.c
diff options
context:
space:
mode:
Diffstat (limited to 'tests/apply/fromdiff.c')
-rw-r--r--tests/apply/fromdiff.c378
1 files changed, 0 insertions, 378 deletions
diff --git a/tests/apply/fromdiff.c b/tests/apply/fromdiff.c
deleted file mode 100644
index 69dfe0987..000000000
--- a/tests/apply/fromdiff.c
+++ /dev/null
@@ -1,378 +0,0 @@
-#include "clar_libgit2.h"
-#include "git2/sys/repository.h"
-
-#include "apply.h"
-#include "repository.h"
-
-#include "../patch/patch_common.h"
-
-static git_repository *repo = NULL;
-static git_diff_options binary_opts = GIT_DIFF_OPTIONS_INIT;
-
-void test_apply_fromdiff__initialize(void)
-{
- repo = cl_git_sandbox_init("renames");
-
- binary_opts.flags |= GIT_DIFF_SHOW_BINARY;
-}
-
-void test_apply_fromdiff__cleanup(void)
-{
- cl_git_sandbox_cleanup();
-}
-
-static int apply_gitbuf(
- const git_buf *old,
- const char *oldname,
- const git_buf *new,
- const char *newname,
- const char *patch_expected,
- const git_diff_options *diff_opts)
-{
- git_patch *patch;
- git_buf result = GIT_BUF_INIT;
- git_buf patchbuf = GIT_BUF_INIT;
- char *filename;
- unsigned int mode;
- int error;
-
- cl_git_pass(git_patch_from_buffers(&patch,
- old ? old->ptr : NULL, old ? old->size : 0,
- oldname,
- new ? new->ptr : NULL, new ? new->size : 0,
- newname,
- diff_opts));
-
- if (patch_expected) {
- cl_git_pass(git_patch_to_buf(&patchbuf, patch));
- cl_assert_equal_s(patch_expected, patchbuf.ptr);
- }
-
- error = git_apply__patch(&result, &filename, &mode, old ? old->ptr : NULL, old ? old->size : 0, patch, NULL);
-
- if (error == 0 && new == NULL) {
- cl_assert_equal_i(0, result.size);
- cl_assert_equal_p(NULL, filename);
- cl_assert_equal_i(0, mode);
- }
- else if (error == 0) {
- cl_assert_equal_s(new->ptr, result.ptr);
- cl_assert_equal_s(newname ? newname : oldname, filename);
- cl_assert_equal_i(0100644, mode);
- }
-
- git__free(filename);
- git_buf_dispose(&result);
- git_buf_dispose(&patchbuf);
- git_patch_free(patch);
-
- return error;
-}
-
-static int apply_buf(
- const char *old,
- const char *oldname,
- const char *new,
- const char *newname,
- const char *patch_expected,
- const git_diff_options *diff_opts)
-{
- git_buf o = GIT_BUF_INIT, n = GIT_BUF_INIT,
- *optr = NULL, *nptr = NULL;
-
- if (old) {
- o.ptr = (char *)old;
- o.size = strlen(old);
- optr = &o;
- }
-
- if (new) {
- n.ptr = (char *)new;
- n.size = strlen(new);
- nptr = &n;
- }
-
- return apply_gitbuf(optr, oldname, nptr, newname, patch_expected, diff_opts);
-}
-
-void test_apply_fromdiff__change_middle(void)
-{
- cl_git_pass(apply_buf(
- FILE_ORIGINAL, "file.txt",
- FILE_CHANGE_MIDDLE, "file.txt",
- PATCH_ORIGINAL_TO_CHANGE_MIDDLE, NULL));
-}
-
-void test_apply_fromdiff__change_middle_nocontext(void)
-{
- git_diff_options diff_opts = GIT_DIFF_OPTIONS_INIT;
- diff_opts.context_lines = 0;
-
- cl_git_pass(apply_buf(
- FILE_ORIGINAL, "file.txt",
- FILE_CHANGE_MIDDLE, "file.txt",
- PATCH_ORIGINAL_TO_CHANGE_MIDDLE_NOCONTEXT, &diff_opts));
-}
-
-void test_apply_fromdiff__change_firstline(void)
-{
- cl_git_pass(apply_buf(
- FILE_ORIGINAL, "file.txt",
- FILE_CHANGE_FIRSTLINE, "file.txt",
- PATCH_ORIGINAL_TO_CHANGE_FIRSTLINE, NULL));
-}
-
-void test_apply_fromdiff__lastline(void)
-{
- cl_git_pass(apply_buf(
- FILE_ORIGINAL, "file.txt",
- FILE_CHANGE_LASTLINE, "file.txt",
- PATCH_ORIGINAL_TO_CHANGE_LASTLINE, NULL));
-}
-
-void test_apply_fromdiff__change_middle_and_lastline_nocontext(void)
-{
- git_diff_options diff_opts = GIT_DIFF_OPTIONS_INIT;
- diff_opts.context_lines = 0;
-
- cl_git_pass(apply_buf(
- FILE_ORIGINAL, "file.txt",
- FILE_CHANGE_MIDDLE_AND_LASTLINE, "file.txt",
- PATCH_ORIGINAL_TO_CHANGE_MIDDLE_AND_LASTLINE_NOCONTEXT, &diff_opts));
-}
-
-void test_apply_fromdiff__prepend(void)
-{
- cl_git_pass(apply_buf(
- FILE_ORIGINAL, "file.txt",
- FILE_PREPEND, "file.txt",
- PATCH_ORIGINAL_TO_PREPEND, NULL));
-}
-
-void test_apply_fromdiff__prepend_nocontext(void)
-{
- git_diff_options diff_opts = GIT_DIFF_OPTIONS_INIT;
- diff_opts.context_lines = 0;
-
- cl_git_pass(apply_buf(
- FILE_ORIGINAL, "file.txt",
- FILE_PREPEND, "file.txt",
- PATCH_ORIGINAL_TO_PREPEND_NOCONTEXT, &diff_opts));
-}
-
-void test_apply_fromdiff__prepend_and_change(void)
-{
- cl_git_pass(apply_buf(
- FILE_ORIGINAL, "file.txt",
- FILE_PREPEND_AND_CHANGE, "file.txt",
- PATCH_ORIGINAL_TO_PREPEND_AND_CHANGE, NULL));
-}
-
-void test_apply_fromdiff__prepend_and_change_nocontext(void)
-{
- git_diff_options diff_opts = GIT_DIFF_OPTIONS_INIT;
- diff_opts.context_lines = 0;
-
- cl_git_pass(apply_buf(
- FILE_ORIGINAL, "file.txt",
- FILE_PREPEND_AND_CHANGE, "file.txt",
- PATCH_ORIGINAL_TO_PREPEND_AND_CHANGE_NOCONTEXT, &diff_opts));
-}
-
-void test_apply_fromdiff__delete_and_change(void)
-{
- cl_git_pass(apply_buf(
- FILE_ORIGINAL, "file.txt",
- FILE_DELETE_AND_CHANGE, "file.txt",
- PATCH_ORIGINAL_TO_DELETE_AND_CHANGE, NULL));
-}
-
-void test_apply_fromdiff__delete_and_change_nocontext(void)
-{
- git_diff_options diff_opts = GIT_DIFF_OPTIONS_INIT;
- diff_opts.context_lines = 0;
-
- cl_git_pass(apply_buf(
- FILE_ORIGINAL, "file.txt",
- FILE_DELETE_AND_CHANGE, "file.txt",
- PATCH_ORIGINAL_TO_DELETE_AND_CHANGE_NOCONTEXT, &diff_opts));
-}
-
-void test_apply_fromdiff__delete_firstline(void)
-{
- cl_git_pass(apply_buf(
- FILE_ORIGINAL, "file.txt",
- FILE_DELETE_FIRSTLINE, "file.txt",
- PATCH_ORIGINAL_TO_DELETE_FIRSTLINE, NULL));
-}
-
-void test_apply_fromdiff__append(void)
-{
- cl_git_pass(apply_buf(
- FILE_ORIGINAL, "file.txt",
- FILE_APPEND, "file.txt",
- PATCH_ORIGINAL_TO_APPEND, NULL));
-}
-
-void test_apply_fromdiff__append_nocontext(void)
-{
- git_diff_options diff_opts = GIT_DIFF_OPTIONS_INIT;
- diff_opts.context_lines = 0;
-
- cl_git_pass(apply_buf(
- FILE_ORIGINAL, "file.txt",
- FILE_APPEND, "file.txt",
- PATCH_ORIGINAL_TO_APPEND_NOCONTEXT, &diff_opts));
-}
-
-void test_apply_fromdiff__prepend_and_append(void)
-{
- cl_git_pass(apply_buf(
- FILE_ORIGINAL, "file.txt",
- FILE_PREPEND_AND_APPEND, "file.txt",
- PATCH_ORIGINAL_TO_PREPEND_AND_APPEND, NULL));
-}
-
-void test_apply_fromdiff__to_empty_file(void)
-{
- cl_git_pass(apply_buf(
- FILE_ORIGINAL, "file.txt",
- "", NULL,
- PATCH_ORIGINAL_TO_EMPTY_FILE, NULL));
-}
-
-void test_apply_fromdiff__from_empty_file(void)
-{
- cl_git_pass(apply_buf(
- "", NULL,
- FILE_ORIGINAL, "file.txt",
- PATCH_EMPTY_FILE_TO_ORIGINAL, NULL));
-}
-
-void test_apply_fromdiff__add(void)
-{
- cl_git_pass(apply_buf(
- NULL, NULL,
- FILE_ORIGINAL, "file.txt",
- PATCH_ADD_ORIGINAL, NULL));
-}
-
-void test_apply_fromdiff__delete(void)
-{
- cl_git_pass(apply_buf(
- FILE_ORIGINAL, "file.txt",
- NULL, NULL,
- PATCH_DELETE_ORIGINAL, NULL));
-}
-
-void test_apply_fromdiff__no_change(void)
-{
- cl_git_pass(apply_buf(
- FILE_ORIGINAL, "file.txt",
- FILE_ORIGINAL, "file.txt",
- "", NULL));
-}
-
-void test_apply_fromdiff__binary_add(void)
-{
- git_buf newfile = GIT_BUF_INIT;
-
- newfile.ptr = FILE_BINARY_DELTA_MODIFIED;
- newfile.size = FILE_BINARY_DELTA_MODIFIED_LEN;
-
- cl_git_pass(apply_gitbuf(
- NULL, NULL,
- &newfile, "binary.bin",
- NULL, &binary_opts));
-}
-
-void test_apply_fromdiff__binary_no_change(void)
-{
- git_buf original = GIT_BUF_INIT;
-
- original.ptr = FILE_BINARY_DELTA_ORIGINAL;
- original.size = FILE_BINARY_DELTA_ORIGINAL_LEN;
-
- cl_git_pass(apply_gitbuf(
- &original, "binary.bin",
- &original, "binary.bin",
- "", &binary_opts));
-}
-
-void test_apply_fromdiff__binary_change_delta(void)
-{
- git_buf original = GIT_BUF_INIT, modified = GIT_BUF_INIT;
-
- original.ptr = FILE_BINARY_DELTA_ORIGINAL;
- original.size = FILE_BINARY_DELTA_ORIGINAL_LEN;
-
- modified.ptr = FILE_BINARY_DELTA_MODIFIED;
- modified.size = FILE_BINARY_DELTA_MODIFIED_LEN;
-
- cl_git_pass(apply_gitbuf(
- &original, "binary.bin",
- &modified, "binary.bin",
- NULL, &binary_opts));
-}
-
-void test_apply_fromdiff__binary_change_literal(void)
-{
- git_buf original = GIT_BUF_INIT, modified = GIT_BUF_INIT;
-
- original.ptr = FILE_BINARY_LITERAL_ORIGINAL;
- original.size = FILE_BINARY_LITERAL_ORIGINAL_LEN;
-
- modified.ptr = FILE_BINARY_LITERAL_MODIFIED;
- modified.size = FILE_BINARY_LITERAL_MODIFIED_LEN;
-
- cl_git_pass(apply_gitbuf(
- &original, "binary.bin",
- &modified, "binary.bin",
- NULL, &binary_opts));
-}
-
-void test_apply_fromdiff__binary_delete(void)
-{
- git_buf original = GIT_BUF_INIT;
-
- original.ptr = FILE_BINARY_DELTA_MODIFIED;
- original.size = FILE_BINARY_DELTA_MODIFIED_LEN;
-
- cl_git_pass(apply_gitbuf(
- &original, "binary.bin",
- NULL, NULL,
- NULL, &binary_opts));
-}
-
-void test_apply_fromdiff__patching_correctly_truncates_source(void)
-{
- git_buf original = GIT_BUF_INIT, patched = GIT_BUF_INIT;
- git_patch *patch;
- unsigned int mode;
- char *path;
-
- cl_git_pass(git_patch_from_buffers(&patch,
- "foo\nbar", 7, "file.txt",
- "foo\nfoo", 7, "file.txt", NULL));
-
- /*
- * Previously, we would fail to correctly truncate the source buffer if
- * the source has more than one line and ends with a non-newline
- * character. In the following call, we thus truncate the source string
- * in the middle of the second line. Without the bug fixed, we would
- * successfully apply the patch to the source and return success. With
- * the overflow being fixed, we should return an error.
- */
- cl_git_fail_with(GIT_EAPPLYFAIL,
- git_apply__patch(&patched, &path, &mode,
- "foo\nbar\n", 5, patch, NULL));
-
- /* Verify that the patch succeeds if we do not truncate */
- cl_git_pass(git_apply__patch(&patched, &path, &mode,
- "foo\nbar\n", 7, patch, NULL));
-
- git_buf_dispose(&original);
- git_buf_dispose(&patched);
- git_patch_free(patch);
- git__free(path);
-}