summaryrefslogtreecommitdiff
path: root/tests/object/tree/write.c
diff options
context:
space:
mode:
authorRussell Belfer <rb@github.com>2013-12-12 14:16:40 -0800
committerRussell Belfer <rb@github.com>2013-12-12 14:16:40 -0800
commit452c7de668568f75a97b0438daab9f33b68d605a (patch)
tree15c92dc3232cf138f509ed7f11a401b5966c68ea /tests/object/tree/write.c
parent9cfce2735d77f4d8b6005e62349dd97c0c6de5ab (diff)
downloadlibgit2-452c7de668568f75a97b0438daab9f33b68d605a.tar.gz
Add git_treebuilder_insert test and clarify doc
This wasn't being tested and since it has a callback, I fixed it even though the return value of this callback is not treated like any of the other callbacks in the API.
Diffstat (limited to 'tests/object/tree/write.c')
-rw-r--r--tests/object/tree/write.c84
1 files changed, 69 insertions, 15 deletions
diff --git a/tests/object/tree/write.c b/tests/object/tree/write.c
index 468c0ccd1..3bea0ed4d 100644
--- a/tests/object/tree/write.c
+++ b/tests/object/tree/write.c
@@ -164,24 +164,25 @@ void test_object_tree_write__sorted_subtrees(void)
git_treebuilder_free(builder);
}
+static struct {
+ unsigned int attr;
+ const char *filename;
+} _entries[] = {
+ { GIT_FILEMODE_BLOB, "aardvark" },
+ { GIT_FILEMODE_BLOB, ".first" },
+ { GIT_FILEMODE_BLOB, "apple" },
+ { GIT_FILEMODE_BLOB, "last"},
+ { GIT_FILEMODE_BLOB, "apple_after"},
+ { GIT_FILEMODE_BLOB, "after_aardvark"},
+ { 0, NULL },
+};
+
void test_object_tree_write__removing_and_re_adding_in_treebuilder(void)
{
git_treebuilder *builder;
- int i, aardvark_i, apple_i, apple_after_i, apple_extra_i, last_i;
+ int i, aardvark_i, apple_i, apple_after_i, apple_extra_i, last_i;
git_oid blank_oid, tree_oid;
git_tree *tree;
- struct {
- unsigned int attr;
- const char *filename;
- } entries[] = {
- { GIT_FILEMODE_BLOB, "aardvark" },
- { GIT_FILEMODE_BLOB, ".first" },
- { GIT_FILEMODE_BLOB, "apple" },
- { GIT_FILEMODE_BLOB, "last"},
- { GIT_FILEMODE_BLOB, "apple_after"},
- { GIT_FILEMODE_BLOB, "after_aardvark"},
- { 0, NULL },
- };
memset(&blank_oid, 0x0, sizeof(blank_oid));
@@ -189,9 +190,9 @@ void test_object_tree_write__removing_and_re_adding_in_treebuilder(void)
cl_assert_equal_i(0, (int)git_treebuilder_entrycount(builder));
- for (i = 0; entries[i].filename; ++i)
+ for (i = 0; _entries[i].filename; ++i)
cl_git_pass(git_treebuilder_insert(NULL,
- builder, entries[i].filename, &blank_oid, entries[i].attr));
+ builder, _entries[i].filename, &blank_oid, _entries[i].attr));
cl_assert_equal_i(6, (int)git_treebuilder_entrycount(builder));
@@ -260,3 +261,56 @@ void test_object_tree_write__removing_and_re_adding_in_treebuilder(void)
git_tree_free(tree);
}
+
+static int treebuilder_filter_prefixed(
+ const git_tree_entry *entry, void *payload)
+{
+ return !git__prefixcmp(git_tree_entry_name(entry), payload);
+}
+
+void test_object_tree_write__filtering(void)
+{
+ git_treebuilder *builder;
+ int i;
+ git_oid blank_oid, tree_oid;
+ git_tree *tree;
+
+ memset(&blank_oid, 0x0, sizeof(blank_oid));
+
+ cl_git_pass(git_treebuilder_create(&builder, NULL));
+
+ for (i = 0; _entries[i].filename; ++i)
+ cl_git_pass(git_treebuilder_insert(NULL,
+ builder, _entries[i].filename, &blank_oid, _entries[i].attr));
+
+ cl_assert_equal_i(6, (int)git_treebuilder_entrycount(builder));
+
+ cl_assert(git_treebuilder_get(builder, "apple") != NULL);
+ cl_assert(git_treebuilder_get(builder, "aardvark") != NULL);
+ cl_assert(git_treebuilder_get(builder, "last") != NULL);
+
+ git_treebuilder_filter(builder, treebuilder_filter_prefixed, "apple");
+
+ cl_assert_equal_i(4, (int)git_treebuilder_entrycount(builder));
+
+ cl_assert(git_treebuilder_get(builder, "apple") == NULL);
+ cl_assert(git_treebuilder_get(builder, "aardvark") != NULL);
+ cl_assert(git_treebuilder_get(builder, "last") != NULL);
+
+ git_treebuilder_filter(builder, treebuilder_filter_prefixed, "a");
+
+ cl_assert_equal_i(2, (int)git_treebuilder_entrycount(builder));
+
+ cl_assert(git_treebuilder_get(builder, "aardvark") == NULL);
+ cl_assert(git_treebuilder_get(builder, "last") != NULL);
+
+ cl_git_pass(git_treebuilder_write(&tree_oid, g_repo, builder));
+
+ git_treebuilder_free(builder);
+
+ cl_git_pass(git_tree_lookup(&tree, g_repo, &tree_oid));
+
+ cl_assert_equal_i(2, (int)git_tree_entrycount(tree));
+
+ git_tree_free(tree);
+}