summaryrefslogtreecommitdiff
path: root/tests-clar/stash/drop.c
diff options
context:
space:
mode:
Diffstat (limited to 'tests-clar/stash/drop.c')
-rw-r--r--tests-clar/stash/drop.c53
1 files changed, 44 insertions, 9 deletions
diff --git a/tests-clar/stash/drop.c b/tests-clar/stash/drop.c
index 16e3d77ac..1eb42c029 100644
--- a/tests-clar/stash/drop.c
+++ b/tests-clar/stash/drop.c
@@ -1,6 +1,7 @@
#include "clar_libgit2.h"
#include "fileops.h"
#include "stash_helpers.h"
+#include "refs.h"
static git_repository *repo;
static git_signature *signature;
@@ -24,7 +25,7 @@ void test_stash_drop__cleanup(void)
void test_stash_drop__cannot_drop_from_an_empty_stash(void)
{
- cl_assert_equal_i(GIT_ENOTFOUND, git_stash_drop(repo, 0));
+ cl_git_fail_with(git_stash_drop(repo, 0), GIT_ENOTFOUND);
}
static void push_three_states(void)
@@ -60,9 +61,9 @@ void test_stash_drop__cannot_drop_a_non_existing_stashed_state(void)
{
push_three_states();
- cl_assert_equal_i(GIT_ENOTFOUND, git_stash_drop(repo, 666));
- cl_assert_equal_i(GIT_ENOTFOUND, git_stash_drop(repo, 42));
- cl_assert_equal_i(GIT_ENOTFOUND, git_stash_drop(repo, 3));
+ cl_git_fail_with(git_stash_drop(repo, 666), GIT_ENOTFOUND);
+ cl_git_fail_with(git_stash_drop(repo, 42), GIT_ENOTFOUND);
+ cl_git_fail_with(git_stash_drop(repo, 3), GIT_ENOTFOUND);
}
void test_stash_drop__can_purge_the_stash_from_the_top(void)
@@ -73,7 +74,7 @@ void test_stash_drop__can_purge_the_stash_from_the_top(void)
cl_git_pass(git_stash_drop(repo, 0));
cl_git_pass(git_stash_drop(repo, 0));
- cl_assert_equal_i(GIT_ENOTFOUND, git_stash_drop(repo, 0));
+ cl_git_fail_with(git_stash_drop(repo, 0), GIT_ENOTFOUND);
}
void test_stash_drop__can_purge_the_stash_from_the_bottom(void)
@@ -84,7 +85,7 @@ void test_stash_drop__can_purge_the_stash_from_the_bottom(void)
cl_git_pass(git_stash_drop(repo, 1));
cl_git_pass(git_stash_drop(repo, 0));
- cl_assert_equal_i(GIT_ENOTFOUND, git_stash_drop(repo, 0));
+ cl_git_fail_with(git_stash_drop(repo, 0), GIT_ENOTFOUND);
}
void test_stash_drop__dropping_an_entry_rewrites_reflog_history(void)
@@ -97,7 +98,7 @@ void test_stash_drop__dropping_an_entry_rewrites_reflog_history(void)
push_three_states();
- cl_git_pass(git_reference_lookup(&stash, repo, "refs/stash"));
+ cl_git_pass(git_reference_lookup(&stash, repo, GIT_REFS_STASH_FILE));
cl_git_pass(git_reflog_read(&reflog, stash));
entry = git_reflog_entry_byindex(reflog, 1);
@@ -126,12 +127,46 @@ void test_stash_drop__dropping_the_last_entry_removes_the_stash(void)
push_three_states();
- cl_git_pass(git_reference_lookup(&stash, repo, "refs/stash"));
+ cl_git_pass(git_reference_lookup(&stash, repo, GIT_REFS_STASH_FILE));
git_reference_free(stash);
cl_git_pass(git_stash_drop(repo, 0));
cl_git_pass(git_stash_drop(repo, 0));
cl_git_pass(git_stash_drop(repo, 0));
- cl_assert_equal_i(GIT_ENOTFOUND, git_reference_lookup(&stash, repo, "refs/stash"));
+ cl_git_fail_with(
+ git_reference_lookup(&stash, repo, GIT_REFS_STASH_FILE), GIT_ENOTFOUND);
+}
+
+void retrieve_top_stash_id(git_oid *out)
+{
+ git_object *top_stash;
+
+ cl_git_pass(git_revparse_single(&top_stash, repo, "stash@{0}"));
+ cl_git_pass(git_reference_name_to_id(out, repo, GIT_REFS_STASH_FILE));
+
+ cl_assert_equal_i(true, git_oid_cmp(out, git_object_id(top_stash)) == 0);
+
+ git_object_free(top_stash);
+}
+
+void test_stash_drop__dropping_the_top_stash_updates_the_stash_reference(void)
+{
+ git_object *next_top_stash;
+ git_oid oid;
+
+ push_three_states();
+
+ retrieve_top_stash_id(&oid);
+
+ cl_git_pass(git_revparse_single(&next_top_stash, repo, "stash@{1}"));
+ cl_assert_equal_i(
+ false, git_oid_cmp(&oid, git_object_id(next_top_stash)) == 0);
+
+ cl_git_pass(git_stash_drop(repo, 0));
+
+ retrieve_top_stash_id(&oid);
+
+ cl_assert_equal_i(
+ true, git_oid_cmp(&oid, git_object_id(next_top_stash)) == 0);
}