summaryrefslogtreecommitdiff
path: root/tests-clar/diff/blob.c
diff options
context:
space:
mode:
authorVicent Marti <tanoku@gmail.com>2012-05-19 01:46:11 +0200
committerVicent Marti <tanoku@gmail.com>2012-05-19 01:46:11 +0200
commit5b9fac39d8a76b9139667c26a63e6b3f204b3977 (patch)
treee6ba28025f92c16563c4ffa8bc60b95f17d69691 /tests-clar/diff/blob.c
parent7ef9f1b5606c2672105ecbbf34c022a71ef212fe (diff)
parentad5df35a47d56c3d716d7a56eac4aeb611987c11 (diff)
downloadlibgit2-5b9fac39d8a76b9139667c26a63e6b3f204b3977.tar.gz
Merge branch 'development'v0.17.0
Conflicts: .travis.yml
Diffstat (limited to 'tests-clar/diff/blob.c')
-rw-r--r--tests-clar/diff/blob.c254
1 files changed, 254 insertions, 0 deletions
diff --git a/tests-clar/diff/blob.c b/tests-clar/diff/blob.c
new file mode 100644
index 000000000..6d7ad41d6
--- /dev/null
+++ b/tests-clar/diff/blob.c
@@ -0,0 +1,254 @@
+#include "clar_libgit2.h"
+#include "diff_helpers.h"
+
+static git_repository *g_repo = NULL;
+static diff_expects expected;
+static git_diff_options opts;
+static git_blob *d, *alien;
+
+void test_diff_blob__initialize(void)
+{
+ git_oid oid;
+
+ g_repo = cl_git_sandbox_init("attr");
+
+ memset(&opts, 0, sizeof(opts));
+ opts.context_lines = 1;
+ opts.interhunk_lines = 1;
+
+ memset(&expected, 0, sizeof(expected));
+
+ /* tests/resources/attr/root_test4.txt */
+ cl_git_pass(git_oid_fromstrn(&oid, "fe773770c5a6", 12));
+ cl_git_pass(git_blob_lookup_prefix(&d, g_repo, &oid, 6));
+
+ /* alien.png */
+ cl_git_pass(git_oid_fromstrn(&oid, "edf3dcee", 8));
+ cl_git_pass(git_blob_lookup_prefix(&alien, g_repo, &oid, 4));
+}
+
+void test_diff_blob__cleanup(void)
+{
+ git_blob_free(d);
+ git_blob_free(alien);
+
+ cl_git_sandbox_cleanup();
+}
+
+void test_diff_blob__can_compare_text_blobs(void)
+{
+ git_blob *a, *b, *c;
+ git_oid a_oid, b_oid, c_oid;
+
+ /* tests/resources/attr/root_test1 */
+ cl_git_pass(git_oid_fromstrn(&a_oid, "45141a79", 8));
+ cl_git_pass(git_blob_lookup_prefix(&a, g_repo, &a_oid, 4));
+
+ /* tests/resources/attr/root_test2 */
+ cl_git_pass(git_oid_fromstrn(&b_oid, "4d713dc4", 8));
+ cl_git_pass(git_blob_lookup_prefix(&b, g_repo, &b_oid, 4));
+
+ /* tests/resources/attr/root_test3 */
+ cl_git_pass(git_oid_fromstrn(&c_oid, "c96bbb2c2557a832", 16));
+ cl_git_pass(git_blob_lookup_prefix(&c, g_repo, &c_oid, 8));
+
+ /* Doing the equivalent of a `git diff -U1` on these files */
+
+ cl_git_pass(git_diff_blobs(
+ a, b, &opts, &expected, diff_file_fn, diff_hunk_fn, diff_line_fn));
+
+ cl_assert(expected.files == 1);
+ cl_assert(expected.file_mods == 1);
+ cl_assert(expected.at_least_one_of_them_is_binary == false);
+
+ cl_assert(expected.hunks == 1);
+ cl_assert(expected.lines == 6);
+ cl_assert(expected.line_ctxt == 1);
+ cl_assert(expected.line_adds == 5);
+ cl_assert(expected.line_dels == 0);
+
+ memset(&expected, 0, sizeof(expected));
+ cl_git_pass(git_diff_blobs(
+ b, c, &opts, &expected, diff_file_fn, diff_hunk_fn, diff_line_fn));
+
+ cl_assert(expected.files == 1);
+ cl_assert(expected.file_mods == 1);
+ cl_assert(expected.at_least_one_of_them_is_binary == false);
+
+ cl_assert(expected.hunks == 1);
+ cl_assert(expected.lines == 15);
+ cl_assert(expected.line_ctxt == 3);
+ cl_assert(expected.line_adds == 9);
+ cl_assert(expected.line_dels == 3);
+
+ memset(&expected, 0, sizeof(expected));
+ cl_git_pass(git_diff_blobs(
+ a, c, &opts, &expected, diff_file_fn, diff_hunk_fn, diff_line_fn));
+
+ cl_assert(expected.files == 1);
+ cl_assert(expected.file_mods == 1);
+ cl_assert(expected.at_least_one_of_them_is_binary == false);
+
+ cl_assert(expected.hunks == 1);
+ cl_assert(expected.lines == 13);
+ cl_assert(expected.line_ctxt == 0);
+ cl_assert(expected.line_adds == 12);
+ cl_assert(expected.line_dels == 1);
+
+ opts.context_lines = 1;
+
+ memset(&expected, 0, sizeof(expected));
+ cl_git_pass(git_diff_blobs(
+ c, d, &opts, &expected, diff_file_fn, diff_hunk_fn, diff_line_fn));
+
+ cl_assert(expected.files == 1);
+ cl_assert(expected.file_mods == 1);
+ cl_assert(expected.at_least_one_of_them_is_binary == false);
+
+ cl_assert(expected.hunks == 2);
+ cl_assert(expected.lines == 14);
+ cl_assert(expected.line_ctxt == 4);
+ cl_assert(expected.line_adds == 6);
+ cl_assert(expected.line_dels == 4);
+
+ git_blob_free(a);
+ git_blob_free(b);
+ git_blob_free(c);
+}
+
+void test_diff_blob__can_compare_against_null_blobs(void)
+{
+ git_blob *e = NULL;
+
+ cl_git_pass(git_diff_blobs(
+ d, e, &opts, &expected, diff_file_fn, diff_hunk_fn, diff_line_fn));
+
+ cl_assert(expected.files == 1);
+ cl_assert(expected.file_dels == 1);
+ cl_assert(expected.at_least_one_of_them_is_binary == false);
+
+ cl_assert(expected.hunks == 1);
+ cl_assert(expected.hunk_old_lines == 14);
+ cl_assert(expected.lines == 14);
+ cl_assert(expected.line_dels == 14);
+
+ opts.flags |= GIT_DIFF_REVERSE;
+ memset(&expected, 0, sizeof(expected));
+
+ cl_git_pass(git_diff_blobs(
+ d, e, &opts, &expected, diff_file_fn, diff_hunk_fn, diff_line_fn));
+
+ cl_assert(expected.files == 1);
+ cl_assert(expected.file_adds == 1);
+ cl_assert(expected.at_least_one_of_them_is_binary == false);
+
+ cl_assert(expected.hunks == 1);
+ cl_assert(expected.hunk_new_lines == 14);
+ cl_assert(expected.lines == 14);
+ cl_assert(expected.line_adds == 14);
+
+ opts.flags ^= GIT_DIFF_REVERSE;
+ memset(&expected, 0, sizeof(expected));
+
+ cl_git_pass(git_diff_blobs(
+ alien, NULL, &opts, &expected, diff_file_fn, diff_hunk_fn, diff_line_fn));
+
+ cl_assert(expected.at_least_one_of_them_is_binary == true);
+
+ cl_assert(expected.files == 1);
+ cl_assert(expected.file_dels == 1);
+ cl_assert(expected.hunks == 0);
+ cl_assert(expected.lines == 0);
+
+ memset(&expected, 0, sizeof(expected));
+
+ cl_git_pass(git_diff_blobs(
+ NULL, alien, &opts, &expected, diff_file_fn, diff_hunk_fn, diff_line_fn));
+
+ cl_assert(expected.at_least_one_of_them_is_binary == true);
+
+ cl_assert(expected.files == 1);
+ cl_assert(expected.file_adds == 1);
+ cl_assert(expected.hunks == 0);
+ cl_assert(expected.lines == 0);
+}
+
+static void assert_identical_blobs_comparison(diff_expects expected)
+{
+ cl_assert(expected.files == 1);
+ cl_assert(expected.file_unmodified == 1);
+ cl_assert(expected.hunks == 0);
+ cl_assert(expected.lines == 0);
+}
+
+void test_diff_blob__can_compare_identical_blobs(void)
+{
+ cl_git_pass(git_diff_blobs(
+ d, d, &opts, &expected, diff_file_fn, diff_hunk_fn, diff_line_fn));
+
+ cl_assert(expected.at_least_one_of_them_is_binary == false);
+ assert_identical_blobs_comparison(expected);
+
+ memset(&expected, 0, sizeof(expected));
+ cl_git_pass(git_diff_blobs(
+ NULL, NULL, &opts, &expected, diff_file_fn, diff_hunk_fn, diff_line_fn));
+
+ cl_assert(expected.at_least_one_of_them_is_binary == false);
+ assert_identical_blobs_comparison(expected);
+
+ memset(&expected, 0, sizeof(expected));
+ cl_git_pass(git_diff_blobs(
+ alien, alien, &opts, &expected, diff_file_fn, diff_hunk_fn, diff_line_fn));
+
+ cl_assert(expected.at_least_one_of_them_is_binary == true);
+ assert_identical_blobs_comparison(expected);
+}
+
+static void assert_binary_blobs_comparison(diff_expects expected)
+{
+ cl_assert(expected.at_least_one_of_them_is_binary == true);
+
+ cl_assert(expected.files == 1);
+ cl_assert(expected.file_mods == 1);
+ cl_assert(expected.hunks == 0);
+ cl_assert(expected.lines == 0);
+}
+
+void test_diff_blob__can_compare_two_binary_blobs(void)
+{
+ git_blob *heart;
+ git_oid h_oid;
+
+ /* heart.png */
+ cl_git_pass(git_oid_fromstrn(&h_oid, "de863bff", 8));
+ cl_git_pass(git_blob_lookup_prefix(&heart, g_repo, &h_oid, 4));
+
+ cl_git_pass(git_diff_blobs(
+ alien, heart, &opts, &expected, diff_file_fn, diff_hunk_fn, diff_line_fn));
+
+ assert_binary_blobs_comparison(expected);
+
+ memset(&expected, 0, sizeof(expected));
+
+ cl_git_pass(git_diff_blobs(
+ heart, alien, &opts, &expected, diff_file_fn, diff_hunk_fn, diff_line_fn));
+
+ assert_binary_blobs_comparison(expected);
+
+ git_blob_free(heart);
+}
+
+void test_diff_blob__can_compare_a_binary_blob_and_a_text_blob(void)
+{
+ cl_git_pass(git_diff_blobs(
+ alien, d, &opts, &expected, diff_file_fn, diff_hunk_fn, diff_line_fn));
+
+ assert_binary_blobs_comparison(expected);
+
+ memset(&expected, 0, sizeof(expected));
+
+ cl_git_pass(git_diff_blobs(
+ d, alien, &opts, &expected, diff_file_fn, diff_hunk_fn, diff_line_fn));
+
+ assert_binary_blobs_comparison(expected);
+}