#include "clar_libgit2.h" #include "git2/sys/filter.h" #include "crlf.h" #include "buffer.h" static git_repository *g_repo = NULL; void test_filter_query__initialize(void) { g_repo = cl_git_sandbox_init("crlf"); cl_git_mkfile("crlf/.gitattributes", "*.txt text\n" "*.bin binary\n" "*.crlf text eol=crlf\n" "*.lf text eol=lf\n" "*.binident binary ident\n" "*.ident text ident\n" "*.identcrlf ident text eol=crlf\n" "*.identlf ident text eol=lf\n" "*.custom custom ident text\n"); } void test_filter_query__cleanup(void) { cl_git_sandbox_cleanup(); } static int filter_for(const char *filename, const char *filter) { git_filter_list *fl; int filtered; cl_git_pass(git_filter_list_load( &fl, g_repo, NULL, filename, GIT_FILTER_TO_WORKTREE, 0)); filtered = git_filter_list_contains(fl, filter); git_filter_list_free(fl); return filtered; } void test_filter_query__filters(void) { cl_assert_equal_i(1, filter_for("text.txt", "crlf")); cl_assert_equal_i(0, filter_for("binary.bin", "crlf")); cl_assert_equal_i(1, filter_for("foo.lf", "crlf")); cl_assert_equal_i(0, filter_for("foo.lf", "ident")); cl_assert_equal_i(1, filter_for("id.ident", "crlf")); cl_assert_equal_i(1, filter_for("id.ident", "ident")); cl_assert_equal_i(0, filter_for("id.binident", "crlf")); cl_assert_equal_i(1, filter_for("id.binident", "ident")); } void test_filter_query__autocrlf_true_implies_crlf(void) { cl_repo_set_bool(g_repo, "core.autocrlf", true); cl_assert_equal_i(1, filter_for("not_in_gitattributes", "crlf")); cl_assert_equal_i(1, filter_for("foo.txt", "crlf")); cl_assert_equal_i(0, filter_for("foo.bin", "crlf")); cl_assert_equal_i(1, filter_for("foo.lf", "crlf")); cl_repo_set_bool(g_repo, "core.autocrlf", false); cl_assert_equal_i(0, filter_for("not_in_gitattributes", "crlf")); cl_assert_equal_i(1, filter_for("foo.txt", "crlf")); cl_assert_equal_i(0, filter_for("foo.bin", "crlf")); cl_assert_equal_i(1, filter_for("foo.lf", "crlf")); } void test_filter_query__unknown(void) { cl_assert_equal_i(1, filter_for("foo.custom", "crlf")); cl_assert_equal_i(1, filter_for("foo.custom", "ident")); cl_assert_equal_i(0, filter_for("foo.custom", "custom")); } void test_filter_query__custom(void) { git_filter custom = { GIT_FILTER_VERSION }; cl_git_pass(git_filter_register( "custom", &custom, 42)); cl_assert_equal_i(1, filter_for("foo.custom", "crlf")); cl_assert_equal_i(1, filter_for("foo.custom", "ident")); cl_assert_equal_i(1, filter_for("foo.custom", "custom")); git_filter_unregister("custom"); }