diff --git a/tests/diff/drivers.c b/tests/diff/drivers.c index 119132149..1cbf9e211 100644 --- a/tests/diff/drivers.c +++ b/tests/diff/drivers.c @@ -176,70 +176,73 @@ void test_diff_drivers__long_lines(void) void test_diff_drivers__builtins(void) { - git_index *idx; git_diff *diff; git_patch *patch; - git_buf actual = GIT_BUF_INIT; + git_buf file = GIT_BUF_INIT, actual = GIT_BUF_INIT, expected = GIT_BUF_INIT; git_diff_options opts = GIT_DIFF_OPTIONS_INIT; - const char *base = - "\n\n" - "

\n
    \n
  1. item 1.1
  2. \n
  3. item 1.2
  4. \n
  5. item 1.3
  6. \n
  7. item 1.4
  8. \n
  9. item 1.5
  10. \n
  11. item 1.6
  12. \n
  13. item 1.7
  14. \n
  15. item 1.8
  16. \n
  17. item 1.9
  18. \n
\n

\n" - "

\n
    \n
  1. item 2.1
  2. \n
  3. item 2.2
  4. \n
  5. item 2.3
  6. \n
  7. item 2.4
  8. \n
  9. item 2.5
  10. \n
  11. item 2.6
  12. \n
  13. item 2.7
  14. \n
  15. item 2.8
  16. \n
\n

\n" - "

\n
    \n
  1. item 3.1
  2. \n
  3. item 3.2
  4. \n
  5. item 3.3
  6. \n
  7. item 3.4
  8. \n
  9. item 3.5
  10. \n
  11. item 3.6
  12. \n
  13. item 3.7
  14. \n
  15. item 3.8
  16. \n
\n

\n" - "\n"; - const char *modified = - "\n\n" - "

\n
    \n
  1. item 1.1
  2. \n
  3. item 1.2 changed
  4. \n
  5. item 1.3 changed
  6. \n
  7. item 1.4
  8. \n
  9. item 1.5
  10. \n
  11. item 1.6
  12. \n
  13. item 1.7
  14. \n
  15. item 1.8
  16. \n
  17. item 1.9
  18. \n
  19. item 1.10 added
  20. \n
\n

\n" - "

\n
    \n
  1. item 2.1
  2. \n
  3. item 2.2
  4. \n
  5. item 2.3
  6. \n
  7. item 2.4
  8. \n
  9. item 2.5
  10. \n
  11. item 2.6
  12. \n
  13. item 2.7 changed
  14. \n
  15. item 2.7.1 added
  16. \n
  17. item 2.8
  18. \n
\n

\n" - "

\n
    \n
  1. item 3.1
  2. \n
  3. item 3.2
  4. \n
  5. item 3.3
  6. \n
  7. item 3.4
  8. \n
  9. item 3.5
  10. \n
  11. item 3.6
  12. \n
\n

\n" - "\n"; - const char *expected_nodriver = - "diff --git a/file.html b/file.html\nindex 97b34db..c7dbed3 100644\n--- a/file.html\n+++ b/file.html\n@@ -5,4 +5,4 @@\n
  • item 1.1
  • \n-
  • item 1.2
  • \n-
  • item 1.3
  • \n+
  • item 1.2 changed
  • \n+
  • item 1.3 changed
  • \n
  • item 1.4
  • \n@@ -13,2 +13,3 @@\n
  • item 1.9
  • \n+
  • item 1.10 added
  • \n \n@@ -23,3 +24,4 @@\n
  • item 2.6
  • \n-
  • item 2.7
  • \n+
  • item 2.7 changed
  • \n+
  • item 2.7.1 added
  • \n
  • item 2.8
  • \n@@ -35,4 +37,2 @@\n
  • item 3.6
  • \n-
  • item 3.7
  • \n-
  • item 3.8
  • \n \n"; - const char *expected_driver = - "diff --git a/file.html b/file.html\nindex 97b34db..c7dbed3 100644\n--- a/file.html\n+++ b/file.html\n@@ -5,4 +5,4 @@

    \n
  • item 1.1
  • \n-
  • item 1.2
  • \n-
  • item 1.3
  • \n+
  • item 1.2 changed
  • \n+
  • item 1.3 changed
  • \n
  • item 1.4
  • \n@@ -13,2 +13,3 @@

    \n
  • item 1.9
  • \n+
  • item 1.10 added
  • \n \n@@ -23,3 +24,4 @@

    \n
  • item 2.6
  • \n-
  • item 2.7
  • \n+
  • item 2.7 changed
  • \n+
  • item 2.7.1 added
  • \n
  • item 2.8
  • \n@@ -35,4 +37,2 @@

    \n
  • item 3.6
  • \n-
  • item 3.7
  • \n-
  • item 3.8
  • \n \n"; + int i; + static const char *files[] = { + "html", + NULL + }; - g_repo = cl_git_sandbox_init("empty_standard_repo"); - - cl_git_mkfile("empty_standard_repo/file.html", base); - cl_git_pass(git_repository_index(&idx, g_repo)); - cl_git_pass(git_index_add_bypath(idx, "file.html")); - cl_git_pass(git_index_write(idx)); - git_index_free(idx); - - cl_git_rewritefile("empty_standard_repo/file.html", modified); - - /* do diff with no special driver */ + g_repo = cl_git_sandbox_init("userdiff"); opts.interhunk_lines = 1; opts.context_lines = 1; + opts.pathspec.count = 1; - cl_git_pass(git_diff_index_to_workdir(&diff, g_repo, NULL, &opts)); - cl_assert_equal_sz(1, git_diff_num_deltas(diff)); - cl_git_pass(git_patch_from_diff(&patch, diff, 0)); - cl_git_pass(git_patch_to_buf(&actual, patch)); + for (i = 0; files[i]; ++i) { + git_buf_sets(&file, "files/file."); + git_buf_puts(&file, files[i]); + opts.pathspec.strings = &file.ptr; - overwrite_filemode(expected_nodriver, &actual); + /* do diff with no special driver */ - cl_assert_equal_s(expected_nodriver, actual.ptr); + cl_git_pass(git_diff_index_to_workdir(&diff, g_repo, NULL, &opts)); + cl_assert_equal_sz(1, git_diff_num_deltas(diff)); + cl_git_pass(git_patch_from_diff(&patch, diff, 0)); + cl_git_pass(git_patch_to_buf(&actual, patch)); + git_buf_sets(&expected, "userdiff/expected/nodriver/diff."); + git_buf_puts(&expected, files[i]); + cl_git_pass(git_futils_readbuffer(&expected, expected.ptr)); + + overwrite_filemode(expected.ptr, &actual); + + cl_assert_equal_s(expected.ptr, actual.ptr); + + git_buf_clear(&actual); + git_patch_free(patch); + git_diff_free(diff); + + /* do diff with driver */ + + { + FILE *fp = fopen("userdiff/.gitattributes", "w"); + fprintf(fp, "*.%s diff=%s\n", files[i], files[i]); + fclose(fp); + } + + cl_git_pass(git_diff_index_to_workdir(&diff, g_repo, NULL, &opts)); + cl_assert_equal_sz(1, git_diff_num_deltas(diff)); + cl_git_pass(git_patch_from_diff(&patch, diff, 0)); + cl_git_pass(git_patch_to_buf(&actual, patch)); + + git_buf_sets(&expected, "userdiff/expected/driver/diff."); + git_buf_puts(&expected, files[i]); + cl_git_pass(git_futils_readbuffer(&expected, expected.ptr)); + + overwrite_filemode(expected.ptr, &actual); + + cl_assert_equal_s(expected.ptr, actual.ptr); + + git_buf_clear(&actual); + git_patch_free(patch); + git_diff_free(diff); + } + + git_buf_free(&file); git_buf_free(&actual); - git_patch_free(patch); - git_diff_free(diff); - - /* do diff with HTML driver */ - - cl_git_mkfile("empty_standard_repo/.gitattributes", "*.html diff=html\n"); - - cl_git_pass(git_diff_index_to_workdir(&diff, g_repo, NULL, &opts)); - cl_assert_equal_sz(1, git_diff_num_deltas(diff)); - cl_git_pass(git_patch_from_diff(&patch, diff, 0)); - cl_git_pass(git_patch_to_buf(&actual, patch)); - - overwrite_filemode(expected_driver, &actual); - - cl_assert_equal_s(expected_driver, actual.ptr); - - git_buf_free(&actual); - git_patch_free(patch); - git_diff_free(diff); + git_buf_free(&expected); } diff --git a/tests/resources/userdiff/.gitted/HEAD b/tests/resources/userdiff/.gitted/HEAD new file mode 100644 index 000000000..cb089cd89 Binary files /dev/null and b/tests/resources/userdiff/.gitted/HEAD differ diff --git a/tests/resources/userdiff/.gitted/config b/tests/resources/userdiff/.gitted/config new file mode 100644 index 000000000..6c9406b7d Binary files /dev/null and b/tests/resources/userdiff/.gitted/config differ diff --git a/tests/resources/userdiff/.gitted/description b/tests/resources/userdiff/.gitted/description new file mode 100644 index 000000000..498b267a8 Binary files /dev/null and b/tests/resources/userdiff/.gitted/description differ diff --git a/tests/resources/userdiff/.gitted/index b/tests/resources/userdiff/.gitted/index new file mode 100644 index 000000000..9372411cd Binary files /dev/null and b/tests/resources/userdiff/.gitted/index differ diff --git a/tests/resources/userdiff/.gitted/objects/05/d669073b39d36847315e3a5b4512cf4cba4546 b/tests/resources/userdiff/.gitted/objects/05/d669073b39d36847315e3a5b4512cf4cba4546 new file mode 100644 index 000000000..3a9d75cc1 Binary files /dev/null and b/tests/resources/userdiff/.gitted/objects/05/d669073b39d36847315e3a5b4512cf4cba4546 differ diff --git a/tests/resources/userdiff/.gitted/objects/20/ab776b6ff3169fa0e5eff65df30d45187d22ba b/tests/resources/userdiff/.gitted/objects/20/ab776b6ff3169fa0e5eff65df30d45187d22ba new file mode 100644 index 000000000..3d57061ce Binary files /dev/null and b/tests/resources/userdiff/.gitted/objects/20/ab776b6ff3169fa0e5eff65df30d45187d22ba differ diff --git a/tests/resources/userdiff/.gitted/objects/23/20e2f1e4d9e6201a8e15949a0c10a533fa51cd b/tests/resources/userdiff/.gitted/objects/23/20e2f1e4d9e6201a8e15949a0c10a533fa51cd new file mode 100644 index 000000000..6dbcafed4 Binary files /dev/null and b/tests/resources/userdiff/.gitted/objects/23/20e2f1e4d9e6201a8e15949a0c10a533fa51cd differ diff --git a/tests/resources/userdiff/.gitted/objects/2e/a4b8a16d737c180dfdd2b119dec9501592326c b/tests/resources/userdiff/.gitted/objects/2e/a4b8a16d737c180dfdd2b119dec9501592326c new file mode 100644 index 000000000..e7d2fba41 Binary files /dev/null and b/tests/resources/userdiff/.gitted/objects/2e/a4b8a16d737c180dfdd2b119dec9501592326c differ diff --git a/tests/resources/userdiff/.gitted/objects/49/c0ff897b2b07a2ea0ed073e62a9dcd02704ba0 b/tests/resources/userdiff/.gitted/objects/49/c0ff897b2b07a2ea0ed073e62a9dcd02704ba0 new file mode 100644 index 000000000..49d59c11d Binary files /dev/null and b/tests/resources/userdiff/.gitted/objects/49/c0ff897b2b07a2ea0ed073e62a9dcd02704ba0 differ diff --git a/tests/resources/userdiff/.gitted/objects/50/346bde7428a29c9845470a14d87b1634293d48 b/tests/resources/userdiff/.gitted/objects/50/346bde7428a29c9845470a14d87b1634293d48 new file mode 100644 index 000000000..9de1b3598 Binary files /dev/null and b/tests/resources/userdiff/.gitted/objects/50/346bde7428a29c9845470a14d87b1634293d48 differ diff --git a/tests/resources/userdiff/.gitted/objects/5a/428e7dcffb41b65984517f1e6b8547babc8dff b/tests/resources/userdiff/.gitted/objects/5a/428e7dcffb41b65984517f1e6b8547babc8dff new file mode 100644 index 000000000..143a1cecf Binary files /dev/null and b/tests/resources/userdiff/.gitted/objects/5a/428e7dcffb41b65984517f1e6b8547babc8dff differ diff --git a/tests/resources/userdiff/.gitted/objects/87/2d19663f32459389597b52beec6457c1dc971f b/tests/resources/userdiff/.gitted/objects/87/2d19663f32459389597b52beec6457c1dc971f new file mode 100644 index 000000000..415f40a66 Binary files /dev/null and b/tests/resources/userdiff/.gitted/objects/87/2d19663f32459389597b52beec6457c1dc971f differ diff --git a/tests/resources/userdiff/.gitted/objects/9d/b1d09ff9ad5190bcf12d72ea3c818ffca344c5 b/tests/resources/userdiff/.gitted/objects/9d/b1d09ff9ad5190bcf12d72ea3c818ffca344c5 new file mode 100644 index 000000000..c0a03a241 Binary files /dev/null and b/tests/resources/userdiff/.gitted/objects/9d/b1d09ff9ad5190bcf12d72ea3c818ffca344c5 differ diff --git a/tests/resources/userdiff/.gitted/objects/d6/3c806de4f666369ed169495657bec24b558165 b/tests/resources/userdiff/.gitted/objects/d6/3c806de4f666369ed169495657bec24b558165 new file mode 100644 index 000000000..2c0fbcc09 Binary files /dev/null and b/tests/resources/userdiff/.gitted/objects/d6/3c806de4f666369ed169495657bec24b558165 differ diff --git a/tests/resources/userdiff/.gitted/objects/ef/1641511d6cb425c6b4f59ef1feffe7762e86e0 b/tests/resources/userdiff/.gitted/objects/ef/1641511d6cb425c6b4f59ef1feffe7762e86e0 new file mode 100644 index 000000000..223f3b380 Binary files /dev/null and b/tests/resources/userdiff/.gitted/objects/ef/1641511d6cb425c6b4f59ef1feffe7762e86e0 differ diff --git a/tests/resources/userdiff/.gitted/refs/heads/master b/tests/resources/userdiff/.gitted/refs/heads/master new file mode 100644 index 000000000..2ec79ec86 Binary files /dev/null and b/tests/resources/userdiff/.gitted/refs/heads/master differ diff --git a/tests/resources/userdiff/after/file.html b/tests/resources/userdiff/after/file.html new file mode 100644 index 000000000..2320e2f1e Binary files /dev/null and b/tests/resources/userdiff/after/file.html differ diff --git a/tests/resources/userdiff/before/file.html b/tests/resources/userdiff/before/file.html new file mode 100644 index 000000000..872d19663 Binary files /dev/null and b/tests/resources/userdiff/before/file.html differ diff --git a/tests/resources/userdiff/expected/driver/diff.html b/tests/resources/userdiff/expected/driver/diff.html new file mode 100644 index 000000000..5a428e7dc Binary files /dev/null and b/tests/resources/userdiff/expected/driver/diff.html differ diff --git a/tests/resources/userdiff/expected/nodriver/diff.html b/tests/resources/userdiff/expected/nodriver/diff.html new file mode 100644 index 000000000..2ea4b8a16 Binary files /dev/null and b/tests/resources/userdiff/expected/nodriver/diff.html differ diff --git a/tests/resources/userdiff/files/file.html b/tests/resources/userdiff/files/file.html new file mode 100644 index 000000000..2320e2f1e Binary files /dev/null and b/tests/resources/userdiff/files/file.html differ