X-Git-Url: https://git.tokkee.org/?p=sysdb.git;a=blobdiff_plain;f=t%2Funit%2Fcore%2Fdata_test.c;h=0ce93bced809b379c91513c6bc697c9ddc98ece3;hp=e0ff3a88cb9c5d684bcb66345dd3df7977b12e71;hb=6ceaca1424cee5339613b2622ee8e160168fda1b;hpb=ffaf79ce48d2173371f7cbf07842b2bbbc6a993c diff --git a/t/unit/core/data_test.c b/t/unit/core/data_test.c index e0ff3a8..0ce93bc 100644 --- a/t/unit/core/data_test.c +++ b/t/unit/core/data_test.c @@ -365,6 +365,59 @@ START_TEST(test_format) } END_TEST +START_TEST(test_parse) +{ + struct { + char *input; + sdb_data_t result; + int expected; + } golden_data[] = { + { "4711", { SDB_TYPE_INTEGER, { .integer = 4711 } }, 0 }, + { "0x10", { SDB_TYPE_INTEGER, { .integer = 16 } }, 0 }, + { "010", { SDB_TYPE_INTEGER, { .integer = 8 } }, 0 }, + { "abc", { SDB_TYPE_INTEGER, { .integer = 0 } }, -1 }, + { "1.2", { SDB_TYPE_DECIMAL, { .decimal = 1.2 } }, 0 }, + { "0x1p+16", { SDB_TYPE_DECIMAL, { .decimal = 65536.0 } }, 0 }, + { "abc", { SDB_TYPE_DECIMAL, { .decimal = 0.0 } }, -1 }, + { "abc", { SDB_TYPE_STRING, { .string = "abc" } }, 0 }, + { ".4", { SDB_TYPE_DATETIME, { .datetime = 400000000 } }, 0 }, + { "abc", { SDB_TYPE_DATETIME, { .datetime = 0 } }, -1 }, + { "abc", { SDB_TYPE_BINARY, + { .binary = { 3, (unsigned char *)"abc" } } }, 0 }, + }; + + size_t i; + + for (i = 0; i < SDB_STATIC_ARRAY_LEN(golden_data); ++i) { + sdb_data_t result; + int type, check; + + memset(&result, 0, sizeof(result)); + type = golden_data[i].result.type; + check = sdb_data_parse(golden_data[i].input, type, &result); + fail_unless(check == golden_data[i].expected, + "sdb_data_parse(%s, %d, ) = %d; expected: %d", + golden_data[i].input, type, check, golden_data[i].expected); + + if (check) + continue; + + fail_unless(sdb_data_cmp(&result, &golden_data[i].result) == 0, + "sdb_data_parse(%s, %d, ) did not create expected result", + golden_data[i].input, type); + + if (type == SDB_TYPE_STRING) + fail_unless(golden_data[i].input == result.data.string, + "sdb_data_parse(%s, %d, ) modified input string", + golden_data[i].input, type); + if (type == SDB_TYPE_BINARY) + fail_unless(golden_data[i].input == (char *)result.data.binary.datum, + "sdb_data_parse(%s, %d, ) modified input string", + golden_data[i].input, type); + } +} +END_TEST + Suite * core_data_suite(void) { @@ -375,6 +428,7 @@ core_data_suite(void) tcase_add_test(tc, test_data); tcase_add_test(tc, test_cmp); tcase_add_test(tc, test_format); + tcase_add_test(tc, test_parse); suite_add_tcase(s, tc); return s;