diff options
author | Brian Lopez <seniorlopez@gmail.com> | 2018-01-17 13:54:42 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-01-17 13:54:42 -0800 |
commit | 4893a9c01c8da084eb995178f80d0d453109056e (patch) | |
tree | bfe94f6be3e56a211205075ecdf863a3195c3423 /tests | |
parent | ecd55cec771d9c6f7ffffe80422a1decd4645c17 (diff) | |
parent | d4a3a4b5383fefcb397524340af05118b4687f29 (diff) | |
download | libgit2-4893a9c01c8da084eb995178f80d0d453109056e.tar.gz |
Merge pull request #4451 from libgit2/charliesome/trailer-info
Implement message trailer parsing API
Diffstat (limited to 'tests')
-rw-r--r-- | tests/message/trailer.c | 165 |
1 files changed, 165 insertions, 0 deletions
diff --git a/tests/message/trailer.c b/tests/message/trailer.c new file mode 100644 index 000000000..9cc83de72 --- /dev/null +++ b/tests/message/trailer.c @@ -0,0 +1,165 @@ +#include "clar_libgit2.h" +#include "message.h" + +static void assert_trailers(const char *message, git_message_trailer *trailers) +{ + git_message_trailer_array arr; + size_t i; + + int rc = git_message_trailers(&arr, message); + + cl_assert_equal_i(0, rc); + + for(i=0; i<arr.count; i++) { + cl_assert_equal_s(arr.trailers[i].key, trailers[i].key); + cl_assert_equal_s(arr.trailers[i].value, trailers[i].value); + } + + cl_assert_equal_i(0, rc); + + git_message_trailer_array_free(&arr); +} + +void test_message_trailer__simple(void) +{ + git_message_trailer trailers[] = { + {"Signed-off-by", "foo@bar.com"}, + {"Signed-off-by", "someone@else.com"}, + {NULL, NULL}, + }; + + assert_trailers( + "Message\n" + "\n" + "Signed-off-by: foo@bar.com\n" + "Signed-off-by: someone@else.com\n" + , trailers); +} + +void test_message_trailer__no_whitespace(void) +{ + git_message_trailer trailers[] = { + {"Key", "value"}, + {NULL, NULL}, + }; + + assert_trailers( + "Message\n" + "\n" + "Key:value\n" + , trailers); +} + +void test_message_trailer__extra_whitespace(void) +{ + git_message_trailer trailers[] = { + {"Key", "value"}, + {NULL, NULL}, + }; + + assert_trailers( + "Message\n" + "\n" + "Key : value\n" + , trailers); +} + +void test_message_trailer__no_newline(void) +{ + git_message_trailer trailers[] = { + {"Key", "value"}, + {NULL, NULL}, + }; + + assert_trailers( + "Message\n" + "\n" + "Key: value" + , trailers); +} + +void test_message_trailer__not_last_paragraph(void) +{ + git_message_trailer trailers[] = { + {NULL, NULL}, + }; + + assert_trailers( + "Message\n" + "\n" + "Key: value\n" + "\n" + "More stuff\n" + , trailers); +} + +void test_message_trailer__conflicts(void) +{ + git_message_trailer trailers[] = { + {"Key", "value"}, + {NULL, NULL}, + }; + + assert_trailers( + "Message\n" + "\n" + "Key: value\n" + "\n" + "Conflicts:\n" + "\tfoo.c\n" + , trailers); +} + +void test_message_trailer__patch(void) +{ + git_message_trailer trailers[] = { + {"Key", "value"}, + {NULL, NULL}, + }; + + assert_trailers( + "Message\n" + "\n" + "Key: value\n" + "\n" + "---\n" + "More: stuff\n" + , trailers); +} + +void test_message_trailer__continuation(void) +{ + git_message_trailer trailers[] = { + {"A", "b\n c"}, + {"D", "e\n f: g h"}, + {"I", "j"}, + {NULL, NULL}, + }; + + assert_trailers( + "Message\n" + "\n" + "A: b\n" + " c\n" + "D: e\n" + " f: g h\n" + "I: j\n" + , trailers); +} + +void test_message_trailer__invalid(void) +{ + git_message_trailer trailers[] = { + {"Signed-off-by", "some@one.com"}, + {"Another", "trailer"}, + {NULL, NULL}, + }; + + assert_trailers( + "Message\n" + "\n" + "Signed-off-by: some@one.com\n" + "Not a trailer\n" + "Another: trailer\n" + , trailers); +} |