Add tests for getfields and gettokens
This commit is contained in:
+3
-1
@@ -34,6 +34,7 @@ extern Suite *ticket_lock_suite(void);
|
|||||||
extern Suite *restart_counter_suite(void);
|
extern Suite *restart_counter_suite(void);
|
||||||
extern Suite *iomux_suite(void);
|
extern Suite *iomux_suite(void);
|
||||||
extern Suite *iomux_signal_suite(void);
|
extern Suite *iomux_signal_suite(void);
|
||||||
|
extern Suite *string_suite(void);
|
||||||
|
|
||||||
static suite_func suites[] = {
|
static suite_func suites[] = {
|
||||||
bitvec_suite,
|
bitvec_suite,
|
||||||
@@ -62,7 +63,8 @@ static suite_func suites[] = {
|
|||||||
ticket_lock_suite,
|
ticket_lock_suite,
|
||||||
restart_counter_suite,
|
restart_counter_suite,
|
||||||
iomux_suite,
|
iomux_suite,
|
||||||
iomux_signal_suite
|
iomux_signal_suite,
|
||||||
|
string_suite
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,198 @@
|
|||||||
|
#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 = 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;
|
||||||
|
}
|
||||||
|
|
||||||
Reference in New Issue
Block a user