]>
git.proxmox.com Git - libgit2.git/blob - tests/config/multivar.c
1 #include "clar_libgit2.h"
3 static const char *_name
= "remote.ab.url";
5 void test_config_multivar__initialize(void)
7 cl_fixture_sandbox("config");
10 void test_config_multivar__cleanup(void)
12 cl_fixture_cleanup("config");
15 static int mv_read_cb(const git_config_entry
*entry
, void *data
)
17 int *n
= (int *) data
;
19 if (!strcmp(entry
->name
, _name
))
25 void test_config_multivar__foreach(void)
30 cl_git_pass(git_config_open_ondisk(&cfg
, cl_fixture("config/config11")));
32 cl_git_pass(git_config_foreach(cfg
, mv_read_cb
, &n
));
38 static int cb(const git_config_entry
*entry
, void *data
)
40 int *n
= (int *) data
;
49 static void check_get_multivar_foreach(
50 git_config
*cfg
, int expected
, int expected_patterned
)
55 cl_git_pass(git_config_get_multivar_foreach(cfg
, _name
, NULL
, cb
, &n
));
56 cl_assert_equal_i(expected
, n
);
58 cl_assert_equal_i(GIT_ENOTFOUND
,
59 git_config_get_multivar_foreach(cfg
, _name
, NULL
, cb
, &n
));
64 if (expected_patterned
> 0) {
65 cl_git_pass(git_config_get_multivar_foreach(cfg
, _name
, "example", cb
, &n
));
66 cl_assert_equal_i(expected_patterned
, n
);
68 cl_assert_equal_i(GIT_ENOTFOUND
,
69 git_config_get_multivar_foreach(cfg
, _name
, "example", cb
, &n
));
73 static void check_get_multivar(git_config
*cfg
, int expected
)
75 git_config_iterator
*iter
;
76 git_config_entry
*entry
;
79 cl_git_pass(git_config_multivar_iterator_new(&iter
, cfg
, _name
, NULL
));
81 while (git_config_next(&entry
, iter
) == 0)
84 cl_assert_equal_i(expected
, n
);
85 git_config_iterator_free(iter
);
89 void test_config_multivar__get(void)
93 cl_git_pass(git_config_open_ondisk(&cfg
, "config/config11"));
94 check_get_multivar_foreach(cfg
, 2, 1);
96 /* add another that has the _name entry */
97 cl_git_pass(git_config_add_file_ondisk(cfg
, "config/config9", GIT_CONFIG_LEVEL_SYSTEM
, 1));
98 check_get_multivar_foreach(cfg
, 3, 2);
100 /* add another that does not have the _name entry */
101 cl_git_pass(git_config_add_file_ondisk(cfg
, "config/config0", GIT_CONFIG_LEVEL_GLOBAL
, 1));
102 check_get_multivar_foreach(cfg
, 3, 2);
104 /* add another that does not have the _name entry at the end */
105 cl_git_pass(git_config_add_file_ondisk(cfg
, "config/config1", GIT_CONFIG_LEVEL_APP
, 1));
106 check_get_multivar_foreach(cfg
, 3, 2);
108 /* drop original file */
109 cl_git_pass(git_config_add_file_ondisk(cfg
, "config/config2", GIT_CONFIG_LEVEL_LOCAL
, 1));
110 check_get_multivar_foreach(cfg
, 1, 1);
112 /* drop other file with match */
113 cl_git_pass(git_config_add_file_ondisk(cfg
, "config/config3", GIT_CONFIG_LEVEL_SYSTEM
, 1));
114 check_get_multivar_foreach(cfg
, 0, 0);
116 /* reload original file (add different place in order) */
117 cl_git_pass(git_config_add_file_ondisk(cfg
, "config/config11", GIT_CONFIG_LEVEL_SYSTEM
, 1));
118 check_get_multivar_foreach(cfg
, 2, 1);
120 check_get_multivar(cfg
, 2);
122 git_config_free(cfg
);
125 void test_config_multivar__add(void)
130 cl_git_pass(git_config_open_ondisk(&cfg
, "config/config11"));
131 cl_git_pass(git_config_set_multivar(cfg
, _name
, "nonexistant", "git://git.otherplace.org/libgit2"));
134 cl_git_pass(git_config_get_multivar_foreach(cfg
, _name
, NULL
, cb
, &n
));
135 cl_assert_equal_i(n
, 3);
138 cl_git_pass(git_config_get_multivar_foreach(cfg
, _name
, "otherplace", cb
, &n
));
139 cl_assert_equal_i(n
, 1);
141 git_config_free(cfg
);
143 /* We know it works in memory, let's see if the file is written correctly */
145 cl_git_pass(git_config_open_ondisk(&cfg
, "config/config11"));
148 cl_git_pass(git_config_get_multivar_foreach(cfg
, _name
, NULL
, cb
, &n
));
149 cl_assert_equal_i(n
, 3);
152 cl_git_pass(git_config_get_multivar_foreach(cfg
, _name
, "otherplace", cb
, &n
));
153 cl_assert_equal_i(n
, 1);
155 git_config_free(cfg
);
158 void test_config_multivar__add_new(void)
160 const char *var
= "a.brand.new";
164 cl_git_pass(git_config_open_ondisk(&cfg
, "config/config11"));
166 cl_git_pass(git_config_set_multivar(cfg
, var
, "$^", "variable"));
168 cl_git_pass(git_config_get_multivar_foreach(cfg
, var
, NULL
, cb
, &n
));
169 cl_assert_equal_i(n
, 1);
171 git_config_free(cfg
);
174 void test_config_multivar__replace(void)
179 cl_git_pass(git_config_open_ondisk(&cfg
, "config/config11"));
182 cl_git_pass(git_config_get_multivar_foreach(cfg
, _name
, NULL
, cb
, &n
));
185 cl_git_pass(git_config_set_multivar(cfg
, _name
, "github", "git://git.otherplace.org/libgit2"));
188 cl_git_pass(git_config_get_multivar_foreach(cfg
, _name
, NULL
, cb
, &n
));
191 git_config_free(cfg
);
193 cl_git_pass(git_config_open_ondisk(&cfg
, "config/config11"));
196 cl_git_pass(git_config_get_multivar_foreach(cfg
, _name
, NULL
, cb
, &n
));
199 git_config_free(cfg
);
202 void test_config_multivar__replace_multiple(void)
207 cl_git_pass(git_config_open_ondisk(&cfg
, "config/config11"));
208 cl_git_pass(git_config_set_multivar(cfg
, _name
, "git://", "git://git.otherplace.org/libgit2"));
211 cl_git_pass(git_config_get_multivar_foreach(cfg
, _name
, "otherplace", cb
, &n
));
212 cl_assert_equal_i(n
, 2);
214 git_config_free(cfg
);
216 cl_git_pass(git_config_open_ondisk(&cfg
, "config/config11"));
219 cl_git_pass(git_config_get_multivar_foreach(cfg
, _name
, "otherplace", cb
, &n
));
220 cl_assert_equal_i(n
, 2);
222 git_config_free(cfg
);
225 void test_config_multivar__delete(void)
230 cl_git_pass(git_config_open_ondisk(&cfg
, "config/config11"));
233 cl_git_pass(git_config_get_multivar_foreach(cfg
, _name
, NULL
, cb
, &n
));
234 cl_assert_equal_i(2, n
);
236 cl_git_pass(git_config_delete_multivar(cfg
, _name
, "github"));
239 cl_git_pass(git_config_get_multivar_foreach(cfg
, _name
, NULL
, cb
, &n
));
240 cl_assert_equal_i(1, n
);
242 git_config_free(cfg
);
244 cl_git_pass(git_config_open_ondisk(&cfg
, "config/config11"));
247 cl_git_pass(git_config_get_multivar_foreach(cfg
, _name
, NULL
, cb
, &n
));
248 cl_assert_equal_i(1, n
);
250 git_config_free(cfg
);
253 void test_config_multivar__delete_multiple(void)
258 cl_git_pass(git_config_open_ondisk(&cfg
, "config/config11"));
261 cl_git_pass(git_config_get_multivar_foreach(cfg
, _name
, NULL
, cb
, &n
));
264 cl_git_pass(git_config_delete_multivar(cfg
, _name
, "git"));
267 cl_git_fail_with(git_config_get_multivar_foreach(cfg
, _name
, NULL
, cb
, &n
), GIT_ENOTFOUND
);
269 git_config_free(cfg
);
271 cl_git_pass(git_config_open_ondisk(&cfg
, "config/config11"));
274 cl_git_fail_with(git_config_get_multivar_foreach(cfg
, _name
, NULL
, cb
, &n
), GIT_ENOTFOUND
);
276 git_config_free(cfg
);
279 void test_config_multivar__delete_notfound(void)
283 cl_git_pass(git_config_open_ondisk(&cfg
, "config/config11"));
285 cl_git_fail_with(git_config_delete_multivar(cfg
, "remote.ab.noturl", "git"), GIT_ENOTFOUND
);
287 git_config_free(cfg
);