From: "SZEDER Gábor" <szeder@ira.uka.de>
To: Junio C Hamano <gitster@pobox.com>
Cc: "Jeff King" <peff@peff.net>,
"Sebastian Schuberth" <sschuberth@gmail.com>,
git@vger.kernel.org, "SZEDER Gábor" <szeder@ira.uka.de>
Subject: [PATCH 06/21] completion tests: add tests for the __git_refs() helper function
Date: Thu, 25 Feb 2016 23:50:35 +0100 [thread overview]
Message-ID: <1456440650-32623-7-git-send-email-szeder@ira.uka.de> (raw)
In-Reply-To: <1456440650-32623-1-git-send-email-szeder@ira.uka.de>
Check how __git_refs() lists refs in different scenarios, i.e.
- short and full refs,
- from a local or from a remote repository,
- remote specified via path, name or URL,
- with or without a repository specified on the command line,
- non-existing remote,
- unique remote branches for 'git checkout's tracking DWIMery,
- not in a git repository, and
- interesting combinations of the above.
Seven of these tests expect failure, mostly demonstrating bugs related
to listing refs from a remote repository:
- ignoring the repository specified on the command line (2 tests),
- listing refs from the wrong place when the name of a configured
remote happens to match a directory,
- listing only 'HEAD' but no short refs from a remote given as URL,
- listing 'HEAD' even from non-existing remotes (2 tests), and
- listing 'HEAD' when not in a repository.
Signed-off-by: SZEDER Gábor <szeder@ira.uka.de>
---
t/t9902-completion.sh | 266 ++++++++++++++++++++++++++++++++++++++++++++++++--
1 file changed, 257 insertions(+), 9 deletions(-)
diff --git a/t/t9902-completion.sh b/t/t9902-completion.sh
index 1e8794747efd..7ab398568594 100755
--- a/t/t9902-completion.sh
+++ b/t/t9902-completion.sh
@@ -370,6 +370,263 @@ test_expect_success '__git_remotes - list remotes from $GIT_DIR/remotes and from
test_cmp expect actual
'
+test_expect_success 'setup for ref completion' '
+ echo content >file1 &&
+ echo more >file2 &&
+ git add file1 file2 &&
+ git commit -m one &&
+ git branch mybranch &&
+ git tag mytag &&
+ (
+ cd otherrepo &&
+ >file &&
+ git add file &&
+ git commit -m initial &&
+ git branch branch
+ ) &&
+ git remote add remote "$ROOT/otherrepo/.git" &&
+ git update-ref refs/remotes/remote/branch master &&
+ git update-ref refs/remotes/remote/master master &&
+ git init thirdrepo
+'
+
+test_expect_success '__git_refs - simple' '
+ cat >expected <<-EOF &&
+ HEAD
+ master
+ mybranch
+ remote/branch
+ remote/master
+ mytag
+ EOF
+ (
+ cur= &&
+ __git_refs >"$actual"
+ ) &&
+ test_cmp expected "$actual"
+'
+
+test_expect_success '__git_refs - full refs' '
+ cat >expected <<-EOF &&
+ refs/heads/master
+ refs/heads/mybranch
+ EOF
+ (
+ cur=refs/heads/ &&
+ __git_refs >"$actual"
+ ) &&
+ test_cmp expected "$actual"
+'
+
+test_expect_success '__git_refs - repo given on the command line' '
+ cat >expected <<-EOF &&
+ HEAD
+ branch
+ master
+ EOF
+ (
+ __git_dir="$ROOT/otherrepo/.git" &&
+ cur= &&
+ __git_refs >"$actual"
+ ) &&
+ test_cmp expected "$actual"
+'
+
+test_expect_success '__git_refs - remote on local file system' '
+ cat >expected <<-EOF &&
+ HEAD
+ branch
+ master
+ EOF
+ (
+ cur= &&
+ __git_refs otherrepo >"$actual"
+ ) &&
+ test_cmp expected "$actual"
+'
+
+test_expect_success '__git_refs - remote on local file system - full refs' '
+ cat >expected <<-EOF &&
+ refs/heads/branch
+ refs/heads/master
+ EOF
+ (
+ cur=refs/heads/ &&
+ __git_refs otherrepo >"$actual"
+ ) &&
+ test_cmp expected "$actual"
+'
+
+test_expect_success '__git_refs - configured remote' '
+ cat >expected <<-EOF &&
+ HEAD
+ branch
+ master
+ EOF
+ (
+ cur= &&
+ __git_refs remote >"$actual"
+ ) &&
+ test_cmp expected "$actual"
+'
+
+test_expect_success '__git_refs - configured remote - full refs' '
+ cat >expected <<-EOF &&
+ refs/heads/branch
+ refs/heads/master
+ EOF
+ (
+ cur=refs/heads/ &&
+ __git_refs remote >"$actual"
+ ) &&
+ test_cmp expected "$actual"
+'
+
+test_expect_failure '__git_refs - configured remote - repo given on the command line' '
+ cat >expected <<-EOF &&
+ HEAD
+ branch
+ master
+ EOF
+ (
+ cd thirdrepo &&
+ __git_dir="$ROOT/.git" &&
+ cur= &&
+ __git_refs remote >"$actual"
+ ) &&
+ test_cmp expected "$actual"
+'
+
+test_expect_failure '__git_refs - configured remote - full refs - repo given on the command line' '
+ cat >expected <<-EOF &&
+ refs/heads/branch
+ refs/heads/master
+ EOF
+ (
+ cd thirdrepo &&
+ __git_dir="$ROOT/.git" &&
+ cur=refs/heads/ &&
+ __git_refs remote >"$actual"
+ ) &&
+ test_cmp expected "$actual"
+'
+
+test_expect_failure '__git_refs - configured remote - remote name matches a directory' '
+ cat >expected <<-EOF &&
+ HEAD
+ branch
+ master
+ EOF
+ mkdir remote &&
+ test_when_finished "rm -rf remote" &&
+ (
+ cur= &&
+ __git_refs remote >"$actual"
+ ) &&
+ test_cmp expected "$actual"
+'
+
+test_expect_failure '__git_refs - URL remote' '
+ cat >expected <<-EOF &&
+ HEAD
+ branch
+ master
+ EOF
+ (
+ cur= &&
+ __git_refs "file://$ROOT/otherrepo/.git" >"$actual"
+ ) &&
+ test_cmp expected "$actual"
+'
+
+test_expect_success '__git_refs - URL remote - full refs' '
+ cat >expected <<-EOF &&
+ refs/heads/branch
+ refs/heads/master
+ EOF
+ (
+ cur=refs/heads/ &&
+ __git_refs "file://$ROOT/otherrepo/.git" >"$actual"
+ ) &&
+ test_cmp expected "$actual"
+'
+
+test_expect_failure '__git_refs - non-existing remote' '
+ (
+ cur= &&
+ __git_refs non-existing >"$actual"
+ ) &&
+ test_must_be_empty "$actual"
+'
+
+test_expect_success '__git_refs - non-existing remote - full refs' '
+ (
+ cur=refs/heads/ &&
+ __git_refs non-existing >"$actual"
+ ) &&
+ test_must_be_empty "$actual"
+'
+
+test_expect_failure '__git_refs - non-existing URL remote' '
+ (
+ cur= &&
+ __git_refs "file://$ROOT/non-existing" >"$actual"
+ ) &&
+ test_must_be_empty "$actual"
+'
+
+test_expect_success '__git_refs - non-existing URL remote - full refs' '
+ (
+ cur=refs/heads/ &&
+ __git_refs "file://$ROOT/non-existing" >"$actual"
+ ) &&
+ test_must_be_empty "$actual"
+'
+
+test_expect_success '__git_refs - unique remote branches for git checkout DWIMery' '
+ cat >expected <<-EOF &&
+ HEAD
+ master
+ mybranch
+ otherremote/ambiguous
+ otherremote/otherbranch
+ remote/ambiguous
+ remote/branch
+ remote/master
+ mytag
+ branch
+ master
+ otherbranch
+ EOF
+ for remote_ref in refs/remotes/remote/ambiguous \
+ refs/remotes/otherremote/ambiguous \
+ refs/remotes/otherremote/otherbranch
+ do
+ git update-ref $remote_ref master &&
+ test_when_finished "git update-ref -d $remote_ref"
+ done &&
+ (
+ cur= &&
+ __git_refs "" 1 >"$actual"
+ ) &&
+ test_cmp expected "$actual"
+'
+
+test_expect_failure '__git_refs - not in a git repository' '
+ (
+ GIT_CEILING_DIRECTORIES="$ROOT" &&
+ export GIT_CEILING_DIRECTORIES &&
+ cd subdir &&
+ cur= &&
+ __git_refs >"$actual"
+ ) &&
+ test_must_be_empty "$actual"
+'
+
+test_expect_success 'remove configured remote used for refs completion' '
+ git remote remove remote
+'
+
test_expect_success '__git_get_config_variables' '
cat >expect <<-EOF &&
name-1
@@ -488,15 +745,6 @@ test_expect_success 'git --help completion' '
test_completion "git --help core" "core-tutorial "
'
-test_expect_success 'setup for ref completion' '
- echo content >file1 &&
- echo more >file2 &&
- git add file1 file2 &&
- git commit -m one &&
- git branch mybranch &&
- git tag mytag
-'
-
test_expect_success 'checkout completes ref names' '
test_completion "git checkout m" <<-\EOF
master Z
--
2.7.2.410.g92cb358
next prev parent reply other threads:[~2016-02-25 22:52 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-02-25 22:50 [PATCH 00/21] completion: __gitdir()-related improvements SZEDER Gábor
2016-02-25 22:50 ` [PATCH 01/21] completion: improve __git_refs()'s in-code documentation SZEDER Gábor
2016-02-25 22:50 ` [PATCH 02/21] completion tests: don't add test cruft to the test repository SZEDER Gábor
2016-02-25 22:50 ` [PATCH 03/21] completion tests: make the $cur variable local to the test helper functions SZEDER Gábor
2016-02-25 22:50 ` [PATCH 04/21] completion tests: consolidate getting path of current working directory SZEDER Gábor
2016-02-25 22:50 ` [PATCH 05/21] completion tests: check __gitdir()'s output in the error cases SZEDER Gábor
2016-02-25 22:50 ` SZEDER Gábor [this message]
2016-02-25 22:50 ` [PATCH 07/21] completion: ensure that the repository path given on the command line exists SZEDER Gábor
2016-02-25 22:50 ` [PATCH 08/21] completion: fix most spots not respecting 'git --git-dir=<path>' SZEDER Gábor
2016-02-25 22:50 ` [PATCH 09/21] completion: respect 'git --git-dir=<path>' when listing remote refs SZEDER Gábor
2016-02-25 22:50 ` [PATCH 10/21] completion: list refs from remote when remote's name matches a directory SZEDER Gábor
2016-02-25 22:50 ` [PATCH 11/21] completion: don't list 'HEAD' when trying refs completion outside of a repo SZEDER Gábor
2016-02-25 22:50 ` [PATCH 12/21] completion: list short refs from a remote given as a URL SZEDER Gábor
2016-02-25 22:50 ` [PATCH 13/21] rev-parse: add '--absolute-git-dir' option SZEDER Gábor
2016-04-26 2:33 ` Mike Rappazzo
2016-04-26 5:35 ` Jeff King
2016-05-18 16:58 ` SZEDER Gábor
2016-02-25 22:50 ` [PATCH 14/21] completion: don't offer commands when 'git --opt' needs an argument SZEDER Gábor
2016-02-25 22:50 ` [PATCH 15/21] completion: fix completion after 'git -C <path>' SZEDER Gábor
2016-02-25 22:50 ` [PATCH 16/21] completion: respect " SZEDER Gábor
2016-02-25 22:50 ` [PATCH 17/21] completion: don't use __gitdir() for git commands SZEDER Gábor
2016-02-25 22:50 ` [PATCH 18/21] completion: consolidate silencing errors from " SZEDER Gábor
2016-02-25 22:50 ` [PATCH 19/21] completion: don't guard git executions with __gitdir() SZEDER Gábor
2016-02-25 22:50 ` [PATCH 20/21] completion: extract repository discovery from __gitdir() SZEDER Gábor
2016-02-25 22:50 ` [PATCH 21/21] completion: cache the path to the repository SZEDER Gábor
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: http://vger.kernel.org/majordomo-info.html
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1456440650-32623-7-git-send-email-szeder@ira.uka.de \
--to=szeder@ira.uka.de \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=peff@peff.net \
--cc=sschuberth@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://80x24.org/mirrors/git.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).