(command.CommandList children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:test_description) op: assign_op.Equal rhs: {(SQ <'Test custom diff function name patterns'>)} spids: [13] ) ] ) (C {<.>} {<./test-lib.sh>}) (C {<test_expect_success>} {(SQ <setup>)} { (SQ <'\n'> <'\t# a non-trivial custom pattern\n'> <'\tgit config diff.custom1.funcname "!static\n'> <'!String\n'> <'[^ \t].*s.*" &&\n'> <'\n'> <'\t# a custom pattern which matches to end of line\n'> <'\tgit config diff.custom2.funcname "......Beer\\$" &&\n'> <'\n'> <'\t# alternation in pattern\n'> <'\tgit config diff.custom3.funcname "Beer$" &&\n'> <'\tgit config diff.custom3.xfuncname "^[ \t]*((public|static).*)$" &&\n'> <'\n'> <'\t# for regexp compilation tests\n'> <'\techo A >A.java &&\n'> <'\techo B >B.java\n'> ) } ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:diffpatterns) op: assign_op.Equal rhs: { (DQ <'\n'> <'\tada\n'> <'\tbibtex\n'> <'\tcpp\n'> <'\tcsharp\n'> <'\tcss\n'> <'\tfortran\n'> <'\tfountain\n'> <'\thtml\n'> <'\tjava\n'> <'\tmatlab\n'> <'\tobjc\n'> <'\tpascal\n'> <'\tperl\n'> <'\tphp\n'> <'\tpython\n'> <'\truby\n'> <'\ttex\n'> <'\tcustom1\n'> <'\tcustom2\n'> <'\tcustom3\n'> ) } spids: [50] ) ] ) (command.ForEach iter_name: p iter_words: [{($ Id.VSub_DollarName '$diffpatterns')}] do_arg_iter: F body: (command.DoGroup children: [ (C {<test_expect_success>} {(DQ <'builtin '> ($ Id.VSub_DollarName '$p') <' pattern compiles'>)} { (SQ <'\n'> <'\t\techo "*.java diff=$p" >.gitattributes &&\n'> <'\t\ttest_expect_code 1 git diff --no-index \\\n'> <'\t\t\tA.java B.java 2>msg &&\n'> <'\t\ttest_i18ngrep ! fatal msg &&\n'> <'\t\ttest_i18ngrep ! error msg\n'> <'\t'> ) } ) (C {<test_expect_success>} {(DQ <'builtin '> ($ Id.VSub_DollarName '$p') <' wordRegex pattern compiles'>)} { (SQ <'\n'> <'\t\techo "*.java diff=$p" >.gitattributes &&\n'> <'\t\ttest_expect_code 1 git diff --no-index --word-diff \\\n'> <'\t\t\tA.java B.java 2>msg &&\n'> <'\t\ttest_i18ngrep ! fatal msg &&\n'> <'\t\ttest_i18ngrep ! error msg\n'> <'\t'> ) } ) ] ) ) (C {<test_expect_success>} {(SQ <'last regexp must not be negated'>)} { (SQ <'\n'> <'\techo "*.java diff=java" >.gitattributes &&\n'> <'\ttest_config diff.java.funcname "!static" &&\n'> <'\ttest_expect_code 128 git diff --no-index A.java B.java 2>msg &&\n'> <'\ttest_i18ngrep ": Last expression must not be negated:" msg\n'> ) } ) (C {<test_expect_success>} {(SQ <'setup hunk header tests'>)} { (SQ <'\n'> <'\tfor i in $diffpatterns\n'> <'\tdo\n'> <'\t\techo "$i-* diff=$i"\n'> <'\tdone > .gitattributes &&\n'> <'\n'> <'\t# add all test files to the index\n'> <'\t(\n'> <'\t\tcd "$TEST_DIRECTORY"/t4018 &&\n'> <'\t\tgit --git-dir="$TRASH_DIRECTORY/.git" add .\n'> <'\t) &&\n'> <'\n'> <'\t# place modified files in the worktree\n'> <'\tfor i in $(git ls-files)\n'> <'\tdo\n'> <'\t\tsed -e "s/ChangeMe/IWasChanged/" <"$TEST_DIRECTORY/t4018/$i" >"$i" || return 1\n'> <'\tdone\n'> ) } ) (command.ForEach iter_name: i iter_words: [ { (command_sub left_token: <Id.Left_DollarParen '$('> command_list: (command.CommandList children:[(C {<git>} {<ls-files>})]) ) } ] do_arg_iter: F body: (command.DoGroup children: [ (command.If arms: [ (if_arm cond: [ (command.Simple words: [{<grep>} {<broken>} {(DQ ($ Id.VSub_DollarName '$i'))}] redirects: [ (redir.Redir op: <Id.Redir_Great '>'> fd: -1 arg_word: {</dev/null>} ) (redir.Redir op: <Id.Redir_GreatAnd '2>&'> fd: 2 arg_word: {<1>} ) ] ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:result) op: assign_op.Equal rhs: {<failure>} spids: [207] ) ] ) ] spids: [187 204] ) ] else_action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:result) op: assign_op.Equal rhs: {<success>} spids: [214] ) ] ) ] ) (C {<test_expect_> ($ Id.VSub_DollarName '$result')} {(DQ <'hunk header: '> ($ Id.VSub_DollarName '$i'))} { (DQ <'\n'> <"\t\ttest_when_finished 'cat actual' &&\t# for debugging only\n"> <'\t\tgit diff -U1 '> ($ Id.VSub_DollarName '$i') <' >actual &&\n'> <"\t\tgrep '@@ .* @@.*RIGHT' actual\n"> <'\t'> ) } ) ] ) ) (C {<test_done>}) ] )