]>
git.proxmox.com Git - libgit2.git/blob - tests/object/tag/parse.c
1 #include "clar_libgit2.h"
6 static void assert_tag_parses(const char *data
, size_t datalen
,
7 const char *expected_oid
,
8 const char *expected_name
,
9 const char *expected_tagger
,
10 const char *expected_message
)
15 datalen
= strlen(data
);
17 cl_git_pass(git_object__from_raw((git_object
**) &tag
, data
, datalen
, GIT_OBJECT_TAG
));
18 cl_assert_equal_i(tag
->type
, GIT_OBJECT_TAG
);
22 cl_git_pass(git_oid_fromstr(&oid
, expected_oid
));
23 cl_assert_equal_oid(&oid
, &tag
->target
);
27 cl_assert_equal_s(expected_name
, tag
->tag_name
);
29 cl_assert_equal_s(tag
->message
, NULL
);
31 if (expected_tagger
) {
32 git_signature
*tagger
;
33 cl_git_pass(git_signature_from_buffer(&tagger
, expected_tagger
));
34 cl_assert_equal_s(tagger
->name
, tag
->tagger
->name
);
35 cl_assert_equal_s(tagger
->email
, tag
->tagger
->email
);
36 cl_assert_equal_i(tagger
->when
.time
, tag
->tagger
->when
.time
);
37 cl_assert_equal_i(tagger
->when
.offset
, tag
->tagger
->when
.offset
);
38 cl_assert_equal_i(tagger
->when
.sign
, tag
->tagger
->when
.sign
);
39 git_signature_free(tagger
);
41 cl_assert_equal_s(tag
->tagger
, NULL
);
45 cl_assert_equal_s(expected_message
, tag
->message
);
47 cl_assert_equal_s(tag
->message
, NULL
);
49 git_object__free(&tag
->object
);
52 static void assert_tag_fails(const char *data
, size_t datalen
)
56 datalen
= strlen(data
);
57 cl_git_fail(git_object__from_raw(&object
, data
, datalen
, GIT_OBJECT_TAG
));
60 void test_object_tag_parse__valid_tag_parses(void)
63 "object a8d447f68076d1520f69649bb52629941be7031f\n"
66 "tagger Taggy Mr. Taggart <taggy@taggart.com>\n"
69 assert_tag_parses(tag
, 0,
70 "a8d447f68076d1520f69649bb52629941be7031f",
72 "Taggy Mr. Taggart <taggy@taggart.com>",
76 void test_object_tag_parse__missing_tagger_parses(void)
79 "object a8d447f68076d1520f69649bb52629941be7031f\n"
84 assert_tag_parses(tag
, 0,
85 "a8d447f68076d1520f69649bb52629941be7031f",
91 void test_object_tag_parse__missing_message_parses(void)
94 "object a8d447f68076d1520f69649bb52629941be7031f\n"
97 "tagger Taggy Mr. Taggart <taggy@taggart.com>\n";
98 assert_tag_parses(tag
, 0,
99 "a8d447f68076d1520f69649bb52629941be7031f",
101 "Taggy Mr. Taggart <taggy@taggart.com>",
105 void test_object_tag_parse__unknown_field_parses(void)
108 "object a8d447f68076d1520f69649bb52629941be7031f\n"
111 "tagger Taggy Mr. Taggart <taggy@taggart.com>\n"
116 assert_tag_parses(tag
, 0,
117 "a8d447f68076d1520f69649bb52629941be7031f",
119 "Taggy Mr. Taggart <taggy@taggart.com>",
123 void test_object_tag_parse__missing_object_fails(void)
128 "tagger Taggy Mr. Taggart <taggy@taggart.com>\n"
131 assert_tag_fails(tag
, 0);
134 void test_object_tag_parse__malformatted_object_fails(void)
137 "object a8d447f68076d15xxxxxxxxxxxxxxxx41be7031f\n"
140 "tagger Taggy Mr. Taggart <taggy@taggart.com>\n"
143 assert_tag_fails(tag
, 0);
146 void test_object_tag_parse__missing_type_fails(void)
149 "object a8d447f68076d1520f69649bb52629941be7031f\n"
151 "tagger Taggy Mr. Taggart <taggy@taggart.com>\n"
154 assert_tag_fails(tag
, 0);
157 void test_object_tag_parse__invalid_type_fails(void)
160 "object a8d447f68076d1520f69649bb52629941be7031f\n"
163 "tagger Taggy Mr. Taggart <taggy@taggart.com>\n"
166 assert_tag_fails(tag
, 0);
169 void test_object_tag_parse__missing_tagname_fails(void)
172 "object a8d447f68076d1520f69649bb52629941be7031f\n"
174 "tagger Taggy Mr. Taggart <taggy@taggart.com>\n"
177 assert_tag_fails(tag
, 0);
180 void test_object_tag_parse__misformatted_tagger_fails(void)
183 "object a8d447f68076d1520f69649bb52629941be7031f\n"
186 "tagger taggy@taggart.com>\n"
189 assert_tag_fails(tag
, 0);
192 void test_object_tag_parse__missing_message_fails(void)
195 "object a8d447f68076d1520f69649bb52629941be7031f\n"
198 "tagger taggy@taggart.com>\n";
199 assert_tag_fails(tag
, 0);
202 void test_object_tag_parse__no_oob_read_when_searching_message(void)
205 "object a8d447f68076d1520f69649bb52629941be7031f\n"
212 * The OOB read previously resulted in an OOM error. We
213 * thus want to make sure that the resulting error is the
216 assert_tag_fails(tag
, strlen(tag
) - strlen("\n\nMessage"));
217 cl_assert(strstr(git_error_last()->message
, "tag contains no message"));