multivar.c 3.06 KB
Newer Older
1 2
#include "clar_libgit2.h"

3 4 5 6 7 8 9 10 11 12 13 14
static const char *_name = "remote.fancy.url";

void test_config_multivar__initialize(void)
{
	cl_fixture_sandbox("config");
}

void test_config_multivar__cleanup(void)
{
	cl_fixture_cleanup("config");
}

15
static int mv_read_cb(const char *name, const char *value, void *data)
16 17 18
{
	int *n = (int *) data;

19 20
	GIT_UNUSED(value);

21
	if (!strcmp(name, _name))
22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
		(*n)++;

	return 0;
}

void test_config_multivar__foreach(void)
{
	git_config *cfg;
	int n = 0;

	cl_git_pass(git_config_open_ondisk(&cfg, cl_fixture("config/config11")));

	cl_git_pass(git_config_foreach(cfg, mv_read_cb, &n));
	cl_assert(n == 2);

	git_config_free(cfg);
}
39

40
static int cb(const char *val, void *data)
41 42 43
{
	int *n = (int *) data;

44 45
	GIT_UNUSED(val);

46 47 48 49 50 51 52 53 54 55
	(*n)++;

	return GIT_SUCCESS;
}

void test_config_multivar__get(void)
{
	git_config *cfg;
	int n;

56
	cl_git_pass(git_config_open_ondisk(&cfg, "config/config11"));
57 58

	n = 0;
59
	cl_git_pass(git_config_get_multivar(cfg, _name, NULL, cb, &n));
60 61 62
	cl_assert(n == 2);

	n = 0;
63
	cl_git_pass(git_config_get_multivar(cfg, _name, "example", cb, &n));
64 65 66 67
	cl_assert(n == 1);

	git_config_free(cfg);
}
68 69 70 71 72 73 74

void test_config_multivar__add(void)
{
	git_config *cfg;
	int n;

	cl_git_pass(git_config_open_ondisk(&cfg, "config/config11"));
75
	cl_git_pass(git_config_set_multivar(cfg, _name, "nonexistant", "git://git.otherplace.org/libgit2"));
76 77

	n = 0;
78
	cl_git_pass(git_config_get_multivar(cfg, _name, NULL, cb, &n));
79 80 81
	cl_assert(n == 3);

	n = 0;
82
	cl_git_pass(git_config_get_multivar(cfg, _name, "otherplace", cb, &n));
83 84 85 86 87 88 89 90 91
	cl_assert(n == 1);

	git_config_free(cfg);

	/* We know it works in memory, let's see if the file is written correctly */

	cl_git_pass(git_config_open_ondisk(&cfg, "config/config11"));

	n = 0;
92
	cl_git_pass(git_config_get_multivar(cfg, _name, NULL, cb, &n));
93 94 95
	cl_assert(n == 3);

	n = 0;
96
	cl_git_pass(git_config_get_multivar(cfg, _name, "otherplace", cb, &n));
97 98 99 100
	cl_assert(n == 1);

	git_config_free(cfg);
}
101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125

void test_config_multivar__replace(void)
{
	git_config *cfg;
	int n;

	cl_git_pass(git_config_open_ondisk(&cfg, "config/config11"));

	n = 0;
	cl_git_pass(git_config_get_multivar(cfg, _name, NULL, cb, &n));
	cl_assert(n == 2);

	cl_git_pass(git_config_set_multivar(cfg, _name, "github", "git://git.otherplace.org/libgit2"));

	n = 0;
	cl_git_pass(git_config_get_multivar(cfg, _name, NULL, cb, &n));
	cl_assert(n == 2);

	git_config_free(cfg);

	cl_git_pass(git_config_open_ondisk(&cfg, "config/config11"));

	n = 0;
	cl_git_pass(git_config_get_multivar(cfg, _name, NULL, cb, &n));
	cl_assert(n == 2);
126 127

	git_config_free(cfg);
128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149
}

void test_config_multivar__replace_multiple(void)
{
	git_config *cfg;
	int n;

	cl_git_pass(git_config_open_ondisk(&cfg, "config/config11"));
	cl_git_pass(git_config_set_multivar(cfg, _name, "git://", "git://git.otherplace.org/libgit2"));

	n = 0;
	cl_git_pass(git_config_get_multivar(cfg, _name, "otherplace", cb, &n));
	cl_assert(n == 2);

	git_config_free(cfg);

	cl_git_pass(git_config_open_ondisk(&cfg, "config/config11"));

	n = 0;
	cl_git_pass(git_config_get_multivar(cfg, _name, "otherplace", cb, &n));
	cl_assert(n == 2);

150
	git_config_free(cfg);
151
}