|
|
#include "../../unity/unity.h" |
|
|
#include <stddef.h> |
|
|
#include <stdbool.h> |
|
|
#include <string.h> |
|
|
|
|
|
|
|
|
void setUp(void) { |
|
|
|
|
|
} |
|
|
void tearDown(void) { |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static void assert_args_is(char **expected) { |
|
|
TEST_ASSERT_EQUAL_PTR(expected, args); |
|
|
} |
|
|
|
|
|
|
|
|
void test_nextarg_no_tokens_returns_false_and_no_advance(void) { |
|
|
char *argv[] = { NULL }; |
|
|
args = argv; |
|
|
|
|
|
char **before = args; |
|
|
bool r = nextarg("anything"); |
|
|
|
|
|
TEST_ASSERT_FALSE(r); |
|
|
assert_args_is(before); |
|
|
} |
|
|
|
|
|
|
|
|
void test_nextarg_match_advances_pointer(void) { |
|
|
char *argv[] = { (char*)"foo", (char*)"bar", NULL }; |
|
|
args = argv; |
|
|
|
|
|
bool r1 = nextarg("foo"); |
|
|
TEST_ASSERT_TRUE(r1); |
|
|
assert_args_is(&argv[1]); |
|
|
|
|
|
bool r2 = nextarg("bar"); |
|
|
TEST_ASSERT_TRUE(r2); |
|
|
assert_args_is(&argv[2]); |
|
|
|
|
|
|
|
|
char **before = args; |
|
|
bool r3 = nextarg("baz"); |
|
|
TEST_ASSERT_FALSE(r3); |
|
|
assert_args_is(before); |
|
|
} |
|
|
|
|
|
|
|
|
void test_nextarg_nonmatch_does_not_advance(void) { |
|
|
char *argv[] = { (char*)"foo", (char*)"bar", NULL }; |
|
|
args = argv; |
|
|
|
|
|
bool r = nextarg("qux"); |
|
|
TEST_ASSERT_FALSE(r); |
|
|
assert_args_is(argv); |
|
|
} |
|
|
|
|
|
|
|
|
void test_nextarg_exact_match_only_not_prefix(void) { |
|
|
char *argv[] = { (char*)"foobar", NULL }; |
|
|
args = argv; |
|
|
|
|
|
bool r1 = nextarg("foo"); |
|
|
TEST_ASSERT_FALSE(r1); |
|
|
assert_args_is(argv); |
|
|
|
|
|
bool r2 = nextarg("foobar"); |
|
|
TEST_ASSERT_TRUE(r2); |
|
|
assert_args_is(&argv[1]); |
|
|
} |
|
|
|
|
|
|
|
|
void test_nextarg_empty_string_token_and_pattern(void) { |
|
|
char *argv[] = { (char*)"", (char*)"x", NULL }; |
|
|
args = argv; |
|
|
|
|
|
bool r1 = nextarg(""); |
|
|
TEST_ASSERT_TRUE(r1); |
|
|
assert_args_is(&argv[1]); |
|
|
|
|
|
bool r2 = nextarg(""); |
|
|
TEST_ASSERT_FALSE(r2); |
|
|
assert_args_is(&argv[1]); |
|
|
} |
|
|
|
|
|
|
|
|
void test_nextarg_interleaved_calls(void) { |
|
|
char *argv[] = { (char*)"a", (char*)"b", (char*)"c", NULL }; |
|
|
args = argv; |
|
|
|
|
|
|
|
|
TEST_ASSERT_FALSE(nextarg("z")); |
|
|
assert_args_is(argv); |
|
|
|
|
|
|
|
|
TEST_ASSERT_TRUE(nextarg("a")); |
|
|
assert_args_is(&argv[1]); |
|
|
|
|
|
|
|
|
TEST_ASSERT_FALSE(nextarg("a")); |
|
|
assert_args_is(&argv[1]); |
|
|
|
|
|
|
|
|
TEST_ASSERT_TRUE(nextarg("b")); |
|
|
assert_args_is(&argv[2]); |
|
|
|
|
|
|
|
|
TEST_ASSERT_TRUE(nextarg("c")); |
|
|
assert_args_is(&argv[3]); |
|
|
|
|
|
|
|
|
char **endpos = args; |
|
|
TEST_ASSERT_FALSE(nextarg("anything")); |
|
|
assert_args_is(endpos); |
|
|
} |
|
|
|
|
|
|
|
|
int main(void) { |
|
|
UNITY_BEGIN(); |
|
|
|
|
|
RUN_TEST(test_nextarg_no_tokens_returns_false_and_no_advance); |
|
|
RUN_TEST(test_nextarg_match_advances_pointer); |
|
|
RUN_TEST(test_nextarg_nonmatch_does_not_advance); |
|
|
RUN_TEST(test_nextarg_exact_match_only_not_prefix); |
|
|
RUN_TEST(test_nextarg_empty_string_token_and_pattern); |
|
|
RUN_TEST(test_nextarg_interleaved_calls); |
|
|
|
|
|
return UNITY_END(); |
|
|
} |