diff options
Diffstat (limited to 'tests/libgit2/mailmap/basic.c')
-rw-r--r-- | tests/libgit2/mailmap/basic.c | 101 |
1 files changed, 101 insertions, 0 deletions
diff --git a/tests/libgit2/mailmap/basic.c b/tests/libgit2/mailmap/basic.c new file mode 100644 index 000000000..1f8ca56c2 --- /dev/null +++ b/tests/libgit2/mailmap/basic.c @@ -0,0 +1,101 @@ +#include "clar.h" +#include "clar_libgit2.h" + +#include "common.h" +#include "mailmap.h" + +static git_mailmap *mailmap = NULL; + +const char TEST_MAILMAP[] = + "Foo bar <foo@bar.com> <foo@baz.com> \n" + "Blatantly invalid line\n" + "Foo bar <foo@bar.com> <foo@bal.com>\n" + "<email@foo.com> <otheremail@foo.com>\n" + "<email@foo.com> Other Name <yetanotheremail@foo.com>\n"; + +struct { + const char *real_name; + const char *real_email; + const char *replace_name; + const char *replace_email; +} expected[] = { + { "Foo bar", "foo@bar.com", NULL, "foo@baz.com" }, + { "Foo bar", "foo@bar.com", NULL, "foo@bal.com" }, + { NULL, "email@foo.com", NULL, "otheremail@foo.com" }, + { NULL, "email@foo.com", "Other Name", "yetanotheremail@foo.com" } +}; + +void test_mailmap_basic__initialize(void) +{ + cl_git_pass(git_mailmap_from_buffer( + &mailmap, TEST_MAILMAP, strlen(TEST_MAILMAP))); +} + +void test_mailmap_basic__cleanup(void) +{ + git_mailmap_free(mailmap); + mailmap = NULL; +} + +void test_mailmap_basic__entry(void) +{ + size_t idx; + const git_mailmap_entry *entry; + + /* Check that we have the expected # of entries */ + cl_assert_equal_sz(ARRAY_SIZE(expected), git_vector_length(&mailmap->entries)); + + for (idx = 0; idx < ARRAY_SIZE(expected); ++idx) { + /* Try to look up each entry and make sure they match */ + entry = git_mailmap_entry_lookup( + mailmap, expected[idx].replace_name, expected[idx].replace_email); + + cl_assert(entry); + cl_assert_equal_s(entry->real_name, expected[idx].real_name); + cl_assert_equal_s(entry->real_email, expected[idx].real_email); + cl_assert_equal_s(entry->replace_name, expected[idx].replace_name); + cl_assert_equal_s(entry->replace_email, expected[idx].replace_email); + } +} + +void test_mailmap_basic__lookup_not_found(void) +{ + const git_mailmap_entry *entry = git_mailmap_entry_lookup( + mailmap, "Whoever", "doesnotexist@fo.com"); + cl_assert(!entry); +} + +void test_mailmap_basic__lookup(void) +{ + const git_mailmap_entry *entry = git_mailmap_entry_lookup( + mailmap, "Typoed the name once", "foo@baz.com"); + cl_assert(entry); + cl_assert_equal_s(entry->real_name, "Foo bar"); +} + +void test_mailmap_basic__empty_email_query(void) +{ + const char *name; + const char *email; + cl_git_pass(git_mailmap_resolve( + &name, &email, mailmap, "Author name", "otheremail@foo.com")); + cl_assert_equal_s(name, "Author name"); + cl_assert_equal_s(email, "email@foo.com"); +} + +void test_mailmap_basic__name_matching(void) +{ + const char *name; + const char *email; + cl_git_pass(git_mailmap_resolve( + &name, &email, mailmap, "Other Name", "yetanotheremail@foo.com")); + + cl_assert_equal_s(name, "Other Name"); + cl_assert_equal_s(email, "email@foo.com"); + + cl_git_pass(git_mailmap_resolve( + &name, &email, mailmap, + "Other Name That Doesn't Match", "yetanotheremail@foo.com")); + cl_assert_equal_s(name, "Other Name That Doesn't Match"); + cl_assert_equal_s(email, "yetanotheremail@foo.com"); +} |