(command.CommandList children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:test_description) op: assign_op.Equal rhs: {(SQ (Token id:Id.Lit_Chars val:'Test custom diff function name patterns' span_id:15))} spids: [13] ) ] ) (C {(.)} {(./test-lib.sh)}) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:setup span_id:27))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:31) (Token id:Id.Lit_Chars val:'\t# a non-trivial custom pattern\n' span_id:32) (Token id:Id.Lit_Chars val:'\tgit config diff.custom1.funcname "!static\n' span_id:33) (Token id:Id.Lit_Chars val:'!String\n' span_id:34) (Token id:Id.Lit_Chars val:'[^ \t].*s.*" &&\n' span_id:35) (Token id:Id.Lit_Chars val:'\n' span_id:36) (Token id: Id.Lit_Chars val: '\t# a custom pattern which matches to end of line\n' span_id: 37 ) (Token id:Id.Lit_Chars val:'\tgit config diff.custom2.funcname "......Beer\\$" &&\n' span_id:38) (Token id:Id.Lit_Chars val:'\n' span_id:39) (Token id:Id.Lit_Chars val:'\t# alternation in pattern\n' span_id:40) (Token id: Id.Lit_Chars val: '\tgit config diff.custom3.funcname "Beer$" &&\n' span_id: 41 ) (Token id: Id.Lit_Chars val: '\tgit config diff.custom3.xfuncname "^[ \t]*((public|static).*)$" &&\n' span_id: 42 ) (Token id:Id.Lit_Chars val:'\n' span_id:43) (Token id:Id.Lit_Chars val:'\t# for regexp compilation tests\n' span_id:44) (Token id:Id.Lit_Chars val:'\techo A >A.java &&\n' span_id:45) (Token id:Id.Lit_Chars val:'\techo B >B.java\n' span_id:46) ) } ) (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 (Token id:Id.Lit_Chars val:'\n' span_id:96) (Token id: Id.Lit_Chars val: '\t\techo "*.java diff=$p" >.gitattributes &&\n' span_id: 97 ) (Token id:Id.Lit_Chars val:'\t\ttest_expect_code 1 git diff --no-index \\\n' span_id:98) (Token id: Id.Lit_Chars val: '\t\t\tA.java B.java 2>msg &&\n' span_id: 99 ) (Token id:Id.Lit_Chars val:'\t\ttest_i18ngrep ! fatal msg &&\n' span_id:100) (Token id: Id.Lit_Chars val: '\t\ttest_i18ngrep ! error msg\n' span_id: 101 ) (Token id:Id.Lit_Chars val:'\t' span_id:102) ) } ) (C {(test_expect_success)} {(DQ ('builtin ') ($ Id.VSub_DollarName '$p') (' wordRegex pattern compiles'))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:115) (Token id: Id.Lit_Chars val: '\t\techo "*.java diff=$p" >.gitattributes &&\n' span_id: 116 ) (Token id:Id.Lit_Chars val:'\t\ttest_expect_code 1 git diff --no-index --word-diff \\\n' span_id:117) (Token id: Id.Lit_Chars val: '\t\t\tA.java B.java 2>msg &&\n' span_id: 118 ) (Token id:Id.Lit_Chars val:'\t\ttest_i18ngrep ! fatal msg &&\n' span_id:119) (Token id: Id.Lit_Chars val: '\t\ttest_i18ngrep ! error msg\n' span_id: 120 ) (Token id:Id.Lit_Chars val:'\t' span_id:121) ) } ) ] ) ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'last regexp must not be negated' span_id:130))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:134) (Token id: Id.Lit_Chars val: '\techo "*.java diff=java" >.gitattributes &&\n' span_id: 135 ) (Token id:Id.Lit_Chars val:'\ttest_config diff.java.funcname "!static" &&\n' span_id:136) (Token id: Id.Lit_Chars val: '\ttest_expect_code 128 git diff --no-index A.java B.java 2>msg &&\n' span_id: 137 ) (Token id: Id.Lit_Chars val: '\ttest_i18ngrep ": Last expression must not be negated:" msg\n' span_id: 138 ) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'setup hunk header tests' span_id:145))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:149) (Token id:Id.Lit_Chars val:'\tfor i in $diffpatterns\n' span_id:150) (Token id:Id.Lit_Chars val:'\tdo\n' span_id:151) (Token id:Id.Lit_Chars val:'\t\techo "$i-* diff=$i"\n' span_id:152) (Token id:Id.Lit_Chars val:'\tdone > .gitattributes &&\n' span_id:153) (Token id:Id.Lit_Chars val:'\n' span_id:154) (Token id:Id.Lit_Chars val:'\t# add all test files to the index\n' span_id:155) (Token id:Id.Lit_Chars val:'\t(\n' span_id:156) (Token id:Id.Lit_Chars val:'\t\tcd "$TEST_DIRECTORY"/t4018 &&\n' span_id:157) (Token id: Id.Lit_Chars val: '\t\tgit --git-dir="$TRASH_DIRECTORY/.git" add .\n' span_id: 158 ) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:159) (Token id:Id.Lit_Chars val:'\n' span_id:160) (Token id: Id.Lit_Chars val: '\t# place modified files in the worktree\n' span_id: 161 ) (Token id:Id.Lit_Chars val:'\tfor i in $(git ls-files)\n' span_id:162) (Token id:Id.Lit_Chars val:'\tdo\n' span_id:163) (Token id: Id.Lit_Chars val: '\t\tsed -e "s/ChangeMe/IWasChanged/" <"$TEST_DIRECTORY/t4018/$i" >"$i" || return 1\n' span_id: 164 ) (Token id:Id.Lit_Chars val:'\tdone\n' span_id:165) ) } ) (command.ForEach iter_name: i iter_words: [ { (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:178) 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: (Token id:Id.Redir_Great val:'>' span_id:197) fd: -1 arg_word: {(/dev/null)} ) (redir.Redir op: (Token id:Id.Redir_GreatAnd val:'2>&' span_id:200) 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)}) ] )