diff options
author | Ben Straub <ben@straubnet.net> | 2012-03-19 21:41:29 -0700 |
---|---|---|
committer | Ben Straub <ben@straubnet.net> | 2012-03-20 23:11:24 -0700 |
commit | e0799b6cd09faa729dca9e4c8cdf16a99ee60368 (patch) | |
tree | 0e431fb2ecf55586067ec593d4b0d775070bf746 /tests-clar/commit/write.c | |
parent | e71b78b02b6f28d1cf94dc5023fe1faba3f4026c (diff) | |
download | libgit2-e0799b6cd09faa729dca9e4c8cdf16a99ee60368.tar.gz |
Ported t04_commit.c to Clar.
Created a copy of tests/resources/testrepo.git that is compatible
with the Clar sandboxing helpers.
Restructured commit test suites to use Clar sandbox helpers.
Now using typed data arrays rather than lots of macros to define test
cases.
Diffstat (limited to 'tests-clar/commit/write.c')
-rw-r--r-- | tests-clar/commit/write.c | 141 |
1 files changed, 141 insertions, 0 deletions
diff --git a/tests-clar/commit/write.c b/tests-clar/commit/write.c new file mode 100644 index 00000000..66fe2bfc --- /dev/null +++ b/tests-clar/commit/write.c @@ -0,0 +1,141 @@ +#include "clar_libgit2.h" + +static const char *committer_name = "Vicent Marti"; +static const char *committer_email = "vicent@github.com"; +static const char *commit_message = "This commit has been created in memory\n\ + This is a commit created in memory and it will be written back to disk\n"; +static const char *tree_oid = "1810dff58d8a660512d4832e740f692884338ccd"; +static const char *root_commit_message = "This is a root commit\n\ +This is a root commit and should be the only one in this branch\n"; + + +// Fixture setup +static git_repository *g_repo; +void test_commit_write__initialize(void) +{ + g_repo = cl_git_sandbox_init("testrepo"); +} +void test_commit_write__cleanup(void) +{ + cl_git_sandbox_cleanup(); +} + + +// write a new commit object from memory to disk +void test_commit_write__from_memory(void) +{ + git_commit *commit; + git_oid tree_id, parent_id, commit_id; + git_signature *author, *committer; + const git_signature *author1, *committer1; + git_commit *parent; + git_tree *tree; + const char *commit_id_str = "8496071c1b46c854b31185ea97743be6a8774479"; + + git_oid_fromstr(&tree_id, tree_oid); + cl_git_pass(git_tree_lookup(&tree, g_repo, &tree_id)); + + git_oid_fromstr(&parent_id, commit_id_str); + cl_git_pass(git_commit_lookup(&parent, g_repo, &parent_id)); + + /* create signatures */ + cl_git_pass(git_signature_new(&committer, committer_name, committer_email, 123456789, 60)); + cl_git_pass(git_signature_new(&author, committer_name, committer_email, 987654321, 90)); + + cl_git_pass(git_commit_create_v( + &commit_id, /* out id */ + g_repo, + NULL, /* do not update the HEAD */ + author, + committer, + NULL, + commit_message, + tree, + 1, parent)); + + git_object_free((git_object *)parent); + git_object_free((git_object *)tree); + + git_signature_free(committer); + git_signature_free(author); + + cl_git_pass(git_commit_lookup(&commit, g_repo, &commit_id)); + + /* Check attributes were set correctly */ + author1 = git_commit_author(commit); + cl_assert(author1 != NULL); + cl_assert(strcmp(author1->name, committer_name) == 0); + cl_assert(strcmp(author1->email, committer_email) == 0); + cl_assert(author1->when.time == 987654321); + cl_assert(author1->when.offset == 90); + + committer1 = git_commit_committer(commit); + cl_assert(committer1 != NULL); + cl_assert(strcmp(committer1->name, committer_name) == 0); + cl_assert(strcmp(committer1->email, committer_email) == 0); + cl_assert(committer1->when.time == 123456789); + cl_assert(committer1->when.offset == 60); + + cl_assert(strcmp(git_commit_message(commit), commit_message) == 0); + +#ifndef GIT_WIN32 + cl_assert((loose_object_mode(REPOSITORY_FOLDER, (git_object *)commit) & 0777) == GIT_OBJECT_FILE_MODE); +#endif +} + + + +// create a root commit +void test_commit_write__root(void) +{ + git_commit *commit; + git_oid tree_id, commit_id; + const git_oid *branch_oid; + git_signature *author, *committer; + const char *branch_name = "refs/heads/root-commit-branch"; + git_reference *head, *branch; + char *head_old; + git_tree *tree; + + git_oid_fromstr(&tree_id, tree_oid); + cl_git_pass(git_tree_lookup(&tree, g_repo, &tree_id)); + + /* create signatures */ + cl_git_pass(git_signature_new(&committer, committer_name, committer_email, 123456789, 60)); + cl_git_pass(git_signature_new(&author, committer_name, committer_email, 987654321, 90)); + + /* First we need to update HEAD so it points to our non-existant branch */ + cl_git_pass(git_reference_lookup(&head, g_repo, "HEAD")); + cl_assert(git_reference_type(head) == GIT_REF_SYMBOLIC); + head_old = git__strdup(git_reference_target(head)); + cl_assert(head_old != NULL); + + cl_git_pass(git_reference_set_target(head, branch_name)); + + cl_git_pass(git_commit_create_v( + &commit_id, /* out id */ + g_repo, + "HEAD", + author, + committer, + NULL, + root_commit_message, + tree, + 0)); + + git_object_free((git_object *)tree); + git_signature_free(committer); + git_signature_free(author); + + /* + * The fact that creating a commit works has already been + * tested. Here we just make sure it's our commit and that it was + * written as a root commit. + */ + cl_git_pass(git_commit_lookup(&commit, g_repo, &commit_id)); + cl_assert(git_commit_parentcount(commit) == 0); + cl_git_pass(git_reference_lookup(&branch, g_repo, branch_name)); + branch_oid = git_reference_oid(branch); + cl_git_pass(git_oid_cmp(branch_oid, &commit_id)); + cl_assert(!strcmp(git_commit_message(commit), root_commit_message)); +} |