summaryrefslogtreecommitdiff
path: root/tests/message/trailer.c
diff options
context:
space:
mode:
Diffstat (limited to 'tests/message/trailer.c')
-rw-r--r--tests/message/trailer.c268
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);
+}