]> git.proxmox.com Git - libgit2.git/blame - tests-clar/checkout/crlf.c
Merge pull request #1833 from libgit2/cmn/config-include
[libgit2.git] / tests-clar / checkout / crlf.c
CommitLineData
6e959708
ET
1#include "clar_libgit2.h"
2#include "checkout_helpers.h"
3
4#include "git2/checkout.h"
5#include "repository.h"
6
7#define UTF8_BOM "\xEF\xBB\xBF"
8#define ALL_CRLF_TEXT_RAW "crlf\r\ncrlf\r\ncrlf\r\ncrlf\r\n"
9#define ALL_LF_TEXT_RAW "lf\nlf\nlf\nlf\nlf\n"
10#define MORE_CRLF_TEXT_RAW "crlf\r\ncrlf\r\nlf\ncrlf\r\ncrlf\r\n"
11#define MORE_LF_TEXT_RAW "lf\nlf\ncrlf\r\nlf\nlf\n"
12
4a15ea86
ET
13#define ALL_LF_TEXT_AS_CRLF "lf\r\nlf\r\nlf\r\nlf\r\nlf\r\n"
14#define MORE_CRLF_TEXT_AS_CRLF "crlf\r\ncrlf\r\nlf\r\ncrlf\r\ncrlf\r\n"
15#define MORE_LF_TEXT_AS_CRLF "lf\r\nlf\r\ncrlf\r\nlf\r\nlf\r\n"
6e959708
ET
16
17static git_repository *g_repo;
18
19void test_checkout_crlf__initialize(void)
20{
6e959708 21 g_repo = cl_git_sandbox_init("crlf");
6e959708
ET
22}
23
24void test_checkout_crlf__cleanup(void)
25{
26 cl_git_sandbox_cleanup();
27}
28
6e959708
ET
29void test_checkout_crlf__detect_crlf_autocrlf_false(void)
30{
31 git_checkout_opts opts = GIT_CHECKOUT_OPTS_INIT;
32 opts.checkout_strategy = GIT_CHECKOUT_SAFE_CREATE;
33
1323c6d1 34 cl_repo_set_bool(g_repo, "core.autocrlf", false);
6e959708
ET
35
36 git_checkout_head(g_repo, &opts);
37
050ab995
RB
38 check_file_contents("./crlf/all-lf", ALL_LF_TEXT_RAW);
39 check_file_contents("./crlf/all-crlf", ALL_CRLF_TEXT_RAW);
6e959708
ET
40}
41
42void test_checkout_crlf__autocrlf_false_index_size_is_unfiltered_size(void)
43{
44 git_index *index;
45 const git_index_entry *entry;
46 git_checkout_opts opts = GIT_CHECKOUT_OPTS_INIT;
47 opts.checkout_strategy = GIT_CHECKOUT_SAFE_CREATE;
48
1323c6d1 49 cl_repo_set_bool(g_repo, "core.autocrlf", false);
6e959708
ET
50
51 git_checkout_head(g_repo, &opts);
52
53 git_repository_index(&index, g_repo);
54
55 cl_assert((entry = git_index_get_bypath(index, "all-lf", 0)) != NULL);
56 cl_assert(entry->file_size == strlen(ALL_LF_TEXT_RAW));
57
b8acb775
SS
58 cl_assert((entry = git_index_get_bypath(index, "all-crlf", 0)) != NULL);
59 cl_assert(entry->file_size == strlen(ALL_CRLF_TEXT_RAW));
60
6e959708
ET
61 git_index_free(index);
62}
63
64void test_checkout_crlf__detect_crlf_autocrlf_true(void)
65{
66 git_checkout_opts opts = GIT_CHECKOUT_OPTS_INIT;
67 opts.checkout_strategy = GIT_CHECKOUT_SAFE_CREATE;
68
1323c6d1 69 cl_repo_set_bool(g_repo, "core.autocrlf", true);
6e959708
ET
70
71 git_checkout_head(g_repo, &opts);
72
050ab995
RB
73 if (GIT_EOL_NATIVE == GIT_EOL_LF)
74 check_file_contents("./crlf/all-lf", ALL_LF_TEXT_RAW);
75 else
76 check_file_contents("./crlf/all-lf", ALL_LF_TEXT_AS_CRLF);
77
78 check_file_contents("./crlf/all-crlf", ALL_CRLF_TEXT_RAW);
6e959708
ET
79}
80
4a15ea86
ET
81void test_checkout_crlf__more_lf_autocrlf_true(void)
82{
4a15ea86
ET
83 git_checkout_opts opts = GIT_CHECKOUT_OPTS_INIT;
84 opts.checkout_strategy = GIT_CHECKOUT_SAFE_CREATE;
85
86 cl_repo_set_bool(g_repo, "core.autocrlf", true);
87
88 git_checkout_head(g_repo, &opts);
89
050ab995
RB
90 if (GIT_EOL_NATIVE == GIT_EOL_LF)
91 check_file_contents("./crlf/more-lf", MORE_LF_TEXT_RAW);
92 else
93 check_file_contents("./crlf/more-lf", MORE_LF_TEXT_AS_CRLF);
4a15ea86
ET
94}
95
96void test_checkout_crlf__more_crlf_autocrlf_true(void)
97{
4a15ea86
ET
98 git_checkout_opts opts = GIT_CHECKOUT_OPTS_INIT;
99 opts.checkout_strategy = GIT_CHECKOUT_SAFE_CREATE;
100
101 cl_repo_set_bool(g_repo, "core.autocrlf", true);
102
103 git_checkout_head(g_repo, &opts);
104
050ab995
RB
105 if (GIT_EOL_NATIVE == GIT_EOL_LF)
106 check_file_contents("./crlf/more-crlf", MORE_CRLF_TEXT_RAW);
107 else
108 check_file_contents("./crlf/more-crlf", MORE_CRLF_TEXT_AS_CRLF);
4a15ea86
ET
109}
110
111void test_checkout_crlf__all_crlf_autocrlf_true(void)
112{
4a15ea86
ET
113 git_checkout_opts opts = GIT_CHECKOUT_OPTS_INIT;
114 opts.checkout_strategy = GIT_CHECKOUT_SAFE_CREATE;
115
116 cl_repo_set_bool(g_repo, "core.autocrlf", true);
117
118 git_checkout_head(g_repo, &opts);
119
050ab995 120 check_file_contents("./crlf/all-crlf", ALL_CRLF_TEXT_RAW);
4a15ea86
ET
121}
122
6e959708
ET
123void test_checkout_crlf__autocrlf_true_index_size_is_filtered_size(void)
124{
125 git_index *index;
126 const git_index_entry *entry;
127 git_checkout_opts opts = GIT_CHECKOUT_OPTS_INIT;
128 opts.checkout_strategy = GIT_CHECKOUT_SAFE_CREATE;
129
1323c6d1 130 cl_repo_set_bool(g_repo, "core.autocrlf", true);
6e959708
ET
131
132 git_checkout_head(g_repo, &opts);
133
134 git_repository_index(&index, g_repo);
135
136 cl_assert((entry = git_index_get_bypath(index, "all-lf", 0)) != NULL);
050ab995
RB
137
138 if (GIT_EOL_NATIVE == GIT_EOL_LF)
139 cl_assert_equal_sz(strlen(ALL_LF_TEXT_RAW), entry->file_size);
140 else
141 cl_assert_equal_sz(strlen(ALL_LF_TEXT_AS_CRLF), entry->file_size);
6e959708 142
b8acb775 143 cl_assert((entry = git_index_get_bypath(index, "all-crlf", 0)) != NULL);
050ab995 144 cl_assert_equal_sz(strlen(ALL_CRLF_TEXT_RAW), entry->file_size);
b8acb775 145
6e959708
ET
146 git_index_free(index);
147}