summaryrefslogtreecommitdiff
path: root/tests-clar/checkout
diff options
context:
space:
mode:
authorRussell Belfer <rb@github.com>2013-01-04 16:56:21 -0800
committerRussell Belfer <rb@github.com>2013-01-04 16:56:21 -0800
commitbebdbcd442fb9b050589e9d7ba311850b0807f71 (patch)
tree565539b4137a864b9d12e2e4ea055f86496a2e8f /tests-clar/checkout
parentcfc7b835d6702049968cb0a6899d9741e6e0ebf4 (diff)
downloadlibgit2-bebdbcd442fb9b050589e9d7ba311850b0807f71.tar.gz
Fix crlf issue with checkout tests
Move some checkout utility functions into a shared file and fix some crlf filtering issues when verifying file contents.
Diffstat (limited to 'tests-clar/checkout')
-rw-r--r--tests-clar/checkout/checkout_helpers.c84
-rw-r--r--tests-clar/checkout/checkout_helpers.h9
-rw-r--r--tests-clar/checkout/index.c33
-rw-r--r--tests-clar/checkout/tree.c44
4 files changed, 97 insertions, 73 deletions
diff --git a/tests-clar/checkout/checkout_helpers.c b/tests-clar/checkout/checkout_helpers.c
new file mode 100644
index 000000000..79e80c13a
--- /dev/null
+++ b/tests-clar/checkout/checkout_helpers.c
@@ -0,0 +1,84 @@
+#include "clar_libgit2.h"
+#include "checkout_helpers.h"
+#include "refs.h"
+#include "fileops.h"
+
+/* this is essentially the code from git__unescape modified slightly */
+void strip_cr_from_buf(git_buf *buf)
+{
+ char *scan, *pos = buf->ptr, *end = pos + buf->size;
+
+ for (scan = pos; scan < end; pos++, scan++) {
+ if (*scan == '\r')
+ scan++; /* skip '\r' */
+ if (pos != scan)
+ *pos = *scan;
+ }
+
+ *pos = '\0';
+ buf->size = (pos - buf->ptr);
+}
+
+void assert_on_branch(git_repository *repo, const char *branch)
+{
+ git_reference *head;
+ git_buf bname = GIT_BUF_INIT;
+
+ cl_git_pass(git_reference_lookup(&head, repo, GIT_HEAD_FILE));
+ cl_assert_(git_reference_type(head) == GIT_REF_SYMBOLIC, branch);
+
+ cl_git_pass(git_buf_joinpath(&bname, "refs/heads", branch));
+ cl_assert_equal_s(bname.ptr, git_reference_symbolic_target(head));
+
+ git_reference_free(head);
+ git_buf_free(&bname);
+}
+
+void reset_index_to_treeish(git_object *treeish)
+{
+ git_object *tree;
+ git_index *index;
+ git_repository *repo = git_object_owner(treeish);
+
+ cl_git_pass(git_object_peel(&tree, treeish, GIT_OBJ_TREE));
+
+ cl_git_pass(git_repository_index(&index, repo));
+ cl_git_pass(git_index_read_tree(index, (git_tree *)tree));
+ cl_git_pass(git_index_write(index));
+
+ git_object_free(tree);
+ git_index_free(index);
+}
+
+static void test_file_contents_internal(
+ const char *path, const char *expectedcontents, bool strip_cr)
+{
+ int fd;
+ char data[1024] = {0};
+ git_buf buf = GIT_BUF_INIT;
+ size_t expectedlen = strlen(expectedcontents);
+
+ fd = p_open(path, O_RDONLY);
+ cl_assert(fd >= 0);
+
+ buf.ptr = data;
+ buf.size = p_read(fd, buf.ptr, 1024);
+
+ cl_git_pass(p_close(fd));
+
+ if (strip_cr)
+ strip_cr_from_buf(&buf);
+
+ cl_assert_equal_i((int)expectedlen, (int)buf.size);
+ cl_assert_equal_s(expectedcontents, buf.ptr);
+}
+
+void test_file_contents(const char *path, const char *expected)
+{
+ test_file_contents_internal(path, expected, false);
+}
+
+void test_file_contents_nocr(const char *path, const char *expected)
+{
+ test_file_contents_internal(path, expected, true);
+}
diff --git a/tests-clar/checkout/checkout_helpers.h b/tests-clar/checkout/checkout_helpers.h
new file mode 100644
index 000000000..2c3a4b5bb
--- /dev/null
+++ b/tests-clar/checkout/checkout_helpers.h
@@ -0,0 +1,9 @@
+#include "buffer.h"
+#include "git2/object.h"
+#include "git2/repository.h"
+
+extern void strip_cr_from_buf(git_buf *buf);
+extern void assert_on_branch(git_repository *repo, const char *branch);
+extern void reset_index_to_treeish(git_object *treeish);
+extern void test_file_contents(const char *path, const char *expected);
+extern void test_file_contents_nocr(const char *path, const char *expected);
diff --git a/tests-clar/checkout/index.c b/tests-clar/checkout/index.c
index fe1f6874f..49e7093b8 100644
--- a/tests-clar/checkout/index.c
+++ b/tests-clar/checkout/index.c
@@ -1,25 +1,11 @@
#include "clar_libgit2.h"
+#include "checkout_helpers.h"
#include "git2/checkout.h"
#include "repository.h"
static git_repository *g_repo;
-static void reset_index_to_treeish(git_object *treeish)
-{
- git_object *tree;
- git_index *index;
-
- cl_git_pass(git_object_peel(&tree, treeish, GIT_OBJ_TREE));
-
- cl_git_pass(git_repository_index(&index, g_repo));
- cl_git_pass(git_index_read_tree(index, (git_tree *)tree));
- cl_git_pass(git_index_write(index));
-
- git_object_free(tree);
- git_index_free(index);
-}
-
void test_checkout_index__initialize(void)
{
git_tree *tree;
@@ -41,23 +27,6 @@ void test_checkout_index__cleanup(void)
cl_git_sandbox_cleanup();
}
-static void test_file_contents(const char *path, const char *expectedcontents)
-{
- int fd;
- char buffer[1024] = {0};
- size_t expectedlen, actuallen;
-
- fd = p_open(path, O_RDONLY);
- cl_assert(fd >= 0);
-
- expectedlen = strlen(expectedcontents);
- actuallen = p_read(fd, buffer, 1024);
- cl_git_pass(p_close(fd));
-
- cl_assert_equal_sz(actuallen, expectedlen);
- cl_assert_equal_s(buffer, expectedcontents);
-}
-
void test_checkout_index__cannot_checkout_a_bare_repository(void)
{
test_checkout_index__cleanup();
diff --git a/tests-clar/checkout/tree.c b/tests-clar/checkout/tree.c
index ff5c43aef..691f03dc0 100644
--- a/tests-clar/checkout/tree.c
+++ b/tests-clar/checkout/tree.c
@@ -1,4 +1,5 @@
#include "clar_libgit2.h"
+#include "checkout_helpers.h"
#include "git2/checkout.h"
#include "repository.h"
@@ -137,21 +138,6 @@ void test_checkout_tree__doesnt_write_unrequested_files_to_worktree(void)
cl_assert_equal_i(false, git_path_isfile("testrepo/readme.txt"));
}
-static void assert_on_branch(git_repository *repo, const char *branch)
-{
- git_reference *head;
- git_buf bname = GIT_BUF_INIT;
-
- cl_git_pass(git_reference_lookup(&head, repo, GIT_HEAD_FILE));
- cl_assert_(git_reference_type(head) == GIT_REF_SYMBOLIC, branch);
-
- cl_git_pass(git_buf_joinpath(&bname, "refs/heads", branch));
- cl_assert_equal_s(bname.ptr, git_reference_symbolic_target(head));
-
- git_reference_free(head);
- git_buf_free(&bname);
-}
-
void test_checkout_tree__can_switch_branches(void)
{
git_checkout_opts opts = GIT_CHECKOUT_OPTS_INIT;
@@ -241,28 +227,11 @@ void test_checkout_tree__can_remove_ignored(void)
cl_assert(!git_path_isfile("testrepo/ignored_file"));
}
-/* this is essentially the code from git__unescape modified slightly */
-static void strip_cr_from_buf(git_buf *buf)
-{
- char *scan, *pos = buf->ptr;
-
- for (scan = pos; *scan; pos++, scan++) {
- if (*scan == '\r')
- scan++; /* skip '\r' */
- if (pos != scan)
- *pos = *scan;
- }
-
- *pos = '\0';
- buf->size = (pos - buf->ptr);
-}
-
void test_checkout_tree__can_update_only(void)
{
git_checkout_opts opts = GIT_CHECKOUT_OPTS_INIT;
git_oid oid;
git_object *obj = NULL;
- git_buf buf = GIT_BUF_INIT;
/* first let's get things into a known state - by checkout out the HEAD */
@@ -273,10 +242,7 @@ void test_checkout_tree__can_update_only(void)
cl_assert(!git_path_isdir("testrepo/a"));
- cl_git_pass(git_futils_readbuffer(&buf, "testrepo/branch_file.txt"));
- strip_cr_from_buf(&buf);
- cl_assert_equal_s("hi\nbye!\n", buf.ptr);
- git_buf_free(&buf);
+ test_file_contents_nocr("testrepo/branch_file.txt", "hi\nbye!\n");
/* now checkout branch but with update only */
@@ -297,11 +263,7 @@ void test_checkout_tree__can_update_only(void)
cl_assert(!git_path_isdir("testrepo/a"));
/* but this file still should have been updated */
- cl_git_pass(git_futils_readbuffer(&buf, "testrepo/branch_file.txt"));
- strip_cr_from_buf(&buf);
- cl_assert_equal_s("hi\n", buf.ptr);
-
- git_buf_free(&buf);
+ test_file_contents_nocr("testrepo/branch_file.txt", "hi\n");
git_object_free(obj);
}