diff options
Diffstat (limited to 'tests/message/trailer.c')
-rw-r--r-- | tests/message/trailer.c | 268 |
1 files changed, 268 insertions, 0 deletions
diff --git a/tests/message/trailer.c b/tests/message/trailer.c index 83fc77808..85949404c 100644 --- a/tests/message/trailer.c +++ b/tests/message/trailer.c @@ -177,3 +177,271 @@ void test_message_trailer__invalid(void) "Another: trailer\n" , trailers); } + +void test_message_trailer__iterator_simple(void) +{ + git_message_trailer_iterator *iterator; + const char *key; + const char *value; + int rc; + + rc = git_message_trailer_iterator_new( + &iterator, + "Message\n" + "\n" + "Signed-off-by: foo@bar.com\n" + "Signed-off-by: someone@else.com\n"); + + cl_assert(rc == 0); + + rc = git_message_trailer_iterator_next(&key, &value, iterator); + + cl_assert(rc == 0); + + cl_assert_equal_s("Signed-off-by", key); + cl_assert_equal_s("foo@bar.com", value); + + rc = git_message_trailer_iterator_next(&key, &value, iterator); + + cl_assert(rc == 0); + + cl_assert_equal_s("Signed-off-by", key); + cl_assert_equal_s("someone@else.com", value); + + rc = git_message_trailer_iterator_next(&key, &value, iterator); + + cl_assert(rc == GIT_ITEROVER); + + git_message_trailer_iterator_free(iterator); +} + +void test_message_trailer__iterator_no_whitespace(void) +{ + git_message_trailer_iterator *iterator; + const char *key; + const char *value; + int rc; + + rc = git_message_trailer_iterator_new( + &iterator, + "Message\n" + "\n" + "Key:value\n"); + + cl_assert(rc == 0); + + rc = git_message_trailer_iterator_next(&key, &value, iterator); + + cl_assert(rc == 0); + + cl_assert_equal_s("Key", key); + cl_assert_equal_s("value", value); + + rc = git_message_trailer_iterator_next(&key, &value, iterator); + + cl_assert(rc == GIT_ITEROVER); + + git_message_trailer_iterator_free(iterator); +} + +void test_message_trailer__iterator_no_newline(void) +{ + git_message_trailer_iterator *iterator; + const char *key; + const char *value; + int rc; + + rc = git_message_trailer_iterator_new( + &iterator, + "Message\n" + "\n" + "Key:value"); + + cl_assert(rc == 0); + + rc = git_message_trailer_iterator_next(&key, &value, iterator); + + cl_assert(rc == 0); + + cl_assert_equal_s("Key", key); + cl_assert_equal_s("value", value); + + rc = git_message_trailer_iterator_next(&key, &value, iterator); + + cl_assert(rc == GIT_ITEROVER); + + git_message_trailer_iterator_free(iterator); +} + +void test_message_trailer__iterator_not_last_paragraph(void) +{ + git_message_trailer_iterator *iterator; + const char *key; + const char *value; + int rc; + + rc = git_message_trailer_iterator_new( + &iterator, + "Message\n" + "\n" + "Key: value\n" + "\n" + "More stuff\n"); + + cl_assert(rc == 0); + + rc = git_message_trailer_iterator_next(&key, &value, iterator); + + cl_assert(rc == GIT_ITEROVER); + + git_message_trailer_iterator_free(iterator); +} + +void test_message_trailer__iterator_conflicts(void) +{ + git_message_trailer_iterator *iterator; + const char *key; + const char *value; + int rc; + + rc = git_message_trailer_iterator_new( + &iterator, + "Message\n" + "\n" + "Key: value\n" + "\n" + "Conflicts:\n" + "\tfoo.c\n"); + + cl_assert(rc == 0); + + rc = git_message_trailer_iterator_next(&key, &value, iterator); + + cl_assert(rc == 0); + + cl_assert_equal_s("Key", key); + cl_assert_equal_s("value", value); + + rc = git_message_trailer_iterator_next(&key, &value, iterator); + + cl_assert(rc == GIT_ITEROVER); + + git_message_trailer_iterator_free(iterator); +} + +void test_message_trailer__iterator_patch(void) +{ + git_message_trailer_iterator *iterator; + const char *key; + const char *value; + int rc; + + rc = git_message_trailer_iterator_new( + &iterator, + "Message\n" + "\n" + "Key: value\n" + "\n" + "---\n" + "More: stuff\n"); + + cl_assert(rc == 0); + + rc = git_message_trailer_iterator_next(&key, &value, iterator); + + cl_assert(rc == 0); + + cl_assert_equal_s("Key", key); + cl_assert_equal_s("value", value); + + rc = git_message_trailer_iterator_next(&key, &value, iterator); + + cl_assert(rc == GIT_ITEROVER); + + git_message_trailer_iterator_free(iterator); +} + +void test_message_trailer__iterator_continuation(void) +{ + git_message_trailer_iterator *iterator; + const char *key; + const char *value; + int rc; + + rc = git_message_trailer_iterator_new( + &iterator, + "Message\n" + "\n" + "A: b\n" + " c\n" + "D: e\n" + " f: g h\n" + "I: j\n"); + + cl_assert(rc == 0); + + rc = git_message_trailer_iterator_next(&key, &value, iterator); + + cl_assert(rc == 0); + + cl_assert_equal_s("A", key); + cl_assert_equal_s("b\n c", value); + + rc = git_message_trailer_iterator_next(&key, &value, iterator); + + cl_assert(rc == 0); + + cl_assert_equal_s("D", key); + cl_assert_equal_s("e\n f: g h", value); + + rc = git_message_trailer_iterator_next(&key, &value, iterator); + + cl_assert(rc == 0); + + cl_assert_equal_s("I", key); + cl_assert_equal_s("j", value); + + rc = git_message_trailer_iterator_next(&key, &value, iterator); + + cl_assert(rc == GIT_ITEROVER); + + git_message_trailer_iterator_free(iterator); +} + +void test_message_trailer__iterator_invalid(void) +{ + git_message_trailer_iterator *iterator; + const char *key; + const char *value; + int rc; + + rc = git_message_trailer_iterator_new( + &iterator, + "Message\n" + "\n" + "Signed-off-by: some@one.com\n" + "Not a trailer\n" + "Another: trailer\n"); + + cl_assert(rc == 0); + + rc = git_message_trailer_iterator_next(&key, &value, iterator); + + cl_assert(rc == 0); + + cl_assert_equal_s("Signed-off-by", key); + cl_assert_equal_s("some@one.com", value); + + rc = git_message_trailer_iterator_next(&key, &value, iterator); + + cl_assert(rc == 0); + + cl_assert_equal_s("Another", key); + cl_assert_equal_s("trailer", value); + + rc = git_message_trailer_iterator_next(&key, &value, iterator); + + cl_assert(rc == GIT_ITEROVER); + + git_message_trailer_iterator_free(iterator); +} |