#include "tests/tests.h" #include "parcini.h" #include #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, "3"), 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, "s"), 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, "s"), 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, "s"), 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, "s"), 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, "s"), 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_KEY_PARSE_ERROR); asserteq(line.lineno, 15); /* line 16 */ res = parcini_parse_next_line(parser, &line); asserteq(res, PARCINI_EMPTY_LINE); asserteq(line.lineno, 16); /* line 17 */ res = parcini_parse_next_line(parser, &line); asserteq(res, PARCINI_SECTION); asserteq(line.lineno, 17); asserteq(strcmp(line.section, "se"), 0); asserteq(line.key, NULL); asserteq(line.value.type, PARCINI_VALUE_NONE); /* line 18 */ res = parcini_parse_next_line(parser, &line); asserteq(res, PARCINI_EMPTY_LINE); asserteq(line.lineno, 18); /* line 19 */ res = parcini_parse_next_line(parser, &line); asserteq(res, PARCINI_SECTION_PARSE_ERROR); asserteq(line.lineno, 19); /* line 20 */ res = parcini_parse_next_line(parser, &line); asserteq(res, PARCINI_EMPTY_LINE); asserteq(line.lineno, 20); /* line 21 */ res = parcini_parse_next_line(parser, &line); asserteq(res, PARCINI_SECTION); asserteq(line.lineno, 21); asserteq(strcmp(line.section, "section"), 0); asserteq(line.key, NULL); asserteq(line.value.type, PARCINI_VALUE_NONE); /* 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); }