summaryrefslogtreecommitdiff
path: root/tests-clar
diff options
context:
space:
mode:
authorPhilip Kelley <phkelley@hotmail.com>2013-02-11 09:12:39 -0800
committerPhilip Kelley <phkelley@hotmail.com>2013-02-11 09:12:39 -0800
commite026cfee003e103d79e56983d68a206ae907eada (patch)
tree16720580285b40a2208d07cd06d1abd893493991 /tests-clar
parent8c29dca6c372cae1c6a97d78252ee1d7ac10673b (diff)
parentdb4bb4158f1005267e8d0e5785cb75487440580a (diff)
downloadlibgit2-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.c11
-rw-r--r--tests-clar/refs/branches/remote.c119
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);
+}