Commit b88cbf8c28b6965e6f57d8f044aeab437914c23d

Emilio Cobos Álvarez 2018-03-18T01:40:47

mailmap: Add some super-basic tests

diff --git a/tests/mailmap/basic.c b/tests/mailmap/basic.c
new file mode 100644
index 0000000..b507407
--- /dev/null
+++ b/tests/mailmap/basic.c
@@ -0,0 +1,98 @@
+#include "clar.h"
+#include "clar_libgit2.h"
+
+#include "common.h"
+#include "git2/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";
+
+void test_mailmap_basic__initialize(void)
+{
+	cl_git_pass(git_mailmap_parse(&mailmap, TEST_MAILMAP, sizeof(TEST_MAILMAP)));
+}
+
+void test_mailmap_basic__cleanup(void)
+{
+	if (mailmap) {
+		git_mailmap_free(mailmap);
+		mailmap = NULL;
+	}
+}
+
+void test_mailmap_basic__entry(void)
+{
+	git_mailmap_entry* entry;
+
+	cl_assert(git_mailmap_entry_count(mailmap) == 4);
+
+	entry = git_mailmap_entry_byindex(mailmap, 0);
+	cl_assert(entry);
+	cl_assert(!entry->replace_name);
+	cl_assert(!git__strcmp(entry->replace_email, "foo@baz.com"));
+
+	entry = git_mailmap_entry_byindex(mailmap, 10000);
+	cl_assert(!entry);
+}
+
+void test_mailmap_basic__lookup_not_found(void)
+{
+	git_mailmap_entry* entry = git_mailmap_entry_lookup(
+		mailmap,
+		"Whoever",
+		"doesnotexist@fo.com");
+	cl_assert(!entry);
+}
+
+void test_mailmap_basic__lookup(void)
+{
+	git_mailmap_entry* entry = git_mailmap_entry_lookup(
+		mailmap,
+		"Typoed the name once",
+		"foo@baz.com");
+	cl_assert(entry);
+	cl_assert(!git__strcmp(entry->real_name, "Foo bar"));
+}
+
+void test_mailmap_basic__empty_email_query(void)
+{
+	const char* name;
+	const char* email;
+	git_mailmap_resolve(
+		&name,
+		&email,
+		mailmap,
+		"Author name",
+		"otheremail@foo.com");
+	cl_assert(!git__strcmp(name, "Author name"));
+	cl_assert(!git__strcmp(email, "email@foo.com"));
+}
+
+void test_mailmap_basic__name_matching(void)
+{
+	const char* name;
+	const char* email;
+	git_mailmap_resolve(
+		&name,
+		&email,
+		mailmap,
+		"Other Name",
+		"yetanotheremail@foo.com");
+	cl_assert(!git__strcmp(name, "Other Name"));
+	cl_assert(!git__strcmp(email, "email@foo.com"));
+
+	git_mailmap_resolve(
+		&name,
+		&email,
+		mailmap,
+		"Other Name That Doesn't Match",
+		"yetanotheremail@foo.com");
+	cl_assert(!git__strcmp(name, "Other Name That Doesn't Match"));
+	cl_assert(!git__strcmp(email, "yetanotheremail@foo.com"));
+}