]> git.proxmox.com Git - libgit2.git/blob - tests/config/memory.c
New upstream version 1.4.3+dfsg.1
[libgit2.git] / tests / config / memory.c
1 #include "clar_libgit2.h"
2
3 #include "config_backend.h"
4
5 static git_config_backend *backend;
6
7 void test_config_memory__initialize(void)
8 {
9 backend = NULL;
10 }
11
12 void test_config_memory__cleanup(void)
13 {
14 git_config_backend_free(backend);
15 }
16
17 static void assert_config_contains(git_config_backend *backend,
18 const char *name, const char *value)
19 {
20 git_config_entry *entry;
21 cl_git_pass(git_config_backend_get_string(&entry, backend, name));
22 cl_assert_equal_s(entry->value, value);
23 }
24
25 struct expected_entry {
26 const char *name;
27 const char *value;
28 int seen;
29 };
30
31 static int contains_all_cb(const git_config_entry *entry, void *payload)
32 {
33 struct expected_entry *entries = (struct expected_entry *) payload;
34 int i;
35
36 for (i = 0; entries[i].name; i++) {
37 if (strcmp(entries[i].name, entry->name) ||
38 strcmp(entries[i].value , entry->value))
39 continue;
40
41 if (entries[i].seen)
42 cl_fail("Entry seen more than once");
43 entries[i].seen = 1;
44 return 0;
45 }
46
47 cl_fail("Unexpected entry");
48 return -1;
49 }
50
51 static void assert_config_contains_all(git_config_backend *backend,
52 struct expected_entry *entries)
53 {
54 int i;
55
56 cl_git_pass(git_config_backend_foreach(backend, contains_all_cb, entries));
57
58 for (i = 0; entries[i].name; i++)
59 cl_assert(entries[i].seen);
60 }
61
62 static void setup_backend(const char *cfg)
63 {
64 cl_git_pass(git_config_backend_from_string(&backend, cfg, strlen(cfg)));
65 cl_git_pass(git_config_backend_open(backend, 0, NULL));
66 }
67
68 void test_config_memory__write_operations_fail(void)
69 {
70 setup_backend("");
71 cl_git_fail(git_config_backend_set_string(backend, "general.foo", "var"));
72 cl_git_fail(git_config_backend_delete(backend, "general.foo"));
73 cl_git_fail(git_config_backend_lock(backend));
74 cl_git_fail(git_config_backend_unlock(backend, 0));
75 }
76
77 void test_config_memory__simple(void)
78 {
79 setup_backend(
80 "[general]\n"
81 "foo=bar\n");
82
83 assert_config_contains(backend, "general.foo", "bar");
84 }
85
86 void test_config_memory__malformed_fails_to_open(void)
87 {
88 const char *cfg =
89 "[general\n"
90 "foo=bar\n";
91 cl_git_pass(git_config_backend_from_string(&backend, cfg, strlen(cfg)));
92 cl_git_fail(git_config_backend_open(backend, 0, NULL));
93 }
94
95 void test_config_memory__multiple_vars(void)
96 {
97 setup_backend(
98 "[general]\n"
99 "foo=bar\n"
100 "key=value\n");
101 assert_config_contains(backend, "general.foo", "bar");
102 assert_config_contains(backend, "general.key", "value");
103 }
104
105 void test_config_memory__multiple_sections(void)
106 {
107 setup_backend(
108 "[general]\n"
109 "foo=bar\n"
110 "\n"
111 "[other]\n"
112 "key=value\n");
113 assert_config_contains(backend, "general.foo", "bar");
114 assert_config_contains(backend, "other.key", "value");
115 }
116
117 void test_config_memory__multivar_gets_correct_string(void)
118 {
119 setup_backend(
120 "[general]\n"
121 "foo=bar1\n"
122 "foo=bar2\n");
123 assert_config_contains(backend, "general.foo", "bar2");
124 }
125
126 void test_config_memory__foreach_sees_multivar(void)
127 {
128 struct expected_entry entries[] = {
129 { "general.foo", "bar1", 0 },
130 { "general.foo", "bar2", 0 },
131 { NULL, NULL, 0 },
132 };
133
134 setup_backend(
135 "[general]\n"
136 "foo=bar1\n"
137 "foo=bar2\n");
138 assert_config_contains_all(backend, entries);
139 }