|
@@ -363,16 +363,6 @@ test_util_strmisc(void)
|
|
|
test_assert(!tor_strisprint(cp));
|
|
|
tor_free(cp);
|
|
|
|
|
|
- /* Test eat_whitespace. */
|
|
|
- {
|
|
|
- const char *s = " \n a";
|
|
|
- test_eq_ptr(eat_whitespace(s), s+4);
|
|
|
- s = "abcd";
|
|
|
- test_eq_ptr(eat_whitespace(s), s);
|
|
|
- s = "#xyz\nab";
|
|
|
- test_eq_ptr(eat_whitespace(s), s+5);
|
|
|
- }
|
|
|
-
|
|
|
/* Test memmem and memstr */
|
|
|
{
|
|
|
const char *haystack = "abcde";
|
|
@@ -1767,6 +1757,77 @@ test_util_n_bits_set(void *ptr)
|
|
|
;
|
|
|
}
|
|
|
|
|
|
+/**
|
|
|
+ * Test LHS whitespace (and comment) eater
|
|
|
+ */
|
|
|
+static void
|
|
|
+test_util_eat_whitespace(void *ptr)
|
|
|
+{
|
|
|
+ const char ws[] = { ' ', '\t', '\r' }; /* Except NL */
|
|
|
+ char str[80];
|
|
|
+ size_t i;
|
|
|
+
|
|
|
+ (void)ptr;
|
|
|
+
|
|
|
+ /* Try one leading ws */
|
|
|
+ strcpy(str, "fuubaar");
|
|
|
+ for (i = 0; i < sizeof(ws); ++i) {
|
|
|
+ str[0] = ws[i];
|
|
|
+ test_streq(eat_whitespace(str), str + 1);
|
|
|
+ test_streq(eat_whitespace_eos(str, str + strlen(str)), str + 1);
|
|
|
+ test_streq(eat_whitespace_eos_no_nl(str, str + strlen(str)), str + 1);
|
|
|
+ test_streq(eat_whitespace_no_nl(str), str + 1);
|
|
|
+ }
|
|
|
+ str[0] = '\n';
|
|
|
+ test_streq(eat_whitespace(str), str + 1);
|
|
|
+ test_streq(eat_whitespace_eos(str, str + strlen(str)), str + 1);
|
|
|
+
|
|
|
+ /* Empty string */
|
|
|
+ strcpy(str, "");
|
|
|
+ test_eq_ptr(eat_whitespace(str), str);
|
|
|
+ test_eq_ptr(eat_whitespace_eos(str, str), str);
|
|
|
+ test_eq_ptr(eat_whitespace_eos_no_nl(str, str), str);
|
|
|
+ test_eq_ptr(eat_whitespace_no_nl(str), str);
|
|
|
+
|
|
|
+ /* Only ws */
|
|
|
+ strcpy(str, " \t\r\n");
|
|
|
+ test_eq_ptr(eat_whitespace(str), str + strlen(str));
|
|
|
+ test_eq_ptr(eat_whitespace_eos(str, str + strlen(str)), str + strlen(str));
|
|
|
+
|
|
|
+ strcpy(str, " \t\r ");
|
|
|
+ test_eq_ptr(eat_whitespace_no_nl(str), str + strlen(str));
|
|
|
+ test_eq_ptr(eat_whitespace_eos_no_nl(str, str + strlen(str)),
|
|
|
+ str + strlen(str));
|
|
|
+
|
|
|
+ /* Multiple ws */
|
|
|
+ strcpy(str, "fuubaar");
|
|
|
+ for (i = 0; i < sizeof(ws); ++i)
|
|
|
+ str[i] = ws[i];
|
|
|
+ test_streq(eat_whitespace(str), str + sizeof(ws));
|
|
|
+ test_streq(eat_whitespace_eos(str, str + strlen(str)), str + sizeof(ws));
|
|
|
+ test_streq(eat_whitespace_no_nl(str), str + sizeof(ws));
|
|
|
+ test_streq(eat_whitespace_eos_no_nl(str, str + strlen(str)),
|
|
|
+ str + sizeof(ws));
|
|
|
+
|
|
|
+ /* Eat comment */
|
|
|
+ strcpy(str, "# Comment \n No Comment");
|
|
|
+ test_streq(eat_whitespace(str), "No Comment");
|
|
|
+ test_streq(eat_whitespace_eos(str, str + strlen(str)), "No Comment");
|
|
|
+
|
|
|
+ /* Eat comment & ws mix */
|
|
|
+ strcpy(str, " # \t Comment \n\t\nNo Comment");
|
|
|
+ test_streq(eat_whitespace(str), "No Comment");
|
|
|
+ test_streq(eat_whitespace_eos(str, str + strlen(str)), "No Comment");
|
|
|
+
|
|
|
+ /* Eat entire comment */
|
|
|
+ strcpy(str, "#Comment");
|
|
|
+ test_eq_ptr(eat_whitespace(str), str + strlen(str));
|
|
|
+ test_eq_ptr(eat_whitespace_eos(str, str + strlen(str)), str + strlen(str));
|
|
|
+
|
|
|
+ done:
|
|
|
+ ;
|
|
|
+}
|
|
|
+
|
|
|
#define UTIL_LEGACY(name) \
|
|
|
{ #name, legacy_test_helper, 0, &legacy_setup, test_util_ ## name }
|
|
|
|
|
@@ -1805,6 +1866,7 @@ struct testcase_t util_tests[] = {
|
|
|
UTIL_TEST(join_win_cmdline, 0),
|
|
|
UTIL_TEST(split_lines, 0),
|
|
|
UTIL_TEST(n_bits_set, 0),
|
|
|
+ UTIL_TEST(eat_whitespace, 0),
|
|
|
END_OF_TESTCASES
|
|
|
};
|
|
|
|