]> git.proxmox.com Git - libgit2.git/blob - tests/filter/query.c
6889d715bb32690352ca0e861e1aad79286babb6
[libgit2.git] / tests / filter / query.c
1 #include "clar_libgit2.h"
2 #include "git2/sys/filter.h"
3 #include "crlf.h"
4 #include "buffer.h"
5
6 static git_repository *g_repo = NULL;
7
8 void test_filter_query__initialize(void)
9 {
10 g_repo = cl_git_sandbox_init("crlf");
11
12 cl_git_mkfile("crlf/.gitattributes",
13 "*.txt text\n"
14 "*.bin binary\n"
15 "*.crlf text eol=crlf\n"
16 "*.lf text eol=lf\n"
17 "*.binident binary ident\n"
18 "*.ident text ident\n"
19 "*.identcrlf ident text eol=crlf\n"
20 "*.identlf ident text eol=lf\n"
21 "*.custom custom ident text\n");
22 }
23
24 void test_filter_query__cleanup(void)
25 {
26 cl_git_sandbox_cleanup();
27 }
28
29 static int filter_for(const char *filename, const char *filter)
30 {
31 git_filter_list *fl;
32 int filtered;
33
34 cl_git_pass(git_filter_list_load(
35 &fl, g_repo, NULL, filename, GIT_FILTER_TO_WORKTREE, 0));
36 filtered = git_filter_list_contains(fl, filter);
37 git_filter_list_free(fl);
38
39 return filtered;
40 }
41
42 void test_filter_query__filters(void)
43 {
44 cl_assert_equal_i(1, filter_for("text.txt", "crlf"));
45 cl_assert_equal_i(0, filter_for("binary.bin", "crlf"));
46
47 cl_assert_equal_i(1, filter_for("foo.lf", "crlf"));
48 cl_assert_equal_i(0, filter_for("foo.lf", "ident"));
49
50 cl_assert_equal_i(1, filter_for("id.ident", "crlf"));
51 cl_assert_equal_i(1, filter_for("id.ident", "ident"));
52
53 cl_assert_equal_i(0, filter_for("id.binident", "crlf"));
54 cl_assert_equal_i(1, filter_for("id.binident", "ident"));
55 }
56
57 void test_filter_query__autocrlf_true_implies_crlf(void)
58 {
59 cl_repo_set_bool(g_repo, "core.autocrlf", true);
60 cl_assert_equal_i(1, filter_for("not_in_gitattributes", "crlf"));
61 cl_assert_equal_i(1, filter_for("foo.txt", "crlf"));
62 cl_assert_equal_i(0, filter_for("foo.bin", "crlf"));
63 cl_assert_equal_i(1, filter_for("foo.lf", "crlf"));
64
65 cl_repo_set_bool(g_repo, "core.autocrlf", false);
66 cl_assert_equal_i(0, filter_for("not_in_gitattributes", "crlf"));
67 cl_assert_equal_i(1, filter_for("foo.txt", "crlf"));
68 cl_assert_equal_i(0, filter_for("foo.bin", "crlf"));
69 cl_assert_equal_i(1, filter_for("foo.lf", "crlf"));
70 }
71
72 void test_filter_query__unknown(void)
73 {
74 cl_assert_equal_i(1, filter_for("foo.custom", "crlf"));
75 cl_assert_equal_i(1, filter_for("foo.custom", "ident"));
76 cl_assert_equal_i(0, filter_for("foo.custom", "custom"));
77 }
78
79 void test_filter_query__custom(void)
80 {
81 git_filter custom = { GIT_FILTER_VERSION };
82
83 cl_git_pass(git_filter_register(
84 "custom", &custom, 42));
85
86 cl_assert_equal_i(1, filter_for("foo.custom", "crlf"));
87 cl_assert_equal_i(1, filter_for("foo.custom", "ident"));
88 cl_assert_equal_i(1, filter_for("foo.custom", "custom"));
89
90 git_filter_unregister("custom");
91 }