]>
git.proxmox.com Git - libgit2.git/blob - tests/commit/signature.c
a91551415d676c84c16c4c2222afe3a682612c15
1 #include "clar_libgit2.h"
4 static int try_build_signature(const char *name
, const char *email
, git_time_t time
, int offset
)
9 if ((error
= git_signature_new(&sign
, name
, email
, time
, offset
)) < 0)
12 git_signature_free((git_signature
*)sign
);
17 static void assert_name_and_email(
18 const char *expected_name
,
19 const char *expected_email
,
25 cl_git_pass(git_signature_new(&sign
, name
, email
, 1234567890, 60));
26 cl_assert_equal_s(expected_name
, sign
->name
);
27 cl_assert_equal_s(expected_email
, sign
->email
);
29 git_signature_free(sign
);
32 void test_commit_signature__leading_and_trailing_spaces_are_trimmed(void)
34 assert_name_and_email("nulltoken", "emeric.fermas@gmail.com", " nulltoken ", " emeric.fermas@gmail.com ");
35 assert_name_and_email("nulltoken", "emeric.fermas@gmail.com", " nulltoken ", " emeric.fermas@gmail.com \n");
36 assert_name_and_email("nulltoken", "emeric.fermas@gmail.com", " \t nulltoken \n", " \n emeric.fermas@gmail.com \n");
39 void test_commit_signature__leading_and_trailing_crud_is_trimmed(void)
41 assert_name_and_email("nulltoken", "emeric.fermas@gmail.com", "\"nulltoken\"", "\"emeric.fermas@gmail.com\"");
42 assert_name_and_email("nulltoken w", "emeric.fermas@gmail.com", "nulltoken w.", "emeric.fermas@gmail.com");
43 assert_name_and_email("nulltoken \xe2\x98\xba", "emeric.fermas@gmail.com", "nulltoken \xe2\x98\xba", "emeric.fermas@gmail.com");
46 void test_commit_signature__timezone_does_not_read_oob(void)
48 const char *header
= "A <a@example.com> 1461698487 +1234", *header_end
;
51 /* Let the buffer end midway between the timezone offeset's "+12" and "34" */
52 header_end
= header
+ strlen(header
) - 2;
54 sig
= git__calloc(1, sizeof(git_signature
));
57 cl_git_pass(git_signature__parse(sig
, &header
, header_end
, NULL
, '\0'));
58 cl_assert_equal_s(sig
->name
, "A");
59 cl_assert_equal_s(sig
->email
, "a@example.com");
60 cl_assert_equal_i(sig
->when
.time
, 1461698487);
61 cl_assert_equal_i(sig
->when
.offset
, 12);
63 git_signature_free(sig
);
66 void test_commit_signature__angle_brackets_in_names_are_not_supported(void)
68 cl_git_fail(try_build_signature("<Phil Haack", "phil@haack", 1234567890, 60));
69 cl_git_fail(try_build_signature("Phil>Haack", "phil@haack", 1234567890, 60));
70 cl_git_fail(try_build_signature("<Phil Haack>", "phil@haack", 1234567890, 60));
73 void test_commit_signature__angle_brackets_in_email_are_not_supported(void)
75 cl_git_fail(try_build_signature("Phil Haack", ">phil@haack", 1234567890, 60));
76 cl_git_fail(try_build_signature("Phil Haack", "phil@>haack", 1234567890, 60));
77 cl_git_fail(try_build_signature("Phil Haack", "<phil@haack>", 1234567890, 60));
80 void test_commit_signature__create_empties(void)
82 /* can not create a signature with empty name or email */
83 cl_git_pass(try_build_signature("nulltoken", "emeric.fermas@gmail.com", 1234567890, 60));
85 cl_git_fail(try_build_signature("", "emeric.fermas@gmail.com", 1234567890, 60));
86 cl_git_fail(try_build_signature(" ", "emeric.fermas@gmail.com", 1234567890, 60));
87 cl_git_fail(try_build_signature("nulltoken", "", 1234567890, 60));
88 cl_git_fail(try_build_signature("nulltoken", " ", 1234567890, 60));
91 void test_commit_signature__create_one_char(void)
93 /* creating a one character signature */
94 assert_name_and_email("x", "foo@bar.baz", "x", "foo@bar.baz");
97 void test_commit_signature__create_two_char(void)
99 /* creating a two character signature */
100 assert_name_and_email("xx", "foo@bar.baz", "xx", "foo@bar.baz");
103 void test_commit_signature__create_zero_char(void)
105 /* creating a zero character signature */
107 cl_git_fail(git_signature_new(&sign
, "", "x@y.z", 1234567890, 60));
108 cl_assert(sign
== NULL
);
111 void test_commit_signature__from_buf(void)
115 cl_git_pass(git_signature_from_buffer(&sign
, "Test User <test@test.tt> 1461698487 +0200"));
116 cl_assert_equal_s("Test User", sign
->name
);
117 cl_assert_equal_s("test@test.tt", sign
->email
);
118 cl_assert_equal_i(1461698487, sign
->when
.time
);
119 cl_assert_equal_i(120, sign
->when
.offset
);
120 git_signature_free(sign
);
123 void test_commit_signature__from_buf_with_neg_zero_offset(void)
127 cl_git_pass(git_signature_from_buffer(&sign
, "Test User <test@test.tt> 1461698487 -0000"));
128 cl_assert_equal_s("Test User", sign
->name
);
129 cl_assert_equal_s("test@test.tt", sign
->email
);
130 cl_assert_equal_i(1461698487, sign
->when
.time
);
131 cl_assert_equal_i(0, sign
->when
.offset
);
132 cl_assert_equal_i('-', sign
->when
.sign
);
133 git_signature_free(sign
);
136 void test_commit_signature__pos_and_neg_zero_offsets_dont_match(void)
138 git_signature
*with_neg_zero
;
139 git_signature
*with_pos_zero
;
141 cl_git_pass(git_signature_from_buffer(&with_neg_zero
, "Test User <test@test.tt> 1461698487 -0000"));
142 cl_git_pass(git_signature_from_buffer(&with_pos_zero
, "Test User <test@test.tt> 1461698487 +0000"));
144 cl_assert(!git_signature__equal(with_neg_zero
, with_pos_zero
));
146 git_signature_free((git_signature
*)with_neg_zero
);
147 git_signature_free((git_signature
*)with_pos_zero
);