diff options
author | Russell Belfer <rb@github.com> | 2014-01-04 02:26:02 +0400 |
---|---|---|
committer | Russell Belfer <rb@github.com> | 2014-01-04 02:26:02 +0400 |
commit | 79ccb921781dc61c4ed06e5c8c19c2ea1ba0a33a (patch) | |
tree | 81ea4f6ad7a0b694ce04aa0b4ff547f4c94fa6f6 /tests | |
parent | 97bbf61e901ac9e0080394a9321dfc632b77fe99 (diff) |
Further tree building tests with hard paths
Diffstat (limited to 'tests')
-rw-r--r-- | tests/object/tree/write.c | 46 |
1 files changed, 40 insertions, 6 deletions
diff --git a/tests/object/tree/write.c b/tests/object/tree/write.c index 599859727..45356e807 100644 --- a/tests/object/tree/write.c +++ b/tests/object/tree/write.c @@ -324,15 +324,20 @@ void test_object_tree_write__cruel_paths(void) " : * ? \" \n < > |", "a\\b", "\\\\b\a", + ":\\", + "COM1", + "foo.aux", REP1024("1234"), /* 4096 char string */ REP1024("12345678"), /* 8192 char string */ + "\xC5\xAA\x6E\xC4\xAD\x63\xC5\x8D\x64\x65\xCC\xBD", /* Ūnĭcōde̽ */ NULL }; git_treebuilder *builder; git_tree *tree; - git_oid id, bid; + git_oid id, bid, subid; const char **scan; - int count = 0; + int count = 0, i, j; + git_tree_entry *te; git_oid_fromstr(&bid, blob_oid); @@ -348,17 +353,46 @@ void test_object_tree_write__cruel_paths(void) /* check data is correct */ cl_git_pass(git_tree_lookup(&tree, g_repo, &id)); + cl_assert_equal_i(count, git_tree_entrycount(tree)); + for (scan = the_paths; *scan; ++scan) { - const git_tree_entry *te = git_tree_entry_byname(tree, *scan); - cl_assert(te != NULL); - cl_assert_equal_s(*scan, git_tree_entry_name(te)); + const git_tree_entry *cte = git_tree_entry_byname(tree, *scan); + cl_assert(cte != NULL); + cl_assert_equal_s(*scan, git_tree_entry_name(cte)); } for (scan = the_paths; *scan; ++scan) { - git_tree_entry *te; cl_git_pass(git_tree_entry_bypath(&te, tree, *scan)); cl_assert_equal_s(*scan, git_tree_entry_name(te)); git_tree_entry_free(te); } + + git_tree_free(tree); + + /* let's try longer paths */ + cl_git_pass(git_treebuilder_create(&builder, NULL)); + for (scan = the_paths; *scan; ++scan) { + cl_git_pass(git_treebuilder_insert( + NULL, builder, *scan, &id, GIT_FILEMODE_TREE)); + } + cl_git_pass(git_treebuilder_write(&subid, g_repo, builder)); + git_treebuilder_free(builder); + + /* check data is correct */ + cl_git_pass(git_tree_lookup(&tree, g_repo, &subid)); + + cl_assert_equal_i(count, git_tree_entrycount(tree)); + + for (i = 0; i < count; ++i) { + for (j = 0; j < count; ++j) { + git_buf b = GIT_BUF_INIT; + cl_git_pass(git_buf_joinpath(&b, the_paths[i], the_paths[j])); + cl_git_pass(git_tree_entry_bypath(&te, tree, b.ptr)); + cl_assert_equal_s(the_paths[j], git_tree_entry_name(te)); + git_tree_entry_free(te); + git_buf_free(&b); + } + } + git_tree_free(tree); } |