1#!/bin/sh 2 3test_description='help' 4 5. ./test-lib.sh 6 7configure_help () { 8 test_config help.format html && 9 10 # Unless the path has "://" in it, Git tries to make sure 11 # the documentation directory locally exists. Avoid it as 12 # we are only interested in seeing an attempt to correctly 13 # invoke a help browser in this test. 14 test_config help.htmlpath test://html && 15 16 # Name a custom browser 17 test_config browser.test.cmd ./test-browser && 18 test_config help.browser test 19} 20 21test_expect_success "setup" ' 22 # Just write out which page gets requested 23 write_script test-browser <<-\EOF 24 echo "$*" >test-browser.log 25 EOF 26' 27 28# make sure to exercise these code paths, the output is a bit tricky 29# to verify 30test_expect_success 'basic help commands' ' 31 git help >/dev/null && 32 git help -a --no-verbose >/dev/null && 33 git help -g >/dev/null && 34 git help -a >/dev/null 35' 36 37test_expect_success 'invalid usage' ' 38 test_expect_code 129 git help -g add && 39 test_expect_code 129 git help -a -c && 40 41 test_expect_code 129 git help -g add && 42 test_expect_code 129 git help -a -g && 43 44 test_expect_code 129 git help -g -c && 45 test_expect_code 129 git help --config-for-completion add && 46 test_expect_code 129 git help --config-sections-for-completion add 47' 48 49test_expect_success "works for commands and guides by default" ' 50 configure_help && 51 git help status && 52 echo "test://html/git-status.html" >expect && 53 test_cmp expect test-browser.log && 54 git help revisions && 55 echo "test://html/gitrevisions.html" >expect && 56 test_cmp expect test-browser.log 57' 58 59test_expect_success "--exclude-guides does not work for guides" ' 60 >test-browser.log && 61 test_must_fail git help --exclude-guides revisions && 62 test_must_be_empty test-browser.log 63' 64 65test_expect_success "--help does not work for guides" " 66 cat <<-EOF >expect && 67 git: 'revisions' is not a git command. See 'git --help'. 68 EOF 69 test_must_fail git revisions --help 2>actual && 70 test_cmp expect actual 71" 72 73test_expect_success 'git help' ' 74 git help >help.output && 75 test_i18ngrep "^ clone " help.output && 76 test_i18ngrep "^ add " help.output && 77 test_i18ngrep "^ log " help.output && 78 test_i18ngrep "^ commit " help.output && 79 test_i18ngrep "^ fetch " help.output 80' 81test_expect_success 'git help -g' ' 82 git help -g >help.output && 83 test_i18ngrep "^ attributes " help.output && 84 test_i18ngrep "^ everyday " help.output && 85 test_i18ngrep "^ tutorial " help.output 86' 87 88test_expect_success 'git help fails for non-existing html pages' ' 89 configure_help && 90 mkdir html-empty && 91 test_must_fail git -c help.htmlpath=html-empty help status && 92 test_must_be_empty test-browser.log 93' 94 95test_expect_success 'git help succeeds without git.html' ' 96 configure_help && 97 mkdir html-with-docs && 98 touch html-with-docs/git-status.html && 99 git -c help.htmlpath=html-with-docs help status && 100 echo "html-with-docs/git-status.html" >expect && 101 test_cmp expect test-browser.log 102' 103 104test_expect_success 'git help -c' ' 105 git help -c >help.output && 106 cat >expect <<-\EOF && 107 108 '\''git help config'\'' for more information 109 EOF 110 grep -v -E \ 111 -e "^[^.]+\.[^.]+$" \ 112 -e "^[^.]+\.[^.]+\.[^.]+$" \ 113 help.output >actual && 114 test_cmp expect actual 115' 116 117test_expect_success 'git help --config-for-completion' ' 118 git help -c >human && 119 grep -E \ 120 -e "^[^.]+\.[^.]+$" \ 121 -e "^[^.]+\.[^.]+\.[^.]+$" human | 122 sed -e "s/\*.*//" -e "s/<.*//" | 123 sort -u >human.munged && 124 125 git help --config-for-completion >vars && 126 test_cmp human.munged vars 127' 128 129test_expect_success 'git help --config-sections-for-completion' ' 130 git help -c >human && 131 grep -E \ 132 -e "^[^.]+\.[^.]+$" \ 133 -e "^[^.]+\.[^.]+\.[^.]+$" human | 134 sed -e "s/\..*//" | 135 sort -u >human.munged && 136 137 git help --config-sections-for-completion >sections && 138 test_cmp human.munged sections 139' 140 141test_expect_success 'generate builtin list' ' 142 git --list-cmds=builtins >builtins 143' 144 145while read builtin 146do 147 test_expect_success "$builtin can handle -h" ' 148 test_expect_code 129 git $builtin -h >output 2>&1 && 149 test_i18ngrep usage output 150 ' 151done <builtins 152 153test_done 154