Blame tests/patch/parse.c

Packit Service 20376f
#include "clar_libgit2.h"
Packit Service 20376f
#include "patch.h"
Packit Service 20376f
#include "patch_parse.h"
Packit Service 20376f
Packit Service 20376f
#include "patch_common.h"
Packit Service 20376f
Packit Service 20376f
static void ensure_patch_validity(git_patch *patch)
Packit Service 20376f
{
Packit Service 20376f
	const git_diff_delta *delta;
Packit Service 20376f
	char idstr[GIT_OID_HEXSZ+1] = {0};
Packit Service 20376f
Packit Service 20376f
	cl_assert((delta = git_patch_get_delta(patch)) != NULL);
Packit Service 20376f
	cl_assert_equal_i(2, delta->nfiles);
Packit Service 20376f
Packit Service 20376f
	cl_assert_equal_s(delta->old_file.path, "file.txt");
Packit Service 20376f
	cl_assert(delta->old_file.mode == GIT_FILEMODE_BLOB);
Packit Service 20376f
	cl_assert_equal_i(7, delta->old_file.id_abbrev);
Packit Service 20376f
	git_oid_nfmt(idstr, delta->old_file.id_abbrev, &delta->old_file.id);
Packit Service 20376f
	cl_assert_equal_s(idstr, "9432026");
Packit Service 20376f
	cl_assert_equal_i(0, delta->old_file.size);
Packit Service 20376f
Packit Service 20376f
	cl_assert_equal_s(delta->new_file.path, "file.txt");
Packit Service 20376f
	cl_assert(delta->new_file.mode == GIT_FILEMODE_BLOB);
Packit Service 20376f
	cl_assert_equal_i(7, delta->new_file.id_abbrev);
Packit Service 20376f
	git_oid_nfmt(idstr, delta->new_file.id_abbrev, &delta->new_file.id);
Packit Service 20376f
	cl_assert_equal_s(idstr, "cd8fd12");
Packit Service 20376f
	cl_assert_equal_i(0, delta->new_file.size);
Packit Service 20376f
}
Packit Service 20376f
Packit Service 20376f
void test_patch_parse__original_to_change_middle(void)
Packit Service 20376f
{
Packit Service 20376f
	git_patch *patch;
Packit Service 20376f
Packit Service 20376f
	cl_git_pass(git_patch_from_buffer(
Packit Service 20376f
		&patch, PATCH_ORIGINAL_TO_CHANGE_MIDDLE,
Packit Service 20376f
		strlen(PATCH_ORIGINAL_TO_CHANGE_MIDDLE), NULL));
Packit Service 20376f
	ensure_patch_validity(patch);
Packit Service 20376f
	git_patch_free(patch);
Packit Service 20376f
}
Packit Service 20376f
Packit Service 20376f
void test_patch_parse__leading_and_trailing_garbage(void)
Packit Service 20376f
{
Packit Service 20376f
	git_patch *patch;
Packit Service 20376f
	const char *leading = "This is some leading garbage.\n"
Packit Service 20376f
		"Maybe it's email headers?\n"
Packit Service 20376f
		"\n"
Packit Service 20376f
		PATCH_ORIGINAL_TO_CHANGE_MIDDLE;
Packit Service 20376f
	const char *trailing = PATCH_ORIGINAL_TO_CHANGE_MIDDLE
Packit Service 20376f
		"\n"
Packit Service 20376f
		"This is some trailing garbage.\n"
Packit Service 20376f
		"Maybe it's an email signature?\n";
Packit Service 20376f
	const char *both = "Here's some leading garbage\n"
Packit Service 20376f
		PATCH_ORIGINAL_TO_CHANGE_MIDDLE
Packit Service 20376f
		"And here's some trailing.\n";
Packit Service 20376f
Packit Service 20376f
	cl_git_pass(git_patch_from_buffer(&patch, leading, strlen(leading),
Packit Service 20376f
		NULL));
Packit Service 20376f
	ensure_patch_validity(patch);
Packit Service 20376f
	git_patch_free(patch);
Packit Service 20376f
Packit Service 20376f
	cl_git_pass(git_patch_from_buffer(&patch, trailing, strlen(trailing),
Packit Service 20376f
		NULL));
Packit Service 20376f
	ensure_patch_validity(patch);
Packit Service 20376f
	git_patch_free(patch);
Packit Service 20376f
Packit Service 20376f
	cl_git_pass(git_patch_from_buffer(&patch, both, strlen(both),
Packit Service 20376f
		NULL));
Packit Service 20376f
	ensure_patch_validity(patch);
Packit Service 20376f
	git_patch_free(patch);
Packit Service 20376f
}
Packit Service 20376f
Packit Service 20376f
void test_patch_parse__nonpatches_fail_with_notfound(void)
Packit Service 20376f
{
Packit Service 20376f
	git_patch *patch;
Packit Service 20376f
Packit Service 20376f
	cl_git_fail_with(GIT_ENOTFOUND,
Packit Service 20376f
		git_patch_from_buffer(&patch, PATCH_NOT_A_PATCH,
Packit Service 20376f
		strlen(PATCH_NOT_A_PATCH), NULL));
Packit Service 20376f
}
Packit Service 20376f
Packit Service 20376f
void test_patch_parse__invalid_patches_fails(void)
Packit Service 20376f
{
Packit Service 20376f
	git_patch *patch;
Packit Service 20376f
Packit Service 20376f
	cl_git_fail_with(GIT_ERROR,
Packit Service 20376f
		git_patch_from_buffer(&patch, PATCH_CORRUPT_GIT_HEADER,
Packit Service 20376f
		strlen(PATCH_CORRUPT_GIT_HEADER), NULL));
Packit Service 20376f
	cl_git_fail_with(GIT_ERROR,
Packit Service 20376f
		git_patch_from_buffer(&patch,
Packit Service 20376f
		PATCH_CORRUPT_MISSING_NEW_FILE,
Packit Service 20376f
		strlen(PATCH_CORRUPT_MISSING_NEW_FILE), NULL));
Packit Service 20376f
	cl_git_fail_with(GIT_ERROR,
Packit Service 20376f
		git_patch_from_buffer(&patch,
Packit Service 20376f
		PATCH_CORRUPT_MISSING_OLD_FILE,
Packit Service 20376f
		strlen(PATCH_CORRUPT_MISSING_OLD_FILE), NULL));
Packit Service 20376f
	cl_git_fail_with(GIT_ERROR,
Packit Service 20376f
		git_patch_from_buffer(&patch, PATCH_CORRUPT_NO_CHANGES,
Packit Service 20376f
		strlen(PATCH_CORRUPT_NO_CHANGES), NULL));
Packit Service 20376f
	cl_git_fail_with(GIT_ERROR,
Packit Service 20376f
		git_patch_from_buffer(&patch,
Packit Service 20376f
		PATCH_CORRUPT_MISSING_HUNK_HEADER,
Packit Service 20376f
		strlen(PATCH_CORRUPT_MISSING_HUNK_HEADER), NULL));
Packit Service 20376f
}
Packit Service 20376f