summaryrefslogtreecommitdiff
path: root/tests-clar/repo/head.c
diff options
context:
space:
mode:
Diffstat (limited to 'tests-clar/repo/head.c')
-rw-r--r--tests-clar/repo/head.c35
1 files changed, 35 insertions, 0 deletions
diff --git a/tests-clar/repo/head.c b/tests-clar/repo/head.c
index eb1332aff..74d2a1c88 100644
--- a/tests-clar/repo/head.c
+++ b/tests-clar/repo/head.c
@@ -50,3 +50,38 @@ void test_repo_head__head_orphan(void)
git_reference_free(ref);
}
+
+static void assert_head_is_correctly_detached(void)
+{
+ git_reference *head;
+ git_object *commit;
+
+ cl_assert_equal_i(true, git_repository_head_detached(repo));
+
+ cl_git_pass(git_repository_head(&head, repo));
+
+ cl_git_pass(git_object_lookup(&commit, repo, git_reference_oid(head), GIT_OBJ_COMMIT));
+
+ git_object_free(commit);
+ git_reference_free(head);
+}
+
+void test_repo_head__detach_head_Detaches_HEAD_and_make_it_point_to_the_peeled_commit(void)
+{
+ cl_assert_equal_i(false, git_repository_head_detached(repo));
+
+ cl_git_pass(git_repository_detach_head(repo));
+
+ assert_head_is_correctly_detached();
+}
+
+void test_repo_head__detach_head_Fails_if_HEAD_and_point_to_a_non_commitish(void)
+{
+ git_reference *head;
+
+ cl_git_pass(git_reference_create_symbolic(&head, repo, GIT_HEAD_FILE, "refs/tags/point_to_blob", 1));
+
+ cl_git_fail(git_repository_detach_head(repo));
+
+ git_reference_free(head);
+}