7 const char *git_repository_dir1
;
13 START_TEST(git_sha1_conversion_tests
)
16 char hex
[GIT_HEX_LENGTH
];
17 unsigned char sha1
[GIT_SHA1_SIZE
];
18 const char orig_hex
[] = "190045d53b9a8341e8600d6eb468b6081e903afb";
20 ret
= git_hex_to_sha1(orig_hex
, &sha1
[0]);
21 fail_unless(ret
== 0, "git_hex_to_sha1() failed: %d\n", ret
);
23 ret
= git_sha1_to_hex(sha1
, hex
);
24 fail_unless(ret
== 0, "git_sha1_to_hex() failed: %d\n", ret
);
27 * XXX: Can you think of a better test?
28 * How can I hardcode a SHA1?
30 fail_unless(memcmp(orig_hex
, hex
, GIT_HEX_LENGTH
+ 1) == 0,
31 "%s != %s\n", orig_hex
, hex
);
35 START_TEST(git_repo_open_test
)
39 err
= git_repo_open(git_repository_dir1
);
40 fail_unless(err
== 0, "Can't initialize repository [%d]\n", err
);
44 START_TEST(git_repo_translate_ref_test
)
47 size_t com_id_len
= 0;
49 char hex
[GIT_HEX_LENGTH
+ 1], *com_id
, *tag
;
50 unsigned char sha1
[GIT_SHA1_SIZE
];
52 spec_file_get_checked("TEST_COMMIT1_ID", &com_id
, &com_id_len
);
53 spec_file_get_checked("TEST_TAG1_NAME", &tag
, &tag_len
);
55 ret
= git_repo_open(git_repository_dir1
);
56 fail_unless(ret
== 0, "Can't initialize repository [%d]\n", ret
);
62 ret
= git_repo_translate_ref("HEAD", sha1
);
63 fail_unless(ret
== 0, "git_translate_ref() failed: %s\n",
66 memset(hex
, 0, GIT_HEX_LENGTH
+ 1);
67 ret
= git_sha1_to_hex(sha1
, hex
);
68 fail_unless(ret
== 0, "git_sha1_to_hex() failed: %s\n",
71 fail_unless(memcmp(com_id
, hex
, GIT_HEX_LENGTH
+ 1) == 0,
72 "%s != %s\n", com_id
, hex
);
78 ret
= git_repo_translate_ref("master", sha1
);
79 fail_unless(ret
== 0, "git_translate_ref() failed: %s\n",
82 memset(hex
, 0, GIT_HEX_LENGTH
+ 1);
83 ret
= git_sha1_to_hex(sha1
, hex
);
84 fail_unless(ret
== 0, "git_sha1_to_hex() failed: %s\n",
87 fail_unless(memcmp(com_id
, hex
, GIT_HEX_LENGTH
+ 1) == 0,
88 "%s != %s\n", com_id
, hex
);
94 ret
= git_repo_translate_ref(tag
, sha1
);
95 fail_unless(ret
== 0, "git_translate_ref() failed: %s\n",
98 memset(hex
, 0, GIT_HEX_LENGTH
+ 1);
99 ret
= git_sha1_to_hex(sha1
, hex
);
100 fail_unless(ret
== 0, "git_sha1_to_hex() failed: %s\n",
103 fail_unless(memcmp(com_id
, hex
, GIT_HEX_LENGTH
+ 1) == 0,
104 "%s != %s\n", com_id
, hex
);
109 * This is tested here because git_repo_head() is just
110 * a wrapper for git_repo_translate_ref("HEAD", sha1);
113 ret
= git_repo_head(sha1
);
114 fail_unless(ret
== 0, "git_repo_head() failed: %s\n", strerror(errno
));
116 ret
= git_sha1_to_hex(sha1
, hex
);
117 fail_unless(ret
== 0, "git_sha1_to_hex() failed: %s\n",
120 fail_unless(memcmp(com_id
, hex
, GIT_HEX_LENGTH
+ 1) == 0,
121 "%s != %s\n", com_id
, hex
);
128 START_TEST(git_revlist_init_test
)
130 struct git_revlist_opt
*opt
;
132 opt
= git_revlist_init();
133 fail_unless(opt
!= NULL
, "opt is NULL\n");
139 START_TEST(git_revlist_free_test
)
141 struct git_revlist_opt
*opt
;
143 opt
= git_revlist_init();
144 fail_unless(opt
!= NULL
, "opt is NULL\n");
146 git_revlist_free(opt
);
150 START_TEST(git_commit_init_test
)
152 struct git_commit
*commit
;
154 commit
= git_commit_init();
155 fail_unless(commit
!= NULL
, "commit is NULL\n");
161 START_TEST(git_commit_free_test
)
163 struct git_commit
*commit
;
165 commit
= git_commit_init();
166 fail_unless(commit
!= NULL
, "commit is NULL\n");
168 git_commit_free(commit
);
173 * This test assures that git_repo_open(), git_repo_head(),
174 * git_revlist_include() and git_revlist_next() are working
175 * and can be used in the setup/teardown functions of other
178 START_TEST(git_revlist_one_commit_test
)
181 struct git_commit
*commit
;
182 struct git_revlist_opt
*opt
;
183 unsigned char sha1
[GIT_HEX_LENGTH
];
185 ret
= git_repo_open(git_repository_dir1
);
186 fail_unless(ret
== 0, "Can't initialize repository [%d]\n", ret
);
188 ret
= git_repo_head(sha1
);
189 fail_unless(ret
== 0, "git_repo_head() failed: %s\n", strerror(errno
));
191 opt
= git_revlist_init();
192 fail_unless(opt
!= NULL
, "opt is NULL\n");
194 commit
= git_commit_init();
195 fail_unless(commit
!= NULL
, "commit is NULL\n");
197 ret
= git_revlist_include(opt
, sha1
);
198 fail_unless(ret
== 0, "git_revlist_include() failed: %s\n",
201 ret
= git_revlist_next(opt
, commit
);
202 fail_unless(ret
== 1, "No commit to get (ret is %d)\n", ret
);
204 ret
= git_revlist_next(opt
, commit
);
205 fail_unless(ret
== 0, "There should be only one commit [%d]\n", ret
);
207 git_revlist_free(opt
);
208 git_commit_free(commit
);
213 * Revision listing tests
216 static struct git_revlist_opt
*revl_opt
;
217 static struct git_commit
*revl_commit
;
219 static void revl_setup(void)
222 unsigned char sha1
[GIT_SHA1_SIZE
];
224 ret
= git_repo_open(git_repository_dir1
);
225 fail_unless(ret
== 0, "Can't initialize repository [%d]\n", ret
);
227 ret
= git_repo_head(sha1
);
228 fail_unless(ret
== 0, "git_repo_head() failed: %s\n", strerror(errno
));
230 revl_opt
= git_revlist_init();
231 fail_unless(revl_opt
!= NULL
, "revl_opt is NULL\n");
233 ret
= git_revlist_include(revl_opt
, sha1
);
234 fail_unless(ret
== 0, "git_revlist_include() failed: %s\n",
237 revl_commit
= git_commit_init();
238 fail_unless(revl_commit
!= NULL
, "revl_commit is NULL\n");
240 ret
= git_revlist_next(revl_opt
, revl_commit
);
241 fail_unless(ret
!= 0, "No commit to get (ret is 0)\n");
244 static void revl_teardown(void)
246 git_revlist_free(revl_opt
);
247 git_commit_free(revl_commit
);
250 START_TEST(git_commit_raw_test
)
256 spec_file_get_checked("TEST_USER1_AUTHOR", &author
, &len
);
259 * XXX: should check the whole buffer
261 raw_buf
= git_commit_raw(revl_commit
);
262 fail_unless(raw_buf
!= NULL
, "raw_buf is NULL\n");
263 fail_unless(strstr(raw_buf
, author
) != NULL
, "raw_buf: %s", raw_buf
);
269 START_TEST(git_commit_id_test
)
275 spec_file_get_checked("TEST_COMMIT1_ID", &orig_id
, &len
);
277 id
= git_commit_id(revl_commit
);
278 fail_unless(!memcmp(id
, orig_id
, len
), "%s != %s\n", id
, orig_id
);
284 START_TEST(git_commit_tree_test
)
290 spec_file_get_checked("TEST_TREE1_ID", &orig_tree
, &len
);
292 tree
= git_commit_tree(revl_commit
);
293 fail_unless(!memcmp(tree
, orig_tree
, len
), "%s != %s\n",
300 START_TEST(git_commit_author_name_test
)
304 const char *ret_author_name
;
306 spec_file_get_checked("TEST_USER1_NAME", &author_name
, &len
);
308 ret_author_name
= git_commit_author_name(revl_commit
);
309 fail_unless(ret_author_name
!= NULL
, "ret_author_name is NULL\n");
310 fail_unless(!memcmp(author_name
, ret_author_name
, len
),
311 "%s != %s\n", author_name
, ret_author_name
);
317 START_TEST(git_commit_author_email_test
)
321 const char *ret_author_email
;
323 spec_file_get_checked("TEST_USER1_EMAIL", &author_email
, &len
);
325 ret_author_email
= git_commit_author_email(revl_commit
);
326 fail_unless(ret_author_email
!= NULL
, "ret_author_email is NULL\n");
327 fail_unless(!memcmp(author_email
, ret_author_email
, len
),
328 "%s != %s\n", author_email
, ret_author_email
);
334 START_TEST(git_commit_author_date_test
)
337 const int hcoded_tz
= -200;
339 const time_t hcoded_time
= 1165971600;
341 /* FIXME: hardcoded data */
343 ret
= git_commit_author_date(revl_commit
, &com_time
, &com_tz
);
344 fail_unless(ret
== 0, "can't get author date: %d\n", ret
);
345 fail_unless(com_time
== hcoded_time
, "%d != %d\n", com_time
,
347 fail_unless(com_tz
== hcoded_tz
, "%d != %d\n", com_tz
, hcoded_tz
);
351 START_TEST(git_commit_committer_name_test
)
355 const char *ret_com_name
;
357 spec_file_get_checked("TEST_COMM1_NAME", &com_name
, &len
);
359 ret_com_name
= git_commit_committer_name(revl_commit
);
360 fail_unless(ret_com_name
!= NULL
, "ret_com_name is NULL\n");
361 fail_unless(!memcmp(com_name
, ret_com_name
, len
),
362 "%s != %s\n", com_name
, ret_com_name
);
368 START_TEST(git_commit_committer_email_test
)
372 const char *ret_com_email
;
374 spec_file_get_checked("TEST_COMM1_EMAIL", &com_email
, &len
);
376 ret_com_email
= git_commit_committer_email(revl_commit
);
377 fail_unless(ret_com_email
!= NULL
, "ret_com_email is NULL\n");
378 fail_unless(!memcmp(com_email
, ret_com_email
, len
),
379 "%s != %s\n", com_email
, ret_com_email
);
385 START_TEST(git_commit_committer_date_test
)
388 const int hcoded_tz
= -200;
390 const time_t hcoded_time
= 1165971600;
392 /* FIXME: hardcoded data */
394 ret
= git_commit_committer_date(revl_commit
, &com_time
, &com_tz
);
395 fail_unless(ret
== 0, "can't get author date: %d\n", ret
);
396 fail_unless(com_time
== hcoded_time
, "%d != %d\n", com_time
,
398 fail_unless(com_tz
== hcoded_tz
, "%d != %d\n", com_tz
, hcoded_tz
);
402 START_TEST(git_commit_message_test
)
408 spec_file_get_checked("TEST_FILE1_COMMIT", &msg
, &len
);
410 // FIXME: We should do a 'len++' to make memcmp() check the
411 // trailing '\n' (plus '\0'), but we're not checking either
412 // because spec_file_get() doesn't return the '\n'.
415 ret_msg
= git_commit_message(revl_commit
);
416 fail_unless(ret_msg
!= NULL
, "ret_msg is NULL\n");
417 fail_unless(!memcmp(msg
, ret_msg
, len
), "%s != %s\n", msg
, ret_msg
);
424 * Common errors tests
425 * (parameters checking mostly)
428 static struct git_commit
*err_commit
;
430 static void err_setup(void)
432 err_commit
= git_commit_init();
433 fail_unless(err_commit
!= NULL
, "git_commit_init() failed\n");
436 static void err_teardown(void)
438 git_commit_free(err_commit
);
441 static void commit_err_test(const char *(*commit_func
)(struct git_commit
*commit
))
445 fail_unless(commit_func
!= NULL
, "commit_func() is NULL");
447 ret
= commit_func(NULL
);
448 fail_unless(ret
== NULL
, "didn't fail\n");
449 fail_unless(errno
== EINVAL
, "errno doesn't match: %d\n", errno
);
452 ret
= commit_func(err_commit
);
453 fail_unless(ret
== NULL
, "didn't fail\n");
454 fail_unless(errno
== EINVAL
, "errno doesn't match: %d\n", errno
);
457 START_TEST(git_hex_to_sha1_err_test
)
461 unsigned char sha1
[1];
463 ret
= git_hex_to_sha1(NULL
, NULL
);
464 fail_unless(ret
== -1, "git_hex_to_sha1() not failed: %d\n", ret
);
465 fail_unless(errno
== EINVAL
, "errno is not EINVAL\n", errno
);
467 ret
= git_hex_to_sha1(hex
, NULL
);
468 fail_unless(ret
== -1, "git_hex_to_sha1() not failed: %d\n", ret
);
469 fail_unless(errno
== EINVAL
, "errno is not EINVAL\n", errno
);
471 ret
= git_hex_to_sha1(NULL
, sha1
);
472 fail_unless(ret
== -1, "git_hex_to_sha1() not failed: %d\n", ret
);
473 fail_unless(errno
== EINVAL
, "errno is not EINVAL\n", errno
);
477 START_TEST(git_sha1_to_hex_err_test
)
481 unsigned char sha1
[1];
483 ret
= git_sha1_to_hex(NULL
, NULL
);
484 fail_unless(ret
== -1, "git_hex_to_sha1() not failed: %d\n", ret
);
485 fail_unless(errno
== EINVAL
, "errno is not EINVAL\n", errno
);
487 ret
= git_sha1_to_hex(sha1
, NULL
);
488 fail_unless(ret
== -1, "git_hex_to_sha1() not failed: %d\n", ret
);
489 fail_unless(errno
== EINVAL
, "errno is not EINVAL\n", errno
);
491 ret
= git_sha1_to_hex(NULL
, hex
);
492 fail_unless(ret
== -1, "git_hex_to_sha1() not failed: %d\n", ret
);
493 fail_unless(errno
== EINVAL
, "errno is not EINVAL\n", errno
);
497 START_TEST(git_repo_open_err_test
)
501 err
= git_repo_open(NULL
);
502 fail_unless(err
== -1, "didn't fail: %d\n", err
);
503 fail_unless(errno
== EINVAL
, "errno doesn't match: %d\n", errno
);
505 err
= git_repo_open("akjsndkanskj");
506 fail_unless(err
== -1, "didn't fail: %d\n", err
);
507 fail_unless(errno
== ENOENT
, "errno doesn't match: %d\n", errno
);
511 START_TEST(git_repo_head_err_test
)
515 err
= git_repo_head(NULL
);
516 fail_unless(err
== -1, "didn't fail: %d\n", err
);
517 fail_unless(errno
== EINVAL
, "errno doesn't match: %d\n", errno
);
521 START_TEST(git_revlist_next_err_test
)
524 struct git_revlist_opt
*opt
;
526 err
= git_revlist_next(NULL
, NULL
);
527 fail_unless(err
== -1, "didn't fail: %d\n", err
);
528 fail_unless(errno
== EINVAL
, "errno doesn't match: %d\n", errno
);
530 err
= git_revlist_next(opt
, NULL
);
531 fail_unless(err
== -1, "didn't fail: %d\n", err
);
532 fail_unless(errno
== EINVAL
, "errno doesn't match: %d\n", errno
);
534 err
= git_revlist_next(NULL
, err_commit
);
535 fail_unless(err
== -1, "didn't fail: %d\n", err
);
536 fail_unless(errno
== EINVAL
, "errno doesn't match: %d\n", errno
);
540 START_TEST(git_revlist_include_err_test
)
543 unsigned char sha1
[1];
544 struct git_revlist_opt
*opt
;
546 err
= git_revlist_include(NULL
, NULL
);
547 fail_unless(err
== -1, "didn't fail: %d\n", err
);
548 fail_unless(errno
== EINVAL
, "errno doesn't match: %d\n", errno
);
550 err
= git_revlist_include(opt
, NULL
);
551 fail_unless(err
== -1, "didn't fail: %d\n", err
);
552 fail_unless(errno
== EINVAL
, "errno doesn't match: %d\n", errno
);
554 err
= git_revlist_include(NULL
, sha1
);
555 fail_unless(err
== -1, "didn't fail: %d\n", err
);
556 fail_unless(errno
== EINVAL
, "errno doesn't match: %d\n", errno
);
560 START_TEST(git_commit_message_err_test
)
562 commit_err_test(git_commit_message
);
566 START_TEST(git_commit_committer_email_err_test
)
568 commit_err_test(git_commit_committer_email
);
572 START_TEST(git_commit_committer_name_err_test
)
574 commit_err_test(git_commit_committer_name
);
578 START_TEST(git_commit_committer_date_err_test
)
583 ret
= git_commit_committer_date(NULL
, NULL
, NULL
);
584 fail_unless(ret
== -1, "didn't fail\n");
585 fail_unless(errno
== EINVAL
, "errno doesn't match: %d\n", errno
);
588 ret
= git_commit_committer_date(err_commit
, &a
, &b
);
589 fail_unless(ret
== -1, "didn't fail\n");
590 fail_unless(errno
== EINVAL
, "errno doesn't match: %d\n", errno
);
594 START_TEST(git_commit_author_email_err_test
)
596 commit_err_test(git_commit_author_email
);
600 START_TEST(git_commit_author_date_err_test
)
605 ret
= git_commit_author_date(NULL
, NULL
, NULL
);
606 fail_unless(ret
== -1, "didn't fail\n");
607 fail_unless(errno
== EINVAL
, "errno doesn't match: %d\n", errno
);
610 ret
= git_commit_author_date(err_commit
, &a
, &b
);
611 fail_unless(ret
== -1, "didn't fail\n");
612 fail_unless(errno
== EINVAL
, "errno doesn't match: %d\n", errno
);
616 START_TEST(git_commit_author_name_err_test
)
618 commit_err_test(git_commit_author_name
);
622 START_TEST(git_commit_id_err_test
)
624 commit_err_test(git_commit_id
);
628 START_TEST(git_commit_tree_err_test
)
630 commit_err_test(git_commit_tree
);
634 START_TEST(git_commit_raw_err_test
)
636 commit_err_test(git_commit_raw
);
641 * Basic test-suite: Performs very simple tests.
643 * The tests that fits in this test-suite are the ones which
644 * can be performed with a simple GIT repository and usually
647 * This is only useful to first time checking of a function.
649 Suite
*test_suite_basic(void)
652 TCase
*tc_interf
, *tc_revl
, *tc_err
;
654 s
= suite_create("Basic");
656 tc_interf
= tcase_create("Interface");
657 suite_add_tcase(s
, tc_interf
);
658 tcase_add_test(tc_interf
, git_sha1_conversion_tests
);
659 tcase_add_test(tc_interf
, git_repo_open_test
);
660 tcase_add_test(tc_interf
, git_repo_translate_ref_test
);
661 tcase_add_test(tc_interf
, git_revlist_init_test
);
662 tcase_add_test(tc_interf
, git_revlist_free_test
);
663 tcase_add_test(tc_interf
, git_commit_init_test
);
664 tcase_add_test(tc_interf
, git_commit_free_test
);
665 tcase_add_test(tc_interf
, git_revlist_one_commit_test
);
668 * These tests requires revision listing in order
671 tc_revl
= tcase_create("Revision listing");
672 suite_add_tcase(s
, tc_revl
);
673 tcase_add_checked_fixture(tc_revl
, revl_setup
, revl_teardown
);
674 tcase_add_test(tc_revl
, git_commit_raw_test
);
675 tcase_add_test(tc_revl
, git_commit_id_test
);
676 tcase_add_test(tc_revl
, git_commit_tree_test
);
677 tcase_add_test(tc_revl
, git_commit_author_name_test
);
678 tcase_add_test(tc_revl
, git_commit_author_email_test
);
679 tcase_add_test(tc_revl
, git_commit_author_date_test
);
680 tcase_add_test(tc_revl
, git_commit_committer_name_test
);
681 tcase_add_test(tc_revl
, git_commit_committer_email_test
);
682 tcase_add_test(tc_revl
, git_commit_committer_date_test
);
683 tcase_add_test(tc_revl
, git_commit_message_test
);
685 tc_err
= tcase_create("Common errors");
686 suite_add_tcase(s
, tc_err
);
687 tcase_add_checked_fixture(tc_err
, err_setup
, err_teardown
);
688 tcase_add_test(tc_err
, git_hex_to_sha1_err_test
);
689 tcase_add_test(tc_err
, git_sha1_to_hex_err_test
);
690 tcase_add_test(tc_err
, git_repo_open_err_test
);
691 tcase_add_test(tc_err
, git_repo_head_err_test
);
692 tcase_add_test(tc_err
, git_revlist_next_err_test
);
693 tcase_add_test(tc_err
, git_revlist_include_err_test
);
694 tcase_add_test(tc_err
, git_commit_message_err_test
);
695 tcase_add_test(tc_err
, git_commit_committer_email_err_test
);
696 tcase_add_test(tc_err
, git_commit_committer_name_err_test
);
697 tcase_add_test(tc_err
, git_commit_committer_date_err_test
);
698 tcase_add_test(tc_err
, git_commit_author_email_err_test
);
699 tcase_add_test(tc_err
, git_commit_author_name_err_test
);
700 tcase_add_test(tc_err
, git_commit_author_date_err_test
);
701 tcase_add_test(tc_err
, git_commit_id_err_test
);
702 tcase_add_test(tc_err
, git_commit_tree_err_test
);
703 tcase_add_test(tc_err
, git_commit_raw_err_test
);