diff options
author | Vicent Martà <tanoku@gmail.com> | 2012-05-05 14:22:53 -0700 |
---|---|---|
committer | Vicent Martà <tanoku@gmail.com> | 2012-05-05 14:22:53 -0700 |
commit | 48ecd122ea6fb8cf12fb4029974c314e5d9efb62 (patch) | |
tree | 88f90fa8c9d903f072a2b1c647c51a9899e520c7 /tests-clar/attr/repo.c | |
parent | 2218fd57a50ceb851cb131939bf0747e072e40f6 (diff) | |
parent | 4ef14af93517b3842bc0dfa24147cf10dd029582 (diff) | |
download | libgit2-48ecd122ea6fb8cf12fb4029974c314e5d9efb62.tar.gz |
Merge pull request #659 from libgit2/development-merge
New-error-handling
Diffstat (limited to 'tests-clar/attr/repo.c')
-rw-r--r-- | tests-clar/attr/repo.c | 107 |
1 files changed, 76 insertions, 31 deletions
diff --git a/tests-clar/attr/repo.c b/tests-clar/attr/repo.c index 4de4afaa7..006a49081 100644 --- a/tests-clar/attr/repo.c +++ b/tests-clar/attr/repo.c @@ -14,17 +14,13 @@ void test_attr_repo__initialize(void) * Also rename gitattributes to .gitattributes, because it contains * macro definitions which are only allowed in the root. */ - cl_fixture_sandbox("attr"); - cl_git_pass(p_rename("attr/.gitted", "attr/.git")); - cl_git_pass(p_rename("attr/gitattributes", "attr/.gitattributes")); - cl_git_pass(git_repository_open(&g_repo, "attr/.git")); + g_repo = cl_git_sandbox_init("attr"); } void test_attr_repo__cleanup(void) { - git_repository_free(g_repo); + cl_git_sandbox_cleanup(); g_repo = NULL; - cl_fixture_cleanup("attr"); } void test_attr_repo__get_one(void) @@ -68,13 +64,13 @@ void test_attr_repo__get_one(void) for (scan = test_cases; scan->path != NULL; scan++) { const char *value; - cl_git_pass(git_attr_get(g_repo, scan->path, scan->attr, &value)); + cl_git_pass(git_attr_get(g_repo, 0, scan->path, scan->attr, &value)); attr_check_expected(scan->expected, scan->expected_str, value); } - cl_git_pass(git_attr_cache__is_cached(g_repo, ".git/info/attributes")); - cl_git_pass(git_attr_cache__is_cached(g_repo, ".gitattributes")); - cl_git_pass(git_attr_cache__is_cached(g_repo, "sub/.gitattributes")); + cl_assert(git_attr_cache__is_cached(g_repo, 0, ".git/info/attributes")); + cl_assert(git_attr_cache__is_cached(g_repo, 0, ".gitattributes")); + cl_assert(git_attr_cache__is_cached(g_repo, 0, "sub/.gitattributes")); } void test_attr_repo__get_many(void) @@ -82,26 +78,26 @@ void test_attr_repo__get_many(void) const char *names[4] = { "repoattr", "rootattr", "missingattr", "subattr" }; const char *values[4]; - cl_git_pass(git_attr_get_many(g_repo, "root_test1", 4, names, values)); + cl_git_pass(git_attr_get_many(g_repo, 0, "root_test1", 4, names, values)); cl_assert(GIT_ATTR_TRUE(values[0])); cl_assert(GIT_ATTR_TRUE(values[1])); cl_assert(GIT_ATTR_UNSPECIFIED(values[2])); cl_assert(GIT_ATTR_UNSPECIFIED(values[3])); - cl_git_pass(git_attr_get_many(g_repo, "root_test2", 4, names, values)); + cl_git_pass(git_attr_get_many(g_repo, 0, "root_test2", 4, names, values)); cl_assert(GIT_ATTR_TRUE(values[0])); cl_assert(GIT_ATTR_FALSE(values[1])); cl_assert(GIT_ATTR_UNSPECIFIED(values[2])); cl_assert(GIT_ATTR_UNSPECIFIED(values[3])); - cl_git_pass(git_attr_get_many(g_repo, "sub/subdir_test1", 4, names, values)); + cl_git_pass(git_attr_get_many(g_repo, 0, "sub/subdir_test1", 4, names, values)); cl_assert(GIT_ATTR_TRUE(values[0])); cl_assert(GIT_ATTR_TRUE(values[1])); cl_assert(GIT_ATTR_UNSPECIFIED(values[2])); - cl_assert_strequal("yes", values[3]); + cl_assert_equal_s("yes", values[3]); } static int count_attrs( @@ -114,7 +110,7 @@ static int count_attrs( *((int *)payload) += 1; - return GIT_SUCCESS; + return 0; } void test_attr_repo__foreach(void) @@ -122,16 +118,17 @@ void test_attr_repo__foreach(void) int count; count = 0; - cl_git_pass(git_attr_foreach(g_repo, "root_test1", &count_attrs, &count)); + cl_git_pass(git_attr_foreach( + g_repo, 0, "root_test1", &count_attrs, &count)); cl_assert(count == 2); count = 0; - cl_git_pass(git_attr_foreach(g_repo, "sub/subdir_test1", + cl_git_pass(git_attr_foreach(g_repo, 0, "sub/subdir_test1", &count_attrs, &count)); cl_assert(count == 4); /* repoattr, rootattr, subattr, negattr */ count = 0; - cl_git_pass(git_attr_foreach(g_repo, "sub/subdir_test2.txt", + cl_git_pass(git_attr_foreach(g_repo, 0, "sub/subdir_test2.txt", &count_attrs, &count)); cl_assert(count == 6); /* repoattr, rootattr, subattr, reposub, negattr, another */ } @@ -140,19 +137,19 @@ void test_attr_repo__manpage_example(void) { const char *value; - cl_git_pass(git_attr_get(g_repo, "sub/abc", "foo", &value)); + cl_git_pass(git_attr_get(g_repo, 0, "sub/abc", "foo", &value)); cl_assert(GIT_ATTR_TRUE(value)); - cl_git_pass(git_attr_get(g_repo, "sub/abc", "bar", &value)); + cl_git_pass(git_attr_get(g_repo, 0, "sub/abc", "bar", &value)); cl_assert(GIT_ATTR_UNSPECIFIED(value)); - cl_git_pass(git_attr_get(g_repo, "sub/abc", "baz", &value)); + cl_git_pass(git_attr_get(g_repo, 0, "sub/abc", "baz", &value)); cl_assert(GIT_ATTR_FALSE(value)); - cl_git_pass(git_attr_get(g_repo, "sub/abc", "merge", &value)); - cl_assert_strequal("filfre", value); + cl_git_pass(git_attr_get(g_repo, 0, "sub/abc", "merge", &value)); + cl_assert_equal_s("filfre", value); - cl_git_pass(git_attr_get(g_repo, "sub/abc", "frotz", &value)); + cl_git_pass(git_attr_get(g_repo, 0, "sub/abc", "frotz", &value)); cl_assert(GIT_ATTR_UNSPECIFIED(value)); } @@ -163,7 +160,7 @@ void test_attr_repo__macros(void) const char *names3[3] = { "macro2", "multi2", "multi3" }; const char *values[5]; - cl_git_pass(git_attr_get_many(g_repo, "binfile", 5, names, values)); + cl_git_pass(git_attr_get_many(g_repo, 0, "binfile", 5, names, values)); cl_assert(GIT_ATTR_TRUE(values[0])); cl_assert(GIT_ATTR_TRUE(values[1])); @@ -171,19 +168,19 @@ void test_attr_repo__macros(void) cl_assert(GIT_ATTR_FALSE(values[3])); cl_assert(GIT_ATTR_UNSPECIFIED(values[4])); - cl_git_pass(git_attr_get_many(g_repo, "macro_test", 5, names2, values)); + cl_git_pass(git_attr_get_many(g_repo, 0, "macro_test", 5, names2, values)); cl_assert(GIT_ATTR_TRUE(values[0])); cl_assert(GIT_ATTR_TRUE(values[1])); cl_assert(GIT_ATTR_FALSE(values[2])); cl_assert(GIT_ATTR_UNSPECIFIED(values[3])); - cl_assert_strequal("77", values[4]); + cl_assert_equal_s("77", values[4]); - cl_git_pass(git_attr_get_many(g_repo, "macro_test", 3, names3, values)); + cl_git_pass(git_attr_get_many(g_repo, 0, "macro_test", 3, names3, values)); cl_assert(GIT_ATTR_TRUE(values[0])); cl_assert(GIT_ATTR_FALSE(values[1])); - cl_assert_strequal("answer", values[2]); + cl_assert_equal_s("answer", values[2]); } void test_attr_repo__bad_macros(void) @@ -192,7 +189,7 @@ void test_attr_repo__bad_macros(void) "firstmacro", "secondmacro", "thirdmacro" }; const char *values[6]; - cl_git_pass(git_attr_get_many(g_repo, "macro_bad", 6, names, values)); + cl_git_pass(git_attr_get_many(g_repo, 0, "macro_bad", 6, names, values)); /* these three just confirm that the "mymacro" rule ran */ cl_assert(GIT_ATTR_UNSPECIFIED(values[0])); @@ -222,7 +219,55 @@ void test_attr_repo__bad_macros(void) * -firstmacro secondmacro="hahaha" thirdmacro */ cl_assert(GIT_ATTR_FALSE(values[3])); - cl_assert_strequal("hahaha", values[4]); + cl_assert_equal_s("hahaha", values[4]); cl_assert(GIT_ATTR_TRUE(values[5])); } +#define CONTENT "I'm going to be dynamically processed\r\n" \ + "And my line endings...\r\n" \ + "...are going to be\n" \ + "normalized!\r\n" + +#define GITATTR "* text=auto\n" \ + "*.txt text\n" \ + "*.data binary\n" + +static void add_to_workdir(const char *filename, const char *content) +{ + git_buf buf = GIT_BUF_INIT; + + cl_git_pass(git_buf_joinpath(&buf, "attr", filename)); + cl_git_rewritefile(git_buf_cstr(&buf), content); + + git_buf_free(&buf); +} + +static void assert_proper_normalization(git_index *index, const char *filename, const char *expected_sha) +{ + int index_pos; + git_index_entry *entry; + + add_to_workdir(filename, CONTENT); + cl_git_pass(git_index_add(index, filename, 0)); + + index_pos = git_index_find(index, filename); + cl_assert(index_pos >= 0); + + entry = git_index_get(index, index_pos); + cl_assert_equal_i(0, git_oid_streq(&entry->oid, expected_sha)); +} + +void test_attr_repo__staging_properly_normalizes_line_endings_according_to_gitattributes_directives(void) +{ + git_index* index; + + cl_git_pass(git_repository_index(&index, g_repo)); + + add_to_workdir(".gitattributes", GITATTR); + + assert_proper_normalization(index, "text.txt", "22c74203bace3c2e950278c7ab08da0fca9f4e9b"); + assert_proper_normalization(index, "huh.dunno", "22c74203bace3c2e950278c7ab08da0fca9f4e9b"); + assert_proper_normalization(index, "binary.data", "66eeff1fcbacf589e6d70aa70edd3fce5be2b37c"); + + git_index_free(index); +} |