summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorJacques Germishuys <jacquesg@striata.com>2014-08-17 14:55:06 +0200
committerJacques Germishuys <jacquesg@striata.com>2014-08-17 14:55:06 +0200
commit4e53c28096f4b04ab9b573fc594a538f51e10049 (patch)
tree71ffc739c341a49bb13e8430f7663a861cd6d449 /tests
parentfa44a1699ccd70725b236868ef4be5cac8c36267 (diff)
downloadlibgit2-4e53c28096f4b04ab9b573fc594a538f51e10049.tar.gz
Check if the refspec matches before transforming
Diffstat (limited to 'tests')
-rw-r--r--tests/network/refspecs.c48
1 files changed, 43 insertions, 5 deletions
diff --git a/tests/network/refspecs.c b/tests/network/refspecs.c
index aa9b36e58..c6bcb10e8 100644
--- a/tests/network/refspecs.c
+++ b/tests/network/refspecs.c
@@ -88,7 +88,7 @@ void test_network_refspecs__parsing(void)
assert_refspec(GIT_DIRECTION_FETCH, "refs/pull/*/head:refs/remotes/origin/pr/*", true);
}
-void assert_transform(const char *refspec, const char *name, const char *result)
+static void assert_valid_transform(const char *refspec, const char *name, const char *result)
{
git_refspec spec;
git_buf buf = GIT_BUF_INIT;
@@ -103,8 +103,46 @@ void assert_transform(const char *refspec, const char *name, const char *result)
void test_network_refspecs__transform_mid_star(void)
{
- assert_transform("refs/pull/*/head:refs/remotes/origin/pr/*", "refs/pull/23/head", "refs/remotes/origin/pr/23");
- assert_transform("refs/heads/*:refs/remotes/origin/*", "refs/heads/master", "refs/remotes/origin/master");
- assert_transform("refs/heads/*:refs/heads/*", "refs/heads/master", "refs/heads/master");
- assert_transform("refs/*:refs/*", "refs/heads/master", "refs/heads/master");
+ assert_valid_transform("refs/pull/*/head:refs/remotes/origin/pr/*", "refs/pull/23/head", "refs/remotes/origin/pr/23");
+ assert_valid_transform("refs/heads/*:refs/remotes/origin/*", "refs/heads/master", "refs/remotes/origin/master");
+ assert_valid_transform("refs/heads/*:refs/remotes/origin/*", "refs/heads/user/feature", "refs/remotes/origin/user/feature");
+ assert_valid_transform("refs/heads/*:refs/heads/*", "refs/heads/master", "refs/heads/master");
+ assert_valid_transform("refs/heads/*:refs/heads/*", "refs/heads/user/feature", "refs/heads/user/feature");
+ assert_valid_transform("refs/*:refs/*", "refs/heads/master", "refs/heads/master");
+}
+
+static void assert_invalid_transform(const char *refspec, const char *name)
+{
+ git_refspec spec;
+ git_buf buf = GIT_BUF_INIT;
+
+ git_refspec__parse(&spec, refspec, true);
+ cl_git_fail(git_refspec_transform(&buf, &spec, name));
+
+ git_buf_free(&buf);
+ git_refspec__free(&spec);
+}
+
+void test_network_refspecs__invalid(void)
+{
+ assert_invalid_transform("refs/heads/*:refs/remotes/origin/*", "master");
+ assert_invalid_transform("refs/heads/*:refs/remotes/origin/*", "refs/headz/master");
+}
+
+static void assert_invalid_rtransform(const char *refspec, const char *name)
+{
+ git_refspec spec;
+ git_buf buf = GIT_BUF_INIT;
+
+ git_refspec__parse(&spec, refspec, true);
+ cl_git_fail(git_refspec_rtransform(&buf, &spec, name));
+
+ git_buf_free(&buf);
+ git_refspec__free(&spec);
+}
+
+void test_network_refspecs__invalid_reverse(void)
+{
+ assert_invalid_rtransform("refs/heads/*:refs/remotes/origin/*", "master");
+ assert_invalid_rtransform("refs/heads/*:refs/remotes/origin/*", "refs/remotes/o/master");
}