multivar.c 3.04 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 git_config_entry *entry, void *data)
16 17 18
{
	int *n = (int *) data;

19
	if (!strcmp(entry->name, _name))
20 21
		(*n)++;

22
	return 0;
23 24 25 26 27 28 29 30 31 32 33 34 35 36
}

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);
}
37

38
static int cb(const git_config_entry *entry, void *data)
39 40 41
{
	int *n = (int *) data;

42
	GIT_UNUSED(entry);
43

44 45
	(*n)++;

46
	return 0;
47 48 49 50 51 52 53
}

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

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

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

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

	git_config_free(cfg);
}
66 67 68 69 70 71 72

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

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

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

	n = 0;
80
	cl_git_pass(git_config_get_multivar(cfg, _name, "otherplace", cb, &n));
81 82 83 84 85 86 87 88 89
	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;
90
	cl_git_pass(git_config_get_multivar(cfg, _name, NULL, cb, &n));
91 92 93
	cl_assert(n == 3);

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

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

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);
124 125

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

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);

148
	git_config_free(cfg);
149
}