#include #include #include #include #include "ucore/string.h" #include "ucore/utils.h" START_TEST (test_getfields) char str[] = "a;b;c"; char *letters[5] = {NULL}; int rc = 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 = 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 = 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 = 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 = 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 = 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 = getfields(str, letters, 4, 0, ";\r\n"); ck_assert_int_eq(rc, 1); ck_assert_str_eq("", letters[0]); rc = 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 = 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 = 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 = 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 = 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 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); suite_add_tcase(s, tc); return s; }