(command.CommandList
  children: [
    (command.ShAssignment
      left: <Id.Lit_VarLike 'test_description='>
      pairs: [
        (AssignPair
          left: <Id.Lit_VarLike 'test_description='>
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'test_description='> name:test_description)
          op: assign_op.Equal
          rhs: {(SQ <'diff whitespace error detection'>)}
        )
      ]
      redirects: []
    )
    (command.Simple
      blame_tok: <.>
      more_env: []
      words: [{<.>} {<'./test-lib.sh'>}]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {<setup>}
        {
          (SQ <'\n'> <'\n'> <'\tgit config diff.color.whitespace "blue reverse" &&\n'> <'\t>F &&\n'> 
            <'\tgit add F &&\n'> <'\techo "         Eight SP indent" >>F &&\n'> <'\techo " \tHT and SP indent" >>F &&\n'> 
            <'\techo "With trailing SP " >>F &&\n'> <'\techo "Carriage ReturnQ" | tr Q "\\015" >>F &&\n'> <'\techo "No problem" >>F &&\n'> <'\techo >>F\n'> 
            <'\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Sentence
      child: 
        (command.ShAssignment
          left: <Id.Lit_VarLike 'blue_grep='>
          pairs: [
            (AssignPair
              left: <Id.Lit_VarLike 'blue_grep='>
              lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'blue_grep='> name:blue_grep)
              op: assign_op.Equal
              rhs: {(SQ <'7;34m'>)}
            )
          ]
          redirects: []
        )
      terminator: <Id.Op_Semi _>
    )
    (command.Simple
      blame_tok: <printf>
      more_env: []
      words: [
        {<printf>}
        {(DQ <Id.Lit_BadBackslash '\\'> <'033[%s'>)}
        {(DQ ($ Id.VSub_DollarName blue_grep))}
      ]
      redirects: [(Redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<check-grep>})]
      do_fork: T
    )
    (command.If
      if_kw: <Id.KW_If if>
      arms: [
        (IfArm
          keyword: <Id.KW_If if>
          cond: 
            (condition.Shell
              commands: [
                (command.Subshell
                  left: <Id.Op_LParen _>
                  child: 
                    (command.Pipeline
                      children: [
                        (command.Simple
                          blame_tok: <grep>
                          more_env: []
                          words: [{<grep>} {(DQ ($ Id.VSub_DollarName blue_grep))}]
                          redirects: [
                            (Redir
                              op: <Id.Redir_Less '<'>
                              loc: (redir_loc.Fd fd:0)
                              arg: {<check-grep>}
                            )
                          ]
                          do_fork: T
                        )
                        (command.Simple
                          blame_tok: <grep>
                          more_env: []
                          words: [{<grep>} {(DQ ($ Id.VSub_DollarName blue_grep))}]
                          redirects: []
                          do_fork: T
                        )
                      ]
                      ops: [<Id.Op_Pipe _>]
                    )
                  right: <Id.Right_Subshell _>
                  redirects: [
                    (Redir
                      op: <Id.Redir_Great '>'>
                      loc: (redir_loc.Fd fd:1)
                      arg: {<'/dev/null'>}
                    )
                    (Redir
                      op: <Id.Redir_GreatAnd '2>&'>
                      loc: (redir_loc.Fd fd:2)
                      arg: {<1>}
                    )
                  ]
                )
              ]
            )
          then_kw: <Id.KW_Then then>
          action: [
            (command.ShAssignment
              left: <Id.Lit_VarLike 'grep_a='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'grep_a='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'grep_a='> name:grep_a)
                  op: assign_op.Equal
                  rhs: {<grep>}
                )
              ]
              redirects: []
            )
          ]
          spids: [59 86]
        )
        (IfArm
          keyword: <Id.KW_Elif elif>
          cond: 
            (condition.Shell
              commands: [
                (command.Subshell
                  left: <Id.Op_LParen _>
                  child: 
                    (command.Pipeline
                      children: [
                        (command.Simple
                          blame_tok: <grep>
                          more_env: []
                          words: [{<grep>} {<-a>} {(DQ ($ Id.VSub_DollarName blue_grep))}]
                          redirects: [
                            (Redir
                              op: <Id.Redir_Less '<'>
                              loc: (redir_loc.Fd fd:0)
                              arg: {<check-grep>}
                            )
                          ]
                          do_fork: T
                        )
                        (command.Simple
                          blame_tok: <grep>
                          more_env: []
                          words: [{<grep>} {<-a>} {(DQ ($ Id.VSub_DollarName blue_grep))}]
                          redirects: []
                          do_fork: T
                        )
                      ]
                      ops: [<Id.Op_Pipe _>]
                    )
                  right: <Id.Right_Subshell _>
                  redirects: [
                    (Redir
                      op: <Id.Redir_Great '>'>
                      loc: (redir_loc.Fd fd:1)
                      arg: {<'/dev/null'>}
                    )
                    (Redir
                      op: <Id.Redir_GreatAnd '2>&'>
                      loc: (redir_loc.Fd fd:2)
                      arg: {<1>}
                    )
                  ]
                )
              ]
            )
          then_kw: <Id.KW_Then then>
          action: [
            (command.ShAssignment
              left: <Id.Lit_VarLike 'grep_a='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'grep_a='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'grep_a='> name:grep_a)
                  op: assign_op.Equal
                  rhs: {(SQ <'grep -a'>)}
                )
              ]
              redirects: []
            )
          ]
          spids: [92 123]
        )
      ]
      else_kw: <Id.KW_Else else>
      else_action: [
        (command.Sentence
          child: 
            (command.ShAssignment
              left: <Id.Lit_VarLike 'grep_a='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'grep_a='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'grep_a='> name:grep_a)
                  op: assign_op.Equal
                  rhs: {<grep>}
                )
              ]
              redirects: []
            )
          terminator: <Id.Op_Semi _>
        )
      ]
      fi_kw: <Id.KW_Fi fi>
      redirects: []
    )
    (command.Simple
      blame_tok: <rm>
      more_env: []
      words: [{<rm>} {<-f>} {<check-grep>}]
      redirects: []
      do_fork: T
    )
    (command.ShFunction
      name_tok: <prepare_output>
      name: prepare_output
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <git>
              more_env: []
              words: [{<git>} {<diff>} {<--color>}]
              redirects: [(Redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<output>})]
              do_fork: T
            )
            (command.Simple
              blame_tok: <Id.VSub_DollarName '$grep_a'>
              more_env: []
              words: [{($ Id.VSub_DollarName grep_a)} {(DQ ($ Id.VSub_DollarName blue_grep))} {<output>}]
              redirects: [(Redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<error>})]
              do_fork: T
            )
            (command.Simple
              blame_tok: <Id.VSub_DollarName '$grep_a'>
              more_env: []
              words: [
                {($ Id.VSub_DollarName grep_a)}
                {<-v>}
                {(DQ ($ Id.VSub_DollarName blue_grep))}
                {<output>}
              ]
              redirects: [(Redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<normal>})]
              do_fork: T
            )
            (command.ControlFlow keyword:<Id.ControlFlow_Return return> arg_word:{<0>})
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {<default>}
        {
          (SQ <'\n'> <'\n'> <'\tprepare_output &&\n'> <'\n'> <'\tgrep Eight normal >/dev/null &&\n'> 
            <'\tgrep HT error >/dev/null &&\n'> <'\tgrep With error >/dev/null &&\n'> <'\tgrep Return error >/dev/null &&\n'> 
            <'\tgrep No normal >/dev/null\n'> <'\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'default (attribute)'>)}
        {
          (SQ <'\n'> <'\n'> <'\ttest_might_fail git config --unset core.whitespace &&\n'> 
            <'\techo "F whitespace" >.gitattributes &&\n'> <'\tprepare_output &&\n'> <'\n'> <'\tgrep Eight error >/dev/null &&\n'> 
            <'\tgrep HT error >/dev/null &&\n'> <'\tgrep With error >/dev/null &&\n'> <'\tgrep Return error >/dev/null &&\n'> 
            <'\tgrep No normal >/dev/null\n'> <'\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'default, tabwidth=10 (attribute)'>)}
        {
          (SQ <'\n'> <'\n'> <'\tgit config core.whitespace "tabwidth=10" &&\n'> 
            <'\techo "F whitespace" >.gitattributes &&\n'> <'\tprepare_output &&\n'> <'\n'> <'\tgrep Eight normal >/dev/null &&\n'> 
            <'\tgrep HT error >/dev/null &&\n'> <'\tgrep With error >/dev/null &&\n'> <'\tgrep Return error >/dev/null &&\n'> 
            <'\tgrep No normal >/dev/null\n'> <'\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'no check (attribute)'>)}
        {
          (SQ <'\n'> <'\n'> <'\ttest_might_fail git config --unset core.whitespace &&\n'> 
            <'\techo "F -whitespace" >.gitattributes &&\n'> <'\tprepare_output &&\n'> <'\n'> <'\tgrep Eight normal >/dev/null &&\n'> 
            <'\tgrep HT normal >/dev/null &&\n'> <'\tgrep With normal >/dev/null &&\n'> <'\tgrep Return normal >/dev/null &&\n'> 
            <'\tgrep No normal >/dev/null\n'> <'\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'no check, tabwidth=10 (attribute), must be irrelevant'>)}
        {
          (SQ <'\n'> <'\n'> <'\tgit config core.whitespace "tabwidth=10" &&\n'> 
            <'\techo "F -whitespace" >.gitattributes &&\n'> <'\tprepare_output &&\n'> <'\n'> <'\tgrep Eight normal >/dev/null &&\n'> 
            <'\tgrep HT normal >/dev/null &&\n'> <'\tgrep With normal >/dev/null &&\n'> <'\tgrep Return normal >/dev/null &&\n'> 
            <'\tgrep No normal >/dev/null\n'> <'\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'without -trail'>)}
        {
          (SQ <'\n'> <'\n'> <'\trm -f .gitattributes &&\n'> <'\tgit config core.whitespace -trail &&\n'> 
            <'\tprepare_output &&\n'> <'\n'> <'\tgrep Eight normal >/dev/null &&\n'> <'\tgrep HT error >/dev/null &&\n'> 
            <'\tgrep With normal >/dev/null &&\n'> <'\tgrep Return normal >/dev/null &&\n'> <'\tgrep No normal >/dev/null\n'> <'\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'without -trail (attribute)'>)}
        {
          (SQ <'\n'> <'\n'> <'\ttest_might_fail git config --unset core.whitespace &&\n'> 
            <'\techo "F whitespace=-trail" >.gitattributes &&\n'> <'\tprepare_output &&\n'> <'\n'> <'\tgrep Eight normal >/dev/null &&\n'> 
            <'\tgrep HT error >/dev/null &&\n'> <'\tgrep With normal >/dev/null &&\n'> <'\tgrep Return normal >/dev/null &&\n'> 
            <'\tgrep No normal >/dev/null\n'> <'\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'without -space'>)}
        {
          (SQ <'\n'> <'\n'> <'\trm -f .gitattributes &&\n'> <'\tgit config core.whitespace -space &&\n'> 
            <'\tprepare_output &&\n'> <'\n'> <'\tgrep Eight normal >/dev/null &&\n'> <'\tgrep HT normal >/dev/null &&\n'> 
            <'\tgrep With error >/dev/null &&\n'> <'\tgrep Return error >/dev/null &&\n'> <'\tgrep No normal >/dev/null\n'> <'\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'without -space (attribute)'>)}
        {
          (SQ <'\n'> <'\n'> <'\ttest_might_fail git config --unset core.whitespace &&\n'> 
            <'\techo "F whitespace=-space" >.gitattributes &&\n'> <'\tprepare_output &&\n'> <'\n'> <'\tgrep Eight normal >/dev/null &&\n'> 
            <'\tgrep HT normal >/dev/null &&\n'> <'\tgrep With error >/dev/null &&\n'> <'\tgrep Return error >/dev/null &&\n'> 
            <'\tgrep No normal >/dev/null\n'> <'\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'with indent-non-tab only'>)}
        {
          (SQ <'\n'> <'\n'> <'\trm -f .gitattributes &&\n'> 
            <'\tgit config core.whitespace indent,-trailing,-space &&\n'> <'\tprepare_output &&\n'> <'\n'> <'\tgrep Eight error >/dev/null &&\n'> 
            <'\tgrep HT normal >/dev/null &&\n'> <'\tgrep With normal >/dev/null &&\n'> <'\tgrep Return normal >/dev/null &&\n'> 
            <'\tgrep No normal >/dev/null\n'> <'\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'with indent-non-tab only (attribute)'>)}
        {
          (SQ <'\n'> <'\n'> <'\ttest_might_fail git config --unset core.whitespace &&\n'> 
            <'\techo "F whitespace=indent,-trailing,-space" >.gitattributes &&\n'> <'\tprepare_output &&\n'> <'\n'> <'\tgrep Eight error >/dev/null &&\n'> 
            <'\tgrep HT normal >/dev/null &&\n'> <'\tgrep With normal >/dev/null &&\n'> <'\tgrep Return normal >/dev/null &&\n'> 
            <'\tgrep No normal >/dev/null\n'> <'\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'with indent-non-tab only, tabwidth=10'>)}
        {
          (SQ <'\n'> <'\n'> <'\trm -f .gitattributes &&\n'> 
            <'\tgit config core.whitespace indent,tabwidth=10,-trailing,-space &&\n'> <'\tprepare_output &&\n'> <'\n'> <'\tgrep Eight normal >/dev/null &&\n'> 
            <'\tgrep HT normal >/dev/null &&\n'> <'\tgrep With normal >/dev/null &&\n'> <'\tgrep Return normal >/dev/null &&\n'> 
            <'\tgrep No normal >/dev/null\n'> <'\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'with indent-non-tab only, tabwidth=10 (attribute)'>)}
        {
          (SQ <'\n'> <'\n'> <'\ttest_might_fail git config --unset core.whitespace &&\n'> 
            <'\techo "F whitespace=indent,-trailing,-space,tabwidth=10" >.gitattributes &&\n'> <'\tprepare_output &&\n'> <'\n'> <'\tgrep Eight normal >/dev/null &&\n'> 
            <'\tgrep HT normal >/dev/null &&\n'> <'\tgrep With normal >/dev/null &&\n'> <'\tgrep Return normal >/dev/null &&\n'> 
            <'\tgrep No normal >/dev/null\n'> <'\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'with cr-at-eol'>)}
        {
          (SQ <'\n'> <'\n'> <'\trm -f .gitattributes &&\n'> 
            <'\tgit config core.whitespace cr-at-eol &&\n'> <'\tprepare_output &&\n'> <'\n'> <'\tgrep Eight normal >/dev/null &&\n'> 
            <'\tgrep HT error >/dev/null &&\n'> <'\tgrep With error >/dev/null &&\n'> <'\tgrep Return normal >/dev/null &&\n'> 
            <'\tgrep No normal >/dev/null\n'> <'\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'with cr-at-eol (attribute)'>)}
        {
          (SQ <'\n'> <'\n'> <'\ttest_might_fail git config --unset core.whitespace &&\n'> 
            <'\techo "F whitespace=trailing,cr-at-eol" >.gitattributes &&\n'> <'\tprepare_output &&\n'> <'\n'> <'\tgrep Eight normal >/dev/null &&\n'> 
            <'\tgrep HT error >/dev/null &&\n'> <'\tgrep With error >/dev/null &&\n'> <'\tgrep Return normal >/dev/null &&\n'> 
            <'\tgrep No normal >/dev/null\n'> <'\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'trailing empty lines (1)'>)}
        {
          (SQ <'\n'> <'\n'> <'\trm -f .gitattributes &&\n'> 
            <'\ttest_must_fail git diff --check >output &&\n'> <'\tgrep "new blank line at" output &&\n'> <'\tgrep "trailing whitespace" output\n'> <'\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'trailing empty lines (2)'>)}
        {
          (SQ <'\n'> <'\n'> <'\techo "F -whitespace" >.gitattributes &&\n'> 
            <'\tgit diff --check >output &&\n'> <'\t! test -s output\n'> <'\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'checkdiff shows correct line number for trailing blank lines'>)}
        {
          (SQ <'\n'> <'\n'> <'\tprintf "a\\nb\\n" > G &&\n'> <'\tgit add G &&\n'> 
            <'\tprintf "x\\nx\\nx\\na\\nb\\nc\\n\\n" > G &&\n'> <'\t[ "$(git diff --check -- G)" = "G:7: new blank line at EOF." ]\n'> <'\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'do not color trailing cr in context'>)}
        {
          (SQ <'\n'> <'\ttest_might_fail git config --unset core.whitespace &&\n'> 
            <'\trm -f .gitattributes &&\n'> <'\techo AAAQ | tr Q "\\015" >G &&\n'> <'\tgit add G &&\n'> <'\techo BBBQ | tr Q "\\015" >>G &&\n'> 
            <'\tgit diff --color G | tr "\\015" Q >output &&\n'> <'\tgrep "BBB.*${blue_grep}Q" output &&\n'> <'\tgrep "AAA.*\\[mQ" output\n'> <'\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'color new trailing blank lines'>)}
        {
          (SQ <'\n'> <'\t{ echo a; echo b; echo; echo; } >x &&\n'> <'\tgit add x &&\n'> 
            <'\t{ echo a; echo; echo; echo; echo c; echo; echo; echo; echo; } >x &&\n'> <'\tgit diff --color x >output &&\n'> <'\tcnt=$($grep_a "${blue_grep}" output | wc -l) &&\n'> 
            <'\ttest $cnt = 2\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_done>
      more_env: []
      words: [{<test_done>}]
      redirects: []
      do_fork: T
    )
  ]
)