trailer.c 2.53 KB
Newer Older
1 2
#include "clar_libgit2.h"

3
static void assert_trailers(const char *message, git_message_trailer *trailers)
4
{
5
	git_message_trailer_array arr;
6
	size_t i;
7

8
	int rc = git_message_trailers(&arr, message);
9

10 11
	cl_assert_equal_i(0, rc);

12
	for(i=0; i<arr.count; i++) {
13 14 15
		cl_assert_equal_s(arr.trailers[i].key, trailers[i].key);
		cl_assert_equal_s(arr.trailers[i].value, trailers[i].value);
	}
16 17

	cl_assert_equal_i(0, rc);
18 19

	git_message_trailer_array_free(&arr);
20 21 22 23
}

void test_message_trailer__simple(void)
{
24
	git_message_trailer trailers[] = {
25 26 27 28
		{"Signed-off-by", "foo@bar.com"},
		{"Signed-off-by", "someone@else.com"},
		{NULL, NULL},
	};
29

30 31 32 33 34
	assert_trailers(
		"Message\n"
		"\n"
		"Signed-off-by: foo@bar.com\n"
		"Signed-off-by: someone@else.com\n"
35
	, trailers);
36 37 38 39
}

void test_message_trailer__no_whitespace(void)
{
40
	git_message_trailer trailers[] = {
41 42 43
		{"Key", "value"},
		{NULL, NULL},
	};
44

45 46 47 48
	assert_trailers(
		"Message\n"
		"\n"
		"Key:value\n"
49
	, trailers);
50 51 52 53
}

void test_message_trailer__extra_whitespace(void)
{
54
	git_message_trailer trailers[] = {
55 56 57
		{"Key", "value"},
		{NULL, NULL},
	};
58

59 60 61 62
	assert_trailers(
		"Message\n"
		"\n"
		"Key   :   value\n"
63
	, trailers);
64 65 66 67
}

void test_message_trailer__no_newline(void)
{
68
	git_message_trailer trailers[] = {
69 70 71
		{"Key", "value"},
		{NULL, NULL},
	};
72

73 74 75 76
	assert_trailers(
		"Message\n"
		"\n"
		"Key: value"
77
	, trailers);
78 79 80 81
}

void test_message_trailer__not_last_paragraph(void)
{
82
	git_message_trailer trailers[] = {
83 84
		{NULL, NULL},
	};
85

86 87 88 89 90 91
	assert_trailers(
		"Message\n"
		"\n"
		"Key: value\n"
		"\n"
		"More stuff\n"
92
	, trailers);
93 94 95 96
}

void test_message_trailer__conflicts(void)
{
97
	git_message_trailer trailers[] = {
98 99 100
		{"Key", "value"},
		{NULL, NULL},
	};
101

102 103 104 105 106 107 108
	assert_trailers(
		"Message\n"
		"\n"
		"Key: value\n"
		"\n"
		"Conflicts:\n"
		"\tfoo.c\n"
109
	, trailers);
110 111 112 113
}

void test_message_trailer__patch(void)
{
114
	git_message_trailer trailers[] = {
115 116 117
		{"Key", "value"},
		{NULL, NULL},
	};
118

119 120 121 122 123 124 125
	assert_trailers(
		"Message\n"
		"\n"
		"Key: value\n"
		"\n"
		"---\n"
		"More: stuff\n"
126
	, trailers);
127 128 129 130
}

void test_message_trailer__continuation(void)
{
131
	git_message_trailer trailers[] = {
132 133 134 135 136
		{"A", "b\n c"},
		{"D", "e\n f: g h"},
		{"I", "j"},
		{NULL, NULL},
	};
137

138 139 140 141 142 143 144 145
	assert_trailers(
		"Message\n"
		"\n"
		"A: b\n"
		" c\n"
		"D: e\n"
		" f: g h\n"
		"I: j\n"
146
	, trailers);
147 148 149 150
}

void test_message_trailer__invalid(void)
{
151
	git_message_trailer trailers[] = {
152 153 154 155
		{"Signed-off-by", "some@one.com"},
		{"Another", "trailer"},
		{NULL, NULL},
	};
156

157 158 159 160 161 162
	assert_trailers(
		"Message\n"
		"\n"
		"Signed-off-by: some@one.com\n"
		"Not a trailer\n"
		"Another: trailer\n"
163
	, trailers);
164
}