214 lines
4.7 KiB
C
214 lines
4.7 KiB
C
#include <check.h>
|
|
#include <string.h>
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include "ucore/string.h"
|
|
#include "ucore/utils.h"
|
|
|
|
|
|
START_TEST (test_getfields)
|
|
{
|
|
char str[] = "a;b;c";
|
|
char *letters[5] = {NULL};
|
|
|
|
int rc = uc_getfields(str, letters, 5, 0, ";");
|
|
ck_assert_int_eq(rc, 3);
|
|
|
|
|
|
ck_assert_str_eq("a", letters[0]);
|
|
ck_assert_str_eq("b", letters[1]);
|
|
ck_assert_str_eq("c", letters[2]);
|
|
}
|
|
END_TEST
|
|
|
|
START_TEST (test_getfields_consecutive)
|
|
{
|
|
char str[] = "a;;b;c;;;";
|
|
char *letters[7] = {NULL};
|
|
|
|
int rc = uc_getfields(str, letters, 5, 0, ";");
|
|
ck_assert_int_eq(rc, 5);
|
|
|
|
|
|
// This result is rather silly, but it's
|
|
// how getfields works with mflag=0
|
|
ck_assert_str_eq("a", letters[0]);
|
|
ck_assert_str_eq("", letters[1]);
|
|
ck_assert_str_eq("b", letters[2]);
|
|
ck_assert_str_eq("c", letters[3]);
|
|
ck_assert_str_eq(";;", letters[4]);
|
|
}
|
|
END_TEST
|
|
|
|
START_TEST (test_getfields_mflag)
|
|
{
|
|
char str[] = "a;b;c";
|
|
char *letters[5] = {NULL};
|
|
|
|
int rc = uc_getfields(str, letters, 5, 1, ";");
|
|
ck_assert_int_eq(rc, 3);
|
|
|
|
|
|
ck_assert_str_eq("a", letters[0]);
|
|
ck_assert_str_eq("b", letters[1]);
|
|
ck_assert_str_eq("c", letters[2]);
|
|
}
|
|
END_TEST
|
|
|
|
START_TEST (test_getfields_consecutive_mflag)
|
|
{
|
|
char str[] = "a;;b;c;;;";
|
|
char *letters[7] = {NULL};
|
|
|
|
int rc = uc_getfields(str, letters, 7, 1, ";");
|
|
ck_assert_int_eq(rc, 3);
|
|
|
|
|
|
// This result is rather silly, but it's
|
|
// how getfields works with mflag=0
|
|
ck_assert_str_eq("a", letters[0]);
|
|
ck_assert_str_eq("b", letters[1]);
|
|
ck_assert_str_eq("c", letters[2]);
|
|
}
|
|
END_TEST
|
|
|
|
START_TEST (test_getfields_too_many)
|
|
{
|
|
char str[] = "a\r\nb\r\nc\r\nd\r\ne";
|
|
char *letters[4] = {NULL};
|
|
|
|
int rc = uc_getfields(str, letters, 4, 0, "\r\n");
|
|
ck_assert_int_eq(rc, 4);
|
|
|
|
// This result is rather silly, but it's
|
|
// how getfields works with mflag=0
|
|
ck_assert_str_eq("a", letters[0]);
|
|
ck_assert_str_eq("", letters[1]);
|
|
ck_assert_str_eq("b", letters[2]);
|
|
ck_assert_str_eq("\nc\r\nd\r\ne", letters[3]);
|
|
}
|
|
END_TEST
|
|
|
|
START_TEST (test_getfields_too_many_mflag)
|
|
{
|
|
char str[] = "a\r\nb\r\nc\r\nd\r\ne";
|
|
char *letters[4] = {NULL};
|
|
|
|
int rc = uc_getfields(str, letters, 4, 1, "\r\n");
|
|
ck_assert_int_eq(rc, 4);
|
|
|
|
ck_assert_str_eq("a", letters[0]);
|
|
ck_assert_str_eq("b", letters[1]);
|
|
ck_assert_str_eq("c", letters[2]);
|
|
ck_assert_str_eq("d\r\ne", letters[3]);
|
|
}
|
|
END_TEST
|
|
|
|
START_TEST (test_getfields_empty)
|
|
{
|
|
char str[] = "";
|
|
char *letters[4] = {NULL};
|
|
|
|
int rc = uc_getfields(str, letters, 4, 0, ";\r\n");
|
|
ck_assert_int_eq(rc, 1);
|
|
ck_assert_str_eq("", letters[0]);
|
|
|
|
rc = uc_getfields(str, letters, 4, 1, ";\r\n");
|
|
ck_assert_int_eq(rc, 0);
|
|
|
|
}
|
|
END_TEST
|
|
|
|
START_TEST (test_gettokens)
|
|
{
|
|
char str[] = "a;b;c";
|
|
char *letters[5] = {NULL};
|
|
|
|
int rc = uc_gettokens(str, letters, 5,";");
|
|
ck_assert_int_eq(rc, 3);
|
|
|
|
|
|
ck_assert_str_eq("a", letters[0]);
|
|
ck_assert_str_eq("b", letters[1]);
|
|
ck_assert_str_eq("c", letters[2]);
|
|
}
|
|
END_TEST
|
|
|
|
START_TEST (test_gettokens_consecutive)
|
|
{
|
|
char str[] = "a;;;b;;c;";
|
|
char *letters[5] = {NULL};
|
|
|
|
int rc = uc_gettokens(str, letters, 5,";");
|
|
ck_assert_int_eq(rc, 3);
|
|
|
|
|
|
ck_assert_str_eq("a", letters[0]);
|
|
ck_assert_str_eq("b", letters[1]);
|
|
ck_assert_str_eq("c", letters[2]);
|
|
}
|
|
END_TEST
|
|
|
|
START_TEST (test_gettokens_empty)
|
|
{
|
|
char str[] = "";
|
|
char *letters[5] = {NULL};
|
|
|
|
int rc = uc_gettokens(str, letters, 5,";");
|
|
ck_assert_int_eq(rc, 0);
|
|
}
|
|
END_TEST
|
|
|
|
START_TEST (test_gettokens_quotes)
|
|
{
|
|
char str[] = "\"abc\";d;\"e \"";
|
|
char *letters[5] = {NULL};
|
|
|
|
int rc = uc_gettokens(str, letters, 5,";");
|
|
ck_assert_int_eq(rc, 3);
|
|
|
|
ck_assert_str_eq("abc", letters[0]);
|
|
ck_assert_str_eq("d", letters[1]);
|
|
ck_assert_str_eq("e ", letters[2]);
|
|
}
|
|
END_TEST
|
|
|
|
START_TEST (test_gettokens_double_quotes)
|
|
{
|
|
char str[] = "\"\"abc\"\";d;\"e\"\"f\"\"\"";
|
|
char *letters[5] = {NULL};
|
|
|
|
int rc = uc_gettokens(str, letters, 5,";");
|
|
ck_assert_int_eq(rc, 3);
|
|
|
|
ck_assert_str_eq("abc", letters[0]);
|
|
ck_assert_str_eq("d", letters[1]);
|
|
ck_assert_str_eq("e\"f\"", letters[2]);
|
|
}
|
|
END_TEST
|
|
|
|
Suite *string_suite(void)
|
|
{
|
|
Suite *s = suite_create("string");
|
|
TCase *tc = tcase_create("string");
|
|
|
|
tcase_add_test(tc, test_getfields);
|
|
tcase_add_test(tc, test_getfields_consecutive);
|
|
tcase_add_test(tc, test_getfields_mflag);
|
|
tcase_add_test(tc, test_getfields_consecutive_mflag);
|
|
tcase_add_test(tc, test_getfields_too_many);
|
|
tcase_add_test(tc, test_getfields_too_many_mflag);
|
|
tcase_add_test(tc, test_getfields_empty);
|
|
|
|
tcase_add_test(tc, test_gettokens);
|
|
tcase_add_test(tc, test_gettokens_consecutive);
|
|
tcase_add_test(tc, test_gettokens_empty);
|
|
tcase_add_test(tc, test_gettokens_quotes);
|
|
tcase_add_test(tc, test_gettokens_double_quotes);
|
|
|
|
suite_add_tcase(s, tc);
|
|
|
|
return s;
|
|
}
|
|
|