]> git.proxmox.com Git - libgit2.git/blobdiff - tests/libgit2/config/memory.c
Merge https://salsa.debian.org/debian/libgit2 into proxmox/bullseye
[libgit2.git] / tests / libgit2 / config / memory.c
diff --git a/tests/libgit2/config/memory.c b/tests/libgit2/config/memory.c
new file mode 100644 (file)
index 0000000..ae66189
--- /dev/null
@@ -0,0 +1,139 @@
+#include "clar_libgit2.h"
+
+#include "config_backend.h"
+
+static git_config_backend *backend;
+
+void test_config_memory__initialize(void)
+{
+       backend = NULL;
+}
+
+void test_config_memory__cleanup(void)
+{
+       git_config_backend_free(backend);
+}
+
+static void assert_config_contains(git_config_backend *backend,
+       const char *name, const char *value)
+{
+       git_config_entry *entry;
+       cl_git_pass(git_config_backend_get_string(&entry, backend, name));
+       cl_assert_equal_s(entry->value, value);
+}
+
+struct expected_entry {
+       const char *name;
+       const char *value;
+       int seen;
+};
+
+static int contains_all_cb(const git_config_entry *entry, void *payload)
+{
+       struct expected_entry *entries = (struct expected_entry *) payload;
+       int i;
+
+       for (i = 0; entries[i].name; i++) {
+               if (strcmp(entries[i].name, entry->name) ||
+                   strcmp(entries[i].value , entry->value))
+                       continue;
+
+               if (entries[i].seen)
+                       cl_fail("Entry seen more than once");
+               entries[i].seen = 1;
+               return 0;
+       }
+
+       cl_fail("Unexpected entry");
+       return -1;
+}
+
+static void assert_config_contains_all(git_config_backend *backend,
+       struct expected_entry *entries)
+{
+       int i;
+
+       cl_git_pass(git_config_backend_foreach(backend, contains_all_cb, entries));
+
+       for (i = 0; entries[i].name; i++)
+               cl_assert(entries[i].seen);
+}
+
+static void setup_backend(const char *cfg)
+{
+       cl_git_pass(git_config_backend_from_string(&backend, cfg, strlen(cfg)));
+       cl_git_pass(git_config_backend_open(backend, 0, NULL));
+}
+
+void test_config_memory__write_operations_fail(void)
+{
+       setup_backend("");
+       cl_git_fail(git_config_backend_set_string(backend, "general.foo", "var"));
+       cl_git_fail(git_config_backend_delete(backend, "general.foo"));
+       cl_git_fail(git_config_backend_lock(backend));
+       cl_git_fail(git_config_backend_unlock(backend, 0));
+}
+
+void test_config_memory__simple(void)
+{
+       setup_backend(
+               "[general]\n"
+               "foo=bar\n");
+
+       assert_config_contains(backend, "general.foo", "bar");
+}
+
+void test_config_memory__malformed_fails_to_open(void)
+{
+       const char *cfg =
+               "[general\n"
+               "foo=bar\n";
+       cl_git_pass(git_config_backend_from_string(&backend, cfg, strlen(cfg)));
+       cl_git_fail(git_config_backend_open(backend, 0, NULL));
+}
+
+void test_config_memory__multiple_vars(void)
+{
+       setup_backend(
+               "[general]\n"
+               "foo=bar\n"
+               "key=value\n");
+       assert_config_contains(backend, "general.foo", "bar");
+       assert_config_contains(backend, "general.key", "value");
+}
+
+void test_config_memory__multiple_sections(void)
+{
+       setup_backend(
+               "[general]\n"
+               "foo=bar\n"
+               "\n"
+               "[other]\n"
+               "key=value\n");
+       assert_config_contains(backend, "general.foo", "bar");
+       assert_config_contains(backend, "other.key", "value");
+}
+
+void test_config_memory__multivar_gets_correct_string(void)
+{
+       setup_backend(
+               "[general]\n"
+               "foo=bar1\n"
+               "foo=bar2\n");
+       assert_config_contains(backend, "general.foo", "bar2");
+}
+
+void test_config_memory__foreach_sees_multivar(void)
+{
+       struct expected_entry entries[] = {
+               { "general.foo", "bar1", 0 },
+               { "general.foo", "bar2", 0 },
+               { NULL, NULL, 0 },
+       };
+
+       setup_backend(
+               "[general]\n"
+               "foo=bar1\n"
+               "foo=bar2\n");
+       assert_config_contains_all(backend, entries);
+}