diff options
| author | Vicent Marti <tanoku@gmail.com> | 2012-06-19 00:59:04 +0200 |
|---|---|---|
| committer | Vicent Marti <tanoku@gmail.com> | 2012-06-19 00:59:04 +0200 |
| commit | 515a4c7c0634018097d3cd85f6a819dabe4cfd32 (patch) | |
| tree | 2257e19ea245a9d7307e6c1ed4e8ac8bca173c41 /tests-clar/object/tree | |
| parent | ac8eac2f6632de6215d970b77b420601cedd6a91 (diff) | |
| download | libgit2-515a4c7c0634018097d3cd85f6a819dabe4cfd32.tar.gz | |
tree: Proper path comparison logic
Diffstat (limited to 'tests-clar/object/tree')
| -rw-r--r-- | tests-clar/object/tree/write.c | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/tests-clar/object/tree/write.c b/tests-clar/object/tree/write.c index e6dc549a..a7831203 100644 --- a/tests-clar/object/tree/write.c +++ b/tests-clar/object/tree/write.c @@ -82,3 +82,66 @@ void test_object_tree_write__subtree(void) cl_assert(2 == git_tree_entrycount(tree)); git_tree_free(tree); } + +/* + * And the Lord said: Is this tree properly sorted? + */ +void test_object_tree_write__sorted_subtrees(void) +{ + git_treebuilder *builder; + unsigned int i, position_c, position_cake, position_config; + + struct { + unsigned int attr; + const char *filename; + } entries[] = { + { 0100644, ".gitattributes" }, + { 0100644, ".gitignore" }, + { 0100644, ".htaccess" }, + { 0100644, "Capfile" }, + { 0100644, "Makefile"}, + { 0100644, "README"}, + { 0040000, "app"}, + { 0040000, "cake"}, + { 0040000, "config"}, + { 0100644, "c"}, + { 0100644, "git_test.txt"}, + { 0100644, "htaccess.htaccess"}, + { 0100644, "index.php"}, + { 0040000, "plugins"}, + { 0040000, "schemas"}, + { 0040000, "ssl-certs"}, + { 0040000, "vendors"} + }; + + git_oid blank_oid, tree_oid; + + memset(&blank_oid, 0x0, sizeof(blank_oid)); + + cl_git_pass(git_treebuilder_create(&builder, NULL)); + + for (i = 0; i < ARRAY_SIZE(entries); ++i) { + cl_git_pass(git_treebuilder_insert(NULL, + builder, entries[i].filename, &blank_oid, entries[i].attr)); + } + + cl_git_pass(git_treebuilder_write(&tree_oid, g_repo, builder)); + + for (i = 0; i < builder->entries.length; ++i) { + git_tree_entry *entry = git_vector_get(&builder->entries, i); + + if (strcmp(entry->filename, "c") == 0) + position_c = i; + + if (strcmp(entry->filename, "cake") == 0) + position_cake = i; + + if (strcmp(entry->filename, "config") == 0) + position_config = i; + } + + cl_assert(position_c < position_cake); + cl_assert(position_cake < position_config); + + git_treebuilder_free(builder); +} |
