diff options
| author | Philip Kelley <phkelley@hotmail.com> | 2013-02-11 09:12:39 -0800 |
|---|---|---|
| committer | Philip Kelley <phkelley@hotmail.com> | 2013-02-11 09:12:39 -0800 |
| commit | e026cfee003e103d79e56983d68a206ae907eada (patch) | |
| tree | 16720580285b40a2208d07cd06d1abd893493991 /tests-clar | |
| parent | 8c29dca6c372cae1c6a97d78252ee1d7ac10673b (diff) | |
| parent | db4bb4158f1005267e8d0e5785cb75487440580a (diff) | |
| download | libgit2-e026cfee003e103d79e56983d68a206ae907eada.tar.gz | |
Merge pull request #1323 from jamill/resolve_remote
Resolve a remote branch's remote
Diffstat (limited to 'tests-clar')
| -rw-r--r-- | tests-clar/network/remotes.c | 11 | ||||
| -rw-r--r-- | tests-clar/refs/branches/remote.c | 119 |
2 files changed, 128 insertions, 2 deletions
diff --git a/tests-clar/network/remotes.c b/tests-clar/network/remotes.c index b138d8c10..51d6c946f 100644 --- a/tests-clar/network/remotes.c +++ b/tests-clar/network/remotes.c @@ -173,13 +173,20 @@ void test_network_remotes__fnmatch(void) void test_network_remotes__transform(void) { - char ref[1024]; + char ref[1024] = {0}; - memset(ref, 0x0, sizeof(ref)); cl_git_pass(git_refspec_transform(ref, sizeof(ref), _refspec, "refs/heads/master")); cl_assert_equal_s(ref, "refs/remotes/test/master"); } +void test_network_remotes__transform_destination_to_source(void) +{ + char ref[1024] = {0}; + + cl_git_pass(git_refspec_rtransform(ref, sizeof(ref), _refspec, "refs/remotes/test/master")); + cl_assert_equal_s(ref, "refs/heads/master"); +} + void test_network_remotes__transform_r(void) { git_buf buf = GIT_BUF_INIT; diff --git a/tests-clar/refs/branches/remote.c b/tests-clar/refs/branches/remote.c new file mode 100644 index 000000000..be355af46 --- /dev/null +++ b/tests-clar/refs/branches/remote.c @@ -0,0 +1,119 @@ +#include "clar_libgit2.h" +#include "branch.h" +#include "remote.h" + +static git_repository *g_repo; + +static const char *current_master_tip = "099fabac3a9ea935598528c27f866e34089c2eff"; + +void test_refs_branches_remote__initialize(void) +{ + git_oid id; + + g_repo = cl_git_sandbox_init("testrepo"); + git_oid_fromstr(&id, current_master_tip); + + /* Create test/master */ + git_reference_create(NULL, g_repo, "refs/remotes/test/master", &id, 1); +} + +void test_refs_branches_remote__cleanup(void) +{ + cl_git_sandbox_cleanup(); +} + +void test_refs_branches_remote__can_get_remote_for_branch(void) +{ + git_reference *ref; + const char *name; + char *expectedRemoteName = "test"; + int expectedRemoteNameLength = strlen(expectedRemoteName) + 1; + char remotename[1024] = {0}; + + cl_git_pass(git_branch_lookup(&ref, g_repo, "test/master", GIT_BRANCH_REMOTE)); + cl_git_pass(git_branch_name(&name, ref)); + cl_assert_equal_s("test/master", name); + + cl_assert_equal_i(expectedRemoteNameLength, + git_branch_remote_name(NULL, 0, g_repo, ref)); + cl_assert_equal_i(expectedRemoteNameLength, + git_branch_remote_name(remotename, expectedRemoteNameLength, g_repo, ref)); + cl_assert_equal_s("test", remotename); + + git_reference_free(ref); +} + +void test_refs_branches_remote__insufficient_buffer_returns_error(void) +{ + git_reference *ref; + const char *name; + char *expectedRemoteName = "test"; + int expectedRemoteNameLength = strlen(expectedRemoteName) + 1; + char remotename[1024] = {0}; + + cl_git_pass(git_branch_lookup(&ref, g_repo, "test/master", GIT_BRANCH_REMOTE)); + cl_git_pass(git_branch_name(&name, ref)); + cl_assert_equal_s("test/master", name); + + cl_assert_equal_i(expectedRemoteNameLength, + git_branch_remote_name(NULL, 0, g_repo, ref)); + cl_git_fail_with(GIT_ERROR, + git_branch_remote_name(remotename, expectedRemoteNameLength - 1, g_repo, ref)); + + git_reference_free(ref); +} + +void test_refs_branches_remote__no_matching_remote_returns_error(void) +{ + git_reference *ref; + const char *name; + git_oid id; + + git_oid_fromstr(&id, current_master_tip); + + /* Create nonexistent/master */ + git_reference_create(NULL, g_repo, "refs/remotes/nonexistent/master", &id, 1); + + cl_git_pass(git_branch_lookup(&ref, g_repo,"nonexistent/master", GIT_BRANCH_REMOTE)); + cl_git_pass(git_branch_name(&name, ref)); + cl_assert_equal_s("nonexistent/master", name); + + cl_git_fail_with(git_branch_remote_name(NULL, 0, g_repo, ref), GIT_ENOTFOUND); + git_reference_free(ref); +} + +void test_refs_branches_remote__local_remote_returns_error(void) +{ + git_reference *ref; + const char *name; + + cl_git_pass(git_branch_lookup(&ref,g_repo, "master", GIT_BRANCH_LOCAL)); + cl_git_pass(git_branch_name(&name, ref)); + cl_assert_equal_s("master",name); + + cl_git_fail_with(git_branch_remote_name(NULL, 0, g_repo, ref), GIT_ERROR); + git_reference_free(ref); +} + +void test_refs_branches_remote__ambiguous_remote_returns_error(void) +{ + git_reference *ref; + const char *name; + git_remote *remote; + + /* Create the remote */ + cl_git_pass(git_remote_create(&remote, g_repo, "addtest", "http://github.com/libgit2/libgit2")); + + /* Update the remote fetch spec */ + cl_git_pass(git_remote_set_fetchspec(remote, "refs/heads/*:refs/remotes/test/*")); + cl_git_pass(git_remote_save(remote)); + + git_remote_free(remote); + + cl_git_pass(git_branch_lookup(&ref,g_repo, "test/master", GIT_BRANCH_REMOTE)); + cl_git_pass(git_branch_name(&name, ref)); + cl_assert_equal_s("test/master", name); + + cl_git_fail_with(git_branch_remote_name(NULL, 0, g_repo, ref), GIT_EAMBIGUOUS); + git_reference_free(ref); +} |
