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