aboutsummaryrefslogtreecommitdiff
path: root/src/tests/parcini.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/tests/parcini.c')
-rw-r--r--src/tests/parcini.c138
1 files changed, 138 insertions, 0 deletions
diff --git a/src/tests/parcini.c b/src/tests/parcini.c
new file mode 100644
index 0000000..f53ab09
--- /dev/null
+++ b/src/tests/parcini.c
@@ -0,0 +1,138 @@
+#include "tests/tests.h"
+#include "parcini.h"
+
+#include <string.h>
+
+#define PARCINI_TEST_FILE "test.ini"
+
+void
+test_parcini_parse_file(void)
+{
+ parcini_t *parser = parcini_from_file(PARCINI_TEST_FILE);
+ struct parcini_line line;
+ enum parcini_result res;
+
+ /* line 1 */
+ res = parcini_parse_next_line(parser, &line);
+ asserteq(res, PARCINI_KEYVALUE);
+ asserteq(line.lineno, 1);
+ asserteq(strcmp(line.section, ""), 0);
+ asserteq(strcmp(line.key, "key1"), 0);
+ asserteq(line.value.type, PARCINI_VALUE_STRING);
+ asserteq(strcmp(line.value.value.string, "string"), 0);
+
+ /* line 2 */
+ res = parcini_parse_next_line(parser, &line);
+ asserteq(res, PARCINI_KEYVALUE);
+ asserteq(line.lineno, 2);
+ asserteq(strcmp(line.section, ""), 0);
+ asserteq(strcmp(line.key, "key2"), 0);
+ asserteq(line.value.type, PARCINI_VALUE_INTEGER);
+ asserteq(line.value.value.integer, -1520);
+
+ /* line 3 */
+ res = parcini_parse_next_line(parser, &line);
+ asserteq(res, PARCINI_KEYVALUE);
+ asserteq(line.lineno, 3);
+ asserteq(strcmp(line.section, ""), 0);
+ asserteq(strcmp(line.key, "key3"), 0);
+ asserteq(line.value.type, PARCINI_VALUE_BOOLEAN);
+ asserteq(line.value.value.boolean, false);
+
+ /* line 4 */
+ res = parcini_parse_next_line(parser, &line);
+ asserteq(res, PARCINI_EMPTY_LINE);
+ asserteq(line.lineno, 4);
+
+ /* line 5 */
+ res = parcini_parse_next_line(parser, &line);
+ asserteq(res, PARCINI_EMPTY_LINE);
+ asserteq(line.lineno, 5);
+
+ /* line 6 */
+ res = parcini_parse_next_line(parser, &line);
+ asserteq(res, PARCINI_SECTION);
+ asserteq(line.lineno, 6);
+ asserteq(strcmp(line.section, "asection"), 0);
+ asserteq(line.key, NULL);
+ asserteq(line.value.type, PARCINI_VALUE_NONE);
+
+ /* line 7 */
+ res = parcini_parse_next_line(parser, &line);
+ asserteq(res, PARCINI_KEYVALUE);
+ asserteq(line.lineno, 7);
+ asserteq(strcmp(line.section, "asection"), 0);
+ asserteq(strcmp(line.key, "skey"), 0);
+ asserteq(line.value.type, PARCINI_VALUE_STRING);
+ asserteq(strcmp(line.value.value.string, "ur 2 slow"), 0);
+
+ /* line 8 */
+ res = parcini_parse_next_line(parser, &line);
+ asserteq(res, PARCINI_VALUE_PARSE_ERROR);
+ asserteq(line.lineno, 8);
+
+ /* line 9 */
+ res = parcini_parse_next_line(parser, &line);
+ asserteq(res, PARCINI_KEY_PARSE_ERROR);
+ asserteq(line.lineno, 9);
+
+ /* line 10 */
+ res = parcini_parse_next_line(parser, &line);
+ asserteq(res, PARCINI_VALUE_PARSE_ERROR);
+ asserteq(line.lineno, 10);
+
+ /* line 11 */
+ res = parcini_parse_next_line(parser, &line);
+ asserteq(res, PARCINI_VALUE_RANGE_ERROR);
+ asserteq(line.lineno, 11);
+
+ /* line 12 */
+ res = parcini_parse_next_line(parser, &line);
+ asserteq(res, PARCINI_KEYVALUE);
+ asserteq(line.lineno, 12);
+ asserteq(strcmp(line.section, "asection"), 0);
+ asserteq(strcmp(line.key, "bool2"), 0);
+ asserteq(line.value.type, PARCINI_VALUE_BOOLEAN);
+ asserteq(line.value.value.boolean, true);
+
+ /* line 13 */
+ res = parcini_parse_next_line(parser, &line);
+ asserteq(res, PARCINI_KEYVALUE);
+ asserteq(line.lineno, 13);
+ asserteq(strcmp(line.section, "asection"), 0);
+ asserteq(strcmp(line.key, "bool3"), 0);
+ asserteq(line.value.type, PARCINI_VALUE_BOOLEAN);
+ asserteq(line.value.value.boolean, false);
+
+ /* line 14 */
+ res = parcini_parse_next_line(parser, &line);
+ asserteq(res, PARCINI_KEYVALUE);
+ asserteq(line.lineno, 14);
+ asserteq(strcmp(line.section, "asection"), 0);
+ asserteq(strcmp(line.key, "bool3"), 0);
+ asserteq(line.value.type, PARCINI_VALUE_BOOLEAN);
+ asserteq(line.value.value.boolean, true);
+
+ /* line 15 */
+ res = parcini_parse_next_line(parser, &line);
+ asserteq(res, PARCINI_EMPTY_LINE);
+ asserteq(line.lineno, 15);
+
+ /* line 16 */
+ res = parcini_parse_next_line(parser, &line);
+ asserteq(res, PARCINI_SECTION_PARSE_ERROR);
+ asserteq(line.lineno, 16);
+
+ /* EOF */
+ res = parcini_parse_next_line(parser, &line);
+ asserteq(res, PARCINI_EOF);
+
+ parcini_destroy(parser);
+}
+
+int
+main(void)
+{
+ INIT_TESTS();
+ RUN_TEST(test_parcini_parse_file);
+}