summaryrefslogtreecommitdiff
path: root/tests-clar
diff options
context:
space:
mode:
authorVicent Martí <vicent@github.com>2012-09-25 14:35:33 -0700
committerVicent Martí <vicent@github.com>2012-09-25 14:35:33 -0700
commit3f7c5497c3c93431f01e7f892c71f71f7ef6e655 (patch)
tree11fbf058764125e09358fdcc4f778b1cbb3bdf51 /tests-clar
parentd75074f4c02e8d8928d20261a891d94d26d41ea7 (diff)
parent0adfa20aefcd18262214a22042d303721cc7d23a (diff)
downloadlibgit2-3f7c5497c3c93431f01e7f892c71f71f7ef6e655.tar.gz
Merge pull request #938 from nulltoken/topic/is_valid_name
Topic/is valid name
Diffstat (limited to 'tests-clar')
-rw-r--r--tests-clar/network/refspecs.c83
-rw-r--r--tests-clar/refs/create.c2
-rw-r--r--tests-clar/refs/isvalidname.c23
-rw-r--r--tests-clar/refs/lookup.c2
-rw-r--r--tests-clar/refs/normalize.c88
-rw-r--r--tests-clar/refs/read.c4
-rw-r--r--tests-clar/resources/testrepo.git/HEAD_TRACKER (renamed from tests-clar/resources/testrepo.git/head-tracker)0
-rw-r--r--tests-clar/resources/testrepo/.gitted/HEAD_TRACKER (renamed from tests-clar/resources/testrepo/.gitted/head-tracker)0
8 files changed, 177 insertions, 25 deletions
diff --git a/tests-clar/network/refspecs.c b/tests-clar/network/refspecs.c
new file mode 100644
index 000000000..bfe0af48c
--- /dev/null
+++ b/tests-clar/network/refspecs.c
@@ -0,0 +1,83 @@
+#include "clar_libgit2.h"
+#include "refspec.h"
+#include "remote.h"
+
+static void assert_refspec(unsigned int direction, const char *input, bool is_expected_to_be_valid)
+{
+ git_refspec refspec;
+ int error;
+
+ error = git_refspec__parse(&refspec, input, direction == GIT_DIR_FETCH);
+
+ if (is_expected_to_be_valid)
+ cl_assert_equal_i(0, error);
+ else
+ cl_assert_equal_i(GIT_ERROR, error);
+}
+
+void test_network_refspecs__parsing(void)
+{
+ // Ported from https://github.com/git/git/blob/abd2bde78bd994166900290434a2048e660dabed/t/t5511-refspec.sh
+
+ assert_refspec(GIT_DIR_PUSH, "", false);
+ assert_refspec(GIT_DIR_PUSH, ":", true);
+ assert_refspec(GIT_DIR_PUSH, "::", false);
+ assert_refspec(GIT_DIR_PUSH, "+:", true);
+
+ assert_refspec(GIT_DIR_FETCH, "", true);
+ assert_refspec(GIT_DIR_PUSH, ":", true);
+ assert_refspec(GIT_DIR_FETCH, "::", false);
+
+ assert_refspec(GIT_DIR_PUSH, "refs/heads/*:refs/remotes/frotz/*", true);
+ assert_refspec(GIT_DIR_PUSH, "refs/heads/*:refs/remotes/frotz", false);
+ assert_refspec(GIT_DIR_PUSH, "refs/heads:refs/remotes/frotz/*", false);
+ assert_refspec(GIT_DIR_PUSH, "refs/heads/master:refs/remotes/frotz/xyzzy", true);
+
+ /*
+ * These have invalid LHS, but we do not have a formal "valid sha-1
+ * expression syntax checker" so they are not checked with the current
+ * code. They will be caught downstream anyway, but we may want to
+ * have tighter check later...
+ */
+ //assert_refspec(GIT_DIR_PUSH, "refs/heads/master::refs/remotes/frotz/xyzzy", false);
+ //assert_refspec(GIT_DIR_PUSH, "refs/heads/maste :refs/remotes/frotz/xyzzy", false);
+
+ assert_refspec(GIT_DIR_FETCH, "refs/heads/*:refs/remotes/frotz/*", true);
+ assert_refspec(GIT_DIR_FETCH, "refs/heads/*:refs/remotes/frotz", false);
+ assert_refspec(GIT_DIR_FETCH, "refs/heads:refs/remotes/frotz/*", false);
+ assert_refspec(GIT_DIR_FETCH, "refs/heads/master:refs/remotes/frotz/xyzzy", true);
+ assert_refspec(GIT_DIR_FETCH, "refs/heads/master::refs/remotes/frotz/xyzzy", false);
+ assert_refspec(GIT_DIR_FETCH, "refs/heads/maste :refs/remotes/frotz/xyzzy", false);
+
+ assert_refspec(GIT_DIR_PUSH, "master~1:refs/remotes/frotz/backup", true);
+ assert_refspec(GIT_DIR_FETCH, "master~1:refs/remotes/frotz/backup", false);
+ assert_refspec(GIT_DIR_PUSH, "HEAD~4:refs/remotes/frotz/new", true);
+ assert_refspec(GIT_DIR_FETCH, "HEAD~4:refs/remotes/frotz/new", false);
+
+ assert_refspec(GIT_DIR_PUSH, "HEAD", true);
+ assert_refspec(GIT_DIR_FETCH, "HEAD", true);
+ assert_refspec(GIT_DIR_PUSH, "refs/heads/ nitfol", false);
+ assert_refspec(GIT_DIR_FETCH, "refs/heads/ nitfol", false);
+
+ assert_refspec(GIT_DIR_PUSH, "HEAD:", false);
+ assert_refspec(GIT_DIR_FETCH, "HEAD:", true);
+ assert_refspec(GIT_DIR_PUSH, "refs/heads/ nitfol:", false);
+ assert_refspec(GIT_DIR_FETCH, "refs/heads/ nitfol:", false);
+
+ assert_refspec(GIT_DIR_PUSH, ":refs/remotes/frotz/deleteme", true);
+ assert_refspec(GIT_DIR_FETCH, ":refs/remotes/frotz/HEAD-to-me", true);
+ assert_refspec(GIT_DIR_PUSH, ":refs/remotes/frotz/delete me", false);
+ assert_refspec(GIT_DIR_FETCH, ":refs/remotes/frotz/HEAD to me", false);
+
+ assert_refspec(GIT_DIR_FETCH, "refs/heads/*/for-linus:refs/remotes/mine/*-blah", false);
+ assert_refspec(GIT_DIR_PUSH, "refs/heads/*/for-linus:refs/remotes/mine/*-blah", false);
+
+ assert_refspec(GIT_DIR_FETCH, "refs/heads*/for-linus:refs/remotes/mine/*", false);
+ assert_refspec(GIT_DIR_PUSH, "refs/heads*/for-linus:refs/remotes/mine/*", false);
+
+ assert_refspec(GIT_DIR_FETCH, "refs/heads/*/*/for-linus:refs/remotes/mine/*", false);
+ assert_refspec(GIT_DIR_PUSH, "refs/heads/*/*/for-linus:refs/remotes/mine/*", false);
+
+ assert_refspec(GIT_DIR_FETCH, "refs/heads/*/for-linus:refs/remotes/mine/*", true);
+ assert_refspec(GIT_DIR_PUSH, "refs/heads/*/for-linus:refs/remotes/mine/*", true);
+}
diff --git a/tests-clar/refs/create.c b/tests-clar/refs/create.c
index 2e42cb607..af5b203a3 100644
--- a/tests-clar/refs/create.c
+++ b/tests-clar/refs/create.c
@@ -27,7 +27,7 @@ void test_refs_create__symbolic(void)
git_oid id;
git_buf ref_path = GIT_BUF_INIT;
- const char *new_head_tracker = "another-head-tracker";
+ const char *new_head_tracker = "ANOTHER_HEAD_TRACKER";
git_oid_fromstr(&id, current_master_tip);
diff --git a/tests-clar/refs/isvalidname.c b/tests-clar/refs/isvalidname.c
new file mode 100644
index 000000000..99761de32
--- /dev/null
+++ b/tests-clar/refs/isvalidname.c
@@ -0,0 +1,23 @@
+#include "clar_libgit2.h"
+
+void test_refs_isvalidname__can_detect_invalid_formats(void)
+{
+ cl_assert_equal_i(false, git_reference_is_valid_name("refs/tags/0.17.0^{}"));
+ cl_assert_equal_i(false, git_reference_is_valid_name("TWO/LEVELS"));
+ cl_assert_equal_i(false, git_reference_is_valid_name("ONE.LEVEL"));
+ cl_assert_equal_i(false, git_reference_is_valid_name("HEAD/"));
+ cl_assert_equal_i(false, git_reference_is_valid_name("NO_TRAILING_UNDERSCORE_"));
+ cl_assert_equal_i(false, git_reference_is_valid_name("_NO_LEADING_UNDERSCORE"));
+ cl_assert_equal_i(false, git_reference_is_valid_name("HEAD/aa"));
+ cl_assert_equal_i(false, git_reference_is_valid_name("lower_case"));
+ cl_assert_equal_i(false, git_reference_is_valid_name(""));
+}
+
+void test_refs_isvalidname__wont_hopefully_choke_on_valid_formats(void)
+{
+ cl_assert_equal_i(true, git_reference_is_valid_name("refs/tags/0.17.0"));
+ cl_assert_equal_i(true, git_reference_is_valid_name("refs/LEVELS"));
+ cl_assert_equal_i(true, git_reference_is_valid_name("HEAD"));
+ cl_assert_equal_i(true, git_reference_is_valid_name("ONE_LEVEL"));
+ cl_assert_equal_i(true, git_reference_is_valid_name("refs/stash"));
+}
diff --git a/tests-clar/refs/lookup.c b/tests-clar/refs/lookup.c
index ab563ac2b..71ab1b7b8 100644
--- a/tests-clar/refs/lookup.c
+++ b/tests-clar/refs/lookup.c
@@ -25,7 +25,7 @@ void test_refs_lookup__with_resolve(void)
cl_assert(git_reference_cmp(a, b) == 0);
git_reference_free(b);
- cl_git_pass(git_reference_lookup_resolved(&b, g_repo, "head-tracker", 5));
+ cl_git_pass(git_reference_lookup_resolved(&b, g_repo, "HEAD_TRACKER", 5));
cl_assert(git_reference_cmp(a, b) == 0);
git_reference_free(b);
diff --git a/tests-clar/refs/normalize.c b/tests-clar/refs/normalize.c
index 4e80e4b0b..a144ef5c0 100644
--- a/tests-clar/refs/normalize.c
+++ b/tests-clar/refs/normalize.c
@@ -5,9 +5,10 @@
#include "reflog.h"
// Helpers
-static void ensure_refname_normalized(unsigned int flags,
- const char *input_refname,
- const char *expected_refname)
+static void ensure_refname_normalized(
+ unsigned int flags,
+ const char *input_refname,
+ const char *expected_refname)
{
char buffer_out[GIT_REFNAME_MAX];
@@ -38,17 +39,7 @@ void test_refs_normalize__can_normalize_a_direct_reference_name(void)
ensure_refname_normalized(
GIT_REF_FORMAT_NORMAL, "refs/heads/v@ation", "refs/heads/v@ation");
ensure_refname_normalized(
- GIT_REF_FORMAT_NORMAL, "/refs///heads///a", "refs/heads/a");
-}
-
-void test_refs_normalize__can_normalize_some_specific_one_level_direct_reference_names(void)
-{
- ensure_refname_normalized(
- GIT_REF_FORMAT_NORMAL, "HEAD", "HEAD");
- ensure_refname_normalized(
- GIT_REF_FORMAT_NORMAL, "MERGE_HEAD", "MERGE_HEAD");
- ensure_refname_normalized(
- GIT_REF_FORMAT_NORMAL, "FETCH_HEAD", "FETCH_HEAD");
+ GIT_REF_FORMAT_NORMAL, "refs///heads///a", "refs/heads/a");
}
void test_refs_normalize__cannot_normalize_any_direct_reference_name(void)
@@ -62,6 +53,8 @@ void test_refs_normalize__cannot_normalize_any_direct_reference_name(void)
ensure_refname_invalid(
GIT_REF_FORMAT_NORMAL, "");
ensure_refname_invalid(
+ GIT_REF_FORMAT_NORMAL, "/refs/heads/a/");
+ ensure_refname_invalid(
GIT_REF_FORMAT_NORMAL, "refs/heads/a/");
ensure_refname_invalid(
GIT_REF_FORMAT_NORMAL, "refs/heads/a.");
@@ -97,9 +90,9 @@ void test_refs_normalize__symbolic(void)
GIT_REF_FORMAT_ALLOW_ONELEVEL, "///");
ensure_refname_normalized(
- GIT_REF_FORMAT_ALLOW_ONELEVEL, "a", "a");
+ GIT_REF_FORMAT_ALLOW_ONELEVEL, "ALL_CAPS_AND_UNDERSCORES", "ALL_CAPS_AND_UNDERSCORES");
ensure_refname_normalized(
- GIT_REF_FORMAT_ALLOW_ONELEVEL, "a/b", "a/b");
+ GIT_REF_FORMAT_ALLOW_ONELEVEL, "refs/MixedCasing", "refs/MixedCasing");
ensure_refname_normalized(
GIT_REF_FORMAT_ALLOW_ONELEVEL, "refs///heads///a", "refs/heads/a");
@@ -115,7 +108,7 @@ void test_refs_normalize__symbolic(void)
* See https://github.com/spearce/JGit/commit/e4bf8f6957bbb29362575d641d1e77a02d906739 */
void test_refs_normalize__jgit_suite(void)
{
- // tests borrowed from JGit
+ // tests borrowed from JGit
/* EmptyString */
ensure_refname_invalid(
@@ -127,10 +120,9 @@ void test_refs_normalize__jgit_suite(void)
ensure_refname_invalid(
GIT_REF_FORMAT_NORMAL, "master");
ensure_refname_normalized(
- GIT_REF_FORMAT_ALLOW_ONELEVEL, "heads/master", "heads/master");
+ GIT_REF_FORMAT_NORMAL, "heads/master", "heads/master");
/* ValidHead */
-
ensure_refname_normalized(
GIT_REF_FORMAT_ALLOW_ONELEVEL, "refs/heads/master", "refs/heads/master");
ensure_refname_normalized(
@@ -310,7 +302,61 @@ void test_refs_normalize__buffer_has_to_be_big_enough_to_hold_the_normalized_ver
char buffer_out[21];
cl_git_pass(git_reference_normalize_name(
- buffer_out, 21, "//refs//heads/long///name", GIT_REF_FORMAT_NORMAL));
+ buffer_out, 21, "refs//heads///long///name", GIT_REF_FORMAT_NORMAL));
cl_git_fail(git_reference_normalize_name(
- buffer_out, 20, "//refs//heads/long///name", GIT_REF_FORMAT_NORMAL));
+ buffer_out, 20, "refs//heads///long///name", GIT_REF_FORMAT_NORMAL));
+}
+
+#define ONE_LEVEL_AND_REFSPEC \
+ GIT_REF_FORMAT_ALLOW_ONELEVEL \
+ | GIT_REF_FORMAT_REFSPEC_PATTERN
+
+void test_refs_normalize__refspec_pattern(void)
+{
+ ensure_refname_invalid(
+ GIT_REF_FORMAT_REFSPEC_PATTERN, "heads/*foo/bar");
+ ensure_refname_invalid(
+ GIT_REF_FORMAT_REFSPEC_PATTERN, "heads/foo*/bar");
+ ensure_refname_invalid(
+ GIT_REF_FORMAT_REFSPEC_PATTERN, "heads/f*o/bar");
+
+ ensure_refname_invalid(
+ GIT_REF_FORMAT_REFSPEC_PATTERN, "foo");
+ ensure_refname_normalized(
+ ONE_LEVEL_AND_REFSPEC, "FOO", "FOO");
+
+ ensure_refname_normalized(
+ GIT_REF_FORMAT_REFSPEC_PATTERN, "foo/bar", "foo/bar");
+ ensure_refname_normalized(
+ ONE_LEVEL_AND_REFSPEC, "foo/bar", "foo/bar");
+
+ ensure_refname_normalized(
+ GIT_REF_FORMAT_REFSPEC_PATTERN, "*/foo", "*/foo");
+ ensure_refname_normalized(
+ ONE_LEVEL_AND_REFSPEC, "*/foo", "*/foo");
+
+ ensure_refname_normalized(
+ GIT_REF_FORMAT_REFSPEC_PATTERN, "foo/*/bar", "foo/*/bar");
+ ensure_refname_normalized(
+ ONE_LEVEL_AND_REFSPEC, "foo/*/bar", "foo/*/bar");
+
+ ensure_refname_invalid(
+ GIT_REF_FORMAT_REFSPEC_PATTERN, "*");
+ ensure_refname_normalized(
+ ONE_LEVEL_AND_REFSPEC, "*", "*");
+
+ ensure_refname_invalid(
+ GIT_REF_FORMAT_REFSPEC_PATTERN, "foo/*/*");
+ ensure_refname_invalid(
+ ONE_LEVEL_AND_REFSPEC, "foo/*/*");
+
+ ensure_refname_invalid(
+ GIT_REF_FORMAT_REFSPEC_PATTERN, "*/foo/*");
+ ensure_refname_invalid(
+ ONE_LEVEL_AND_REFSPEC, "*/foo/*");
+
+ ensure_refname_invalid(
+ GIT_REF_FORMAT_REFSPEC_PATTERN, "*/*/foo");
+ ensure_refname_invalid(
+ ONE_LEVEL_AND_REFSPEC, "*/*/foo");
}
diff --git a/tests-clar/refs/read.c b/tests-clar/refs/read.c
index f33658754..6ab6bf586 100644
--- a/tests-clar/refs/read.c
+++ b/tests-clar/refs/read.c
@@ -6,7 +6,7 @@
static const char *loose_tag_ref_name = "refs/tags/e90810b";
static const char *non_existing_tag_ref_name = "refs/tags/i-do-not-exist";
-static const char *head_tracker_sym_ref_name = "head-tracker";
+static const char *head_tracker_sym_ref_name = "HEAD_TRACKER";
static const char *current_head_target = "refs/heads/master";
static const char *current_master_tip = "a65fedf39aefe402d3bb6e24df4d4f5fe4547750";
static const char *packed_head_name = "refs/heads/packed";
@@ -221,7 +221,7 @@ void test_refs_read__unfound_return_ENOTFOUND(void)
{
git_reference *reference;
- cl_assert_equal_i(GIT_ENOTFOUND, git_reference_lookup(&reference, g_repo, "test/master"));
+ cl_assert_equal_i(GIT_ENOTFOUND, git_reference_lookup(&reference, g_repo, "TEST_MASTER"));
cl_assert_equal_i(GIT_ENOTFOUND, git_reference_lookup(&reference, g_repo, "refs/test/master"));
cl_assert_equal_i(GIT_ENOTFOUND, git_reference_lookup(&reference, g_repo, "refs/tags/test/master"));
cl_assert_equal_i(GIT_ENOTFOUND, git_reference_lookup(&reference, g_repo, "refs/tags/test/farther/master"));
diff --git a/tests-clar/resources/testrepo.git/head-tracker b/tests-clar/resources/testrepo.git/HEAD_TRACKER
index 40d876b4c..40d876b4c 100644
--- a/tests-clar/resources/testrepo.git/head-tracker
+++ b/tests-clar/resources/testrepo.git/HEAD_TRACKER
diff --git a/tests-clar/resources/testrepo/.gitted/head-tracker b/tests-clar/resources/testrepo/.gitted/HEAD_TRACKER
index 40d876b4c..40d876b4c 100644
--- a/tests-clar/resources/testrepo/.gitted/head-tracker
+++ b/tests-clar/resources/testrepo/.gitted/HEAD_TRACKER