summaryrefslogtreecommitdiff
path: root/test/settings.c
diff options
context:
space:
mode:
authorAlbert Cervin <albert@acervin.com>2023-02-21 22:26:36 +0100
committerAlbert Cervin <albert@acervin.com>2023-02-21 22:26:36 +0100
commit44fd8cde61e3e89e5f83c98900a403e922073727 (patch)
tree22ed65a8b3c766fa21c35fe4d567399e3810454a /test/settings.c
parentd7bf8702bf32720d93c4e690937bc8b683926be1 (diff)
downloaddged-44fd8cde61e3e89e5f83c98900a403e922073727.tar.gz
dged-44fd8cde61e3e89e5f83c98900a403e922073727.tar.xz
dged-44fd8cde61e3e89e5f83c98900a403e922073727.zip
Implement support for settings
Settings are a flat "dictionary" containing paths to settings on the format: <category>.<sub-category>.<setting>.
Diffstat (limited to 'test/settings.c')
-rw-r--r--test/settings.c73
1 files changed, 73 insertions, 0 deletions
diff --git a/test/settings.c b/test/settings.c
new file mode 100644
index 0000000..181cd73
--- /dev/null
+++ b/test/settings.c
@@ -0,0 +1,73 @@
+#include "assert.h"
+#include "test.h"
+
+#include "settings.h"
+#include <stdlib.h>
+
+void test_get() {
+ settings_init(10);
+ settings_register_setting(
+ "my.setting",
+ (struct setting_value){.type = Setting_Bool, .bool_value = false});
+
+ struct setting *s = settings_get("my.setting");
+ ASSERT(s != NULL, "Expected setting to exist after being inserted");
+ ASSERT(s->value.type == Setting_Bool,
+ "Expected inserted setting to have the same type when retrieved");
+ ASSERT(!s->value.bool_value,
+ "Expected inserted setting to have the same value when retrieved");
+
+ settings_register_setting(
+ "other.setting",
+ (struct setting_value){.type = Setting_Number, .number_value = 28});
+
+ struct setting **res = NULL;
+ uint32_t nres = 0;
+ settings_get_prefix("my", &res, &nres);
+
+ ASSERT(nres == 1, "Expected to get one result back");
+ ASSERT(s->value.type == Setting_Bool, "Expected inserted setting to have the "
+ "same type when retrieved by prefix");
+ ASSERT(!s->value.bool_value, "Expected inserted setting to have the same "
+ "value when retrieved by prefix");
+
+ free(res);
+
+ settings_destroy();
+}
+
+void test_set() {
+ settings_init(10);
+ settings_register_setting(
+ "my.setting",
+ (struct setting_value){.type = Setting_Bool, .bool_value = false});
+
+ // test that wrong type is ignored;
+ settings_set("my.setting", (struct setting_value){.type = Setting_String,
+ .string_value = "bonan"});
+
+ struct setting *s = settings_get("my.setting");
+ ASSERT(s != NULL, "Expected setting to exist after being inserted");
+ ASSERT(s->value.type == Setting_Bool,
+ "Expected inserted setting type to not have been changed");
+ ASSERT(!s->value.bool_value,
+ "Expected inserted setting value to not have been changed");
+
+ // test that correct type is indeed changed
+ settings_set("my.setting", (struct setting_value){.type = Setting_Bool,
+ .bool_value = true});
+
+ s = settings_get("my.setting");
+ ASSERT(s != NULL, "Expected setting to exist");
+ ASSERT(s->value.type == Setting_Bool,
+ "Expected inserted setting type to not have been changed");
+ ASSERT(s->value.bool_value,
+ "Expected inserted setting value to _have_ been changed");
+
+ settings_destroy();
+}
+
+void run_settings_tests() {
+ run_test(test_get);
+ run_test(test_set);
+}