(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:'diff whitespace error detection' span_id:6))}
          spids: [4]
        )
      ]
    )
    (C {(.)} {(./test-lib.sh)})
    (C {(test_expect_success)} {(setup)} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:20) (Token id:Id.Lit_Chars val:'\n' span_id:21) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit config diff.color.whitespace "blue reverse" &&\n'
            span_id: 22
          ) (Token id:Id.Lit_Chars val:'\t>F &&\n' span_id:23) 
          (Token id:Id.Lit_Chars val:'\tgit add F &&\n' span_id:24) (Token id:Id.Lit_Chars val:'\techo "         Eight SP indent" >>F &&\n' span_id:25) 
          (Token id:Id.Lit_Chars val:'\techo " \tHT and SP indent" >>F &&\n' span_id:26) (Token id:Id.Lit_Chars val:'\techo "With trailing SP " >>F &&\n' span_id:27) 
          (Token
            id: Id.Lit_Chars
            val: '\techo "Carriage ReturnQ" | tr Q "\\015" >>F &&\n'
            span_id: 28
          ) (Token id:Id.Lit_Chars val:'\techo "No problem" >>F &&\n' span_id:29) 
          (Token id:Id.Lit_Chars val:'\techo >>F\n' span_id:30) (Token id:Id.Lit_Chars val:'\n' span_id:31)
        )
      }
    )
    (command.Sentence
      child: 
        (command.ShAssignment
          pairs: [
            (assign_pair
              lhs: (sh_lhs_expr.Name name:blue_grep)
              op: assign_op.Equal
              rhs: {(SQ (Token id:Id.Lit_Chars val:'7;34m' span_id:37))}
              spids: [35]
            )
          ]
        )
      terminator: (Token id:Id.Op_Semi val:';' span_id:40)
    )
    (command.Simple
      words: [{(printf)} {(DQ (Id.Lit_Other '\\') ('033[%s'))} {(DQ ($ Id.VSub_DollarName '$blue_grep'))}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:56)
          fd: -1
          arg_word: {(check-grep)}
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Subshell
              command_list: 
                (command.CommandList
                  children: [
                    (command.Pipeline
                      children: [
                        (command.Simple
                          words: [{(grep)} {(DQ ($ Id.VSub_DollarName '$blue_grep'))}]
                          redirects: [
                            (redir.Redir
                              op: (Token id:Id.Redir_Less val:'<' span_id:68)
                              fd: -1
                              arg_word: {(check-grep)}
                            )
                          ]
                        )
                        (C {(grep)} {(DQ ($ Id.VSub_DollarName '$blue_grep'))})
                      ]
                      negated: F
                    )
                  ]
                )
              redirects: [
                (redir.Redir
                  op: (Token id:Id.Redir_Great val:'>' span_id:80)
                  fd: -1
                  arg_word: {(/dev/null)}
                )
                (redir.Redir
                  op: (Token id:Id.Redir_GreatAnd val:'2>&' span_id:83)
                  fd: 2
                  arg_word: {(1)}
                )
              ]
            )
          ]
          action: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:grep_a)
                  op: assign_op.Equal
                  rhs: {(grep)}
                  spids: [89]
                )
              ]
            )
          ]
          spids: [59 86]
        )
        (if_arm
          cond: [
            (command.Subshell
              command_list: 
                (command.CommandList
                  children: [
                    (command.Pipeline
                      children: [
                        (command.Simple
                          words: [{(grep)} {(-a)} {(DQ ($ Id.VSub_DollarName '$blue_grep'))}]
                          redirects: [
                            (redir.Redir
                              op: (Token id:Id.Redir_Less val:'<' span_id:103)
                              fd: -1
                              arg_word: {(check-grep)}
                            )
                          ]
                        )
                        (C {(grep)} {(-a)} {(DQ ($ Id.VSub_DollarName '$blue_grep'))})
                      ]
                      negated: F
                    )
                  ]
                )
              redirects: [
                (redir.Redir
                  op: (Token id:Id.Redir_Great val:'>' span_id:117)
                  fd: -1
                  arg_word: {(/dev/null)}
                )
                (redir.Redir
                  op: (Token id:Id.Redir_GreatAnd val:'2>&' span_id:120)
                  fd: 2
                  arg_word: {(1)}
                )
              ]
            )
          ]
          action: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:grep_a)
                  op: assign_op.Equal
                  rhs: {(SQ (Token id:Id.Lit_Chars val:'grep -a' span_id:128))}
                  spids: [126]
                )
              ]
            )
          ]
          spids: [92 123]
        )
      ]
      else_action: [
        (command.Sentence
          child: 
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:grep_a)
                  op: assign_op.Equal
                  rhs: {(grep)}
                  spids: [134]
                )
              ]
            )
          terminator: (Token id:Id.Op_Semi val:';' span_id:137)
        )
      ]
    )
    (C {(rm)} {(-f)} {(check-grep)})
    (command.ShFunction
      name: prepare_output
      body: 
        (command.BraceGroup
          children: [
            (command.Simple
              words: [{(git)} {(diff)} {(--color)}]
              redirects: [
                (redir.Redir
                  op: (Token id:Id.Redir_Great val:'>' span_id:164)
                  fd: -1
                  arg_word: {(output)}
                )
              ]
            )
            (command.Simple
              words: [
                {($ Id.VSub_DollarName '$grep_a')}
                {(DQ ($ Id.VSub_DollarName '$blue_grep'))}
                {(output)}
              ]
              redirects: [
                (redir.Redir
                  op: (Token id:Id.Redir_Great val:'>' span_id:176)
                  fd: -1
                  arg_word: {(error)}
                )
              ]
            )
            (command.Simple
              words: [
                {($ Id.VSub_DollarName '$grep_a')}
                {(-v)}
                {(DQ ($ Id.VSub_DollarName '$blue_grep'))}
                {(output)}
              ]
              redirects: [
                (redir.Redir
                  op: (Token id:Id.Redir_Great val:'>' span_id:190)
                  fd: -1
                  arg_word: {(normal)}
                )
              ]
            )
            (command.ControlFlow
              token: (Token id:Id.ControlFlow_Return val:return span_id:194)
              arg_word: {(0)}
            )
          ]
        )
    )
    (C {(test_expect_success)} {(default)} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:206) (Token id:Id.Lit_Chars val:'\n' span_id:207) 
          (Token id:Id.Lit_Chars val:'\tprepare_output &&\n' span_id:208) (Token id:Id.Lit_Chars val:'\n' span_id:209) 
          (Token id:Id.Lit_Chars val:'\tgrep Eight normal >/dev/null &&\n' span_id:210) (Token id:Id.Lit_Chars val:'\tgrep HT error >/dev/null &&\n' span_id:211) 
          (Token id:Id.Lit_Chars val:'\tgrep With error >/dev/null &&\n' span_id:212) (Token id:Id.Lit_Chars val:'\tgrep Return error >/dev/null &&\n' span_id:213) 
          (Token id:Id.Lit_Chars val:'\tgrep No normal >/dev/null\n' span_id:214) (Token id:Id.Lit_Chars val:'\n' span_id:215)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'default (attribute)' span_id:222))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:226) (Token id:Id.Lit_Chars val:'\n' span_id:227) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_might_fail git config --unset core.whitespace &&\n'
            span_id: 228
          ) (Token id:Id.Lit_Chars val:'\techo "F whitespace" >.gitattributes &&\n' span_id:229) 
          (Token id:Id.Lit_Chars val:'\tprepare_output &&\n' span_id:230) (Token id:Id.Lit_Chars val:'\n' span_id:231) 
          (Token id:Id.Lit_Chars val:'\tgrep Eight error >/dev/null &&\n' span_id:232) (Token id:Id.Lit_Chars val:'\tgrep HT error >/dev/null &&\n' span_id:233) 
          (Token id:Id.Lit_Chars val:'\tgrep With error >/dev/null &&\n' span_id:234) (Token id:Id.Lit_Chars val:'\tgrep Return error >/dev/null &&\n' span_id:235) 
          (Token id:Id.Lit_Chars val:'\tgrep No normal >/dev/null\n' span_id:236) (Token id:Id.Lit_Chars val:'\n' span_id:237)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'default, tabwidth=10 (attribute)' span_id:244))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:248) (Token id:Id.Lit_Chars val:'\n' span_id:249) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit config core.whitespace "tabwidth=10" &&\n'
            span_id: 250
          ) (Token id:Id.Lit_Chars val:'\techo "F whitespace" >.gitattributes &&\n' span_id:251) 
          (Token id:Id.Lit_Chars val:'\tprepare_output &&\n' span_id:252) (Token id:Id.Lit_Chars val:'\n' span_id:253) 
          (Token id:Id.Lit_Chars val:'\tgrep Eight normal >/dev/null &&\n' span_id:254) (Token id:Id.Lit_Chars val:'\tgrep HT error >/dev/null &&\n' span_id:255) 
          (Token id:Id.Lit_Chars val:'\tgrep With error >/dev/null &&\n' span_id:256) (Token id:Id.Lit_Chars val:'\tgrep Return error >/dev/null &&\n' span_id:257) 
          (Token id:Id.Lit_Chars val:'\tgrep No normal >/dev/null\n' span_id:258) (Token id:Id.Lit_Chars val:'\n' span_id:259)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'no check (attribute)' span_id:266))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:270) (Token id:Id.Lit_Chars val:'\n' span_id:271) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_might_fail git config --unset core.whitespace &&\n'
            span_id: 272
          ) (Token id:Id.Lit_Chars val:'\techo "F -whitespace" >.gitattributes &&\n' span_id:273) 
          (Token id:Id.Lit_Chars val:'\tprepare_output &&\n' span_id:274) (Token id:Id.Lit_Chars val:'\n' span_id:275) 
          (Token id:Id.Lit_Chars val:'\tgrep Eight normal >/dev/null &&\n' span_id:276) (Token id:Id.Lit_Chars val:'\tgrep HT normal >/dev/null &&\n' span_id:277) 
          (Token id:Id.Lit_Chars val:'\tgrep With normal >/dev/null &&\n' span_id:278) (Token id:Id.Lit_Chars val:'\tgrep Return normal >/dev/null &&\n' span_id:279) 
          (Token id:Id.Lit_Chars val:'\tgrep No normal >/dev/null\n' span_id:280) (Token id:Id.Lit_Chars val:'\n' span_id:281)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'no check, tabwidth=10 (attribute), must be irrelevant'
            span_id: 288
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:292) (Token id:Id.Lit_Chars val:'\n' span_id:293) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit config core.whitespace "tabwidth=10" &&\n'
            span_id: 294
          ) (Token id:Id.Lit_Chars val:'\techo "F -whitespace" >.gitattributes &&\n' span_id:295) 
          (Token id:Id.Lit_Chars val:'\tprepare_output &&\n' span_id:296) (Token id:Id.Lit_Chars val:'\n' span_id:297) 
          (Token id:Id.Lit_Chars val:'\tgrep Eight normal >/dev/null &&\n' span_id:298) (Token id:Id.Lit_Chars val:'\tgrep HT normal >/dev/null &&\n' span_id:299) 
          (Token id:Id.Lit_Chars val:'\tgrep With normal >/dev/null &&\n' span_id:300) (Token id:Id.Lit_Chars val:'\tgrep Return normal >/dev/null &&\n' span_id:301) 
          (Token id:Id.Lit_Chars val:'\tgrep No normal >/dev/null\n' span_id:302) (Token id:Id.Lit_Chars val:'\n' span_id:303)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'without -trail' span_id:310))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:314) (Token id:Id.Lit_Chars val:'\n' span_id:315) 
          (Token id:Id.Lit_Chars val:'\trm -f .gitattributes &&\n' span_id:316) (Token id:Id.Lit_Chars val:'\tgit config core.whitespace -trail &&\n' span_id:317) 
          (Token id:Id.Lit_Chars val:'\tprepare_output &&\n' span_id:318) (Token id:Id.Lit_Chars val:'\n' span_id:319) 
          (Token id:Id.Lit_Chars val:'\tgrep Eight normal >/dev/null &&\n' span_id:320) (Token id:Id.Lit_Chars val:'\tgrep HT error >/dev/null &&\n' span_id:321) 
          (Token id:Id.Lit_Chars val:'\tgrep With normal >/dev/null &&\n' span_id:322) (Token id:Id.Lit_Chars val:'\tgrep Return normal >/dev/null &&\n' span_id:323) 
          (Token id:Id.Lit_Chars val:'\tgrep No normal >/dev/null\n' span_id:324) (Token id:Id.Lit_Chars val:'\n' span_id:325)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'without -trail (attribute)' span_id:332))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:336) (Token id:Id.Lit_Chars val:'\n' span_id:337) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_might_fail git config --unset core.whitespace &&\n'
            span_id: 338
          ) (Token id:Id.Lit_Chars val:'\techo "F whitespace=-trail" >.gitattributes &&\n' span_id:339) 
          (Token id:Id.Lit_Chars val:'\tprepare_output &&\n' span_id:340) (Token id:Id.Lit_Chars val:'\n' span_id:341) 
          (Token id:Id.Lit_Chars val:'\tgrep Eight normal >/dev/null &&\n' span_id:342) (Token id:Id.Lit_Chars val:'\tgrep HT error >/dev/null &&\n' span_id:343) 
          (Token id:Id.Lit_Chars val:'\tgrep With normal >/dev/null &&\n' span_id:344) (Token id:Id.Lit_Chars val:'\tgrep Return normal >/dev/null &&\n' span_id:345) 
          (Token id:Id.Lit_Chars val:'\tgrep No normal >/dev/null\n' span_id:346) (Token id:Id.Lit_Chars val:'\n' span_id:347)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'without -space' span_id:354))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:358) (Token id:Id.Lit_Chars val:'\n' span_id:359) 
          (Token id:Id.Lit_Chars val:'\trm -f .gitattributes &&\n' span_id:360) (Token id:Id.Lit_Chars val:'\tgit config core.whitespace -space &&\n' span_id:361) 
          (Token id:Id.Lit_Chars val:'\tprepare_output &&\n' span_id:362) (Token id:Id.Lit_Chars val:'\n' span_id:363) 
          (Token id:Id.Lit_Chars val:'\tgrep Eight normal >/dev/null &&\n' span_id:364) (Token id:Id.Lit_Chars val:'\tgrep HT normal >/dev/null &&\n' span_id:365) 
          (Token id:Id.Lit_Chars val:'\tgrep With error >/dev/null &&\n' span_id:366) (Token id:Id.Lit_Chars val:'\tgrep Return error >/dev/null &&\n' span_id:367) 
          (Token id:Id.Lit_Chars val:'\tgrep No normal >/dev/null\n' span_id:368) (Token id:Id.Lit_Chars val:'\n' span_id:369)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'without -space (attribute)' span_id:376))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:380) (Token id:Id.Lit_Chars val:'\n' span_id:381) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_might_fail git config --unset core.whitespace &&\n'
            span_id: 382
          ) (Token id:Id.Lit_Chars val:'\techo "F whitespace=-space" >.gitattributes &&\n' span_id:383) 
          (Token id:Id.Lit_Chars val:'\tprepare_output &&\n' span_id:384) (Token id:Id.Lit_Chars val:'\n' span_id:385) 
          (Token id:Id.Lit_Chars val:'\tgrep Eight normal >/dev/null &&\n' span_id:386) (Token id:Id.Lit_Chars val:'\tgrep HT normal >/dev/null &&\n' span_id:387) 
          (Token id:Id.Lit_Chars val:'\tgrep With error >/dev/null &&\n' span_id:388) (Token id:Id.Lit_Chars val:'\tgrep Return error >/dev/null &&\n' span_id:389) 
          (Token id:Id.Lit_Chars val:'\tgrep No normal >/dev/null\n' span_id:390) (Token id:Id.Lit_Chars val:'\n' span_id:391)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'with indent-non-tab only' span_id:398))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:402) (Token id:Id.Lit_Chars val:'\n' span_id:403) 
          (Token id:Id.Lit_Chars val:'\trm -f .gitattributes &&\n' span_id:404) (Token id:Id.Lit_Chars val:'\tgit config core.whitespace indent,-trailing,-space &&\n' span_id:405) 
          (Token id:Id.Lit_Chars val:'\tprepare_output &&\n' span_id:406) (Token id:Id.Lit_Chars val:'\n' span_id:407) 
          (Token id:Id.Lit_Chars val:'\tgrep Eight error >/dev/null &&\n' span_id:408) (Token id:Id.Lit_Chars val:'\tgrep HT normal >/dev/null &&\n' span_id:409) 
          (Token id:Id.Lit_Chars val:'\tgrep With normal >/dev/null &&\n' span_id:410) (Token id:Id.Lit_Chars val:'\tgrep Return normal >/dev/null &&\n' span_id:411) 
          (Token id:Id.Lit_Chars val:'\tgrep No normal >/dev/null\n' span_id:412) (Token id:Id.Lit_Chars val:'\n' span_id:413)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'with indent-non-tab only (attribute)' span_id:420))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:424) (Token id:Id.Lit_Chars val:'\n' span_id:425) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_might_fail git config --unset core.whitespace &&\n'
            span_id: 426
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\techo "F whitespace=indent,-trailing,-space" >.gitattributes &&\n'
            span_id: 427
          ) (Token id:Id.Lit_Chars val:'\tprepare_output &&\n' span_id:428) 
          (Token id:Id.Lit_Chars val:'\n' span_id:429) (Token id:Id.Lit_Chars val:'\tgrep Eight error >/dev/null &&\n' span_id:430) 
          (Token id:Id.Lit_Chars val:'\tgrep HT normal >/dev/null &&\n' span_id:431) (Token id:Id.Lit_Chars val:'\tgrep With normal >/dev/null &&\n' span_id:432) 
          (Token id:Id.Lit_Chars val:'\tgrep Return normal >/dev/null &&\n' span_id:433) (Token id:Id.Lit_Chars val:'\tgrep No normal >/dev/null\n' span_id:434) 
          (Token id:Id.Lit_Chars val:'\n' span_id:435)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'with indent-non-tab only, tabwidth=10' span_id:442))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:446) (Token id:Id.Lit_Chars val:'\n' span_id:447) 
          (Token id:Id.Lit_Chars val:'\trm -f .gitattributes &&\n' span_id:448) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit config core.whitespace indent,tabwidth=10,-trailing,-space &&\n'
            span_id: 449
          ) (Token id:Id.Lit_Chars val:'\tprepare_output &&\n' span_id:450) 
          (Token id:Id.Lit_Chars val:'\n' span_id:451) (Token id:Id.Lit_Chars val:'\tgrep Eight normal >/dev/null &&\n' span_id:452) 
          (Token id:Id.Lit_Chars val:'\tgrep HT normal >/dev/null &&\n' span_id:453) (Token id:Id.Lit_Chars val:'\tgrep With normal >/dev/null &&\n' span_id:454) 
          (Token id:Id.Lit_Chars val:'\tgrep Return normal >/dev/null &&\n' span_id:455) (Token id:Id.Lit_Chars val:'\tgrep No normal >/dev/null\n' span_id:456) 
          (Token id:Id.Lit_Chars val:'\n' span_id:457)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'with indent-non-tab only, tabwidth=10 (attribute)'
            span_id: 464
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:468) (Token id:Id.Lit_Chars val:'\n' span_id:469) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_might_fail git config --unset core.whitespace &&\n'
            span_id: 470
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\techo "F whitespace=indent,-trailing,-space,tabwidth=10" >.gitattributes &&\n'
            span_id: 471
          ) (Token id:Id.Lit_Chars val:'\tprepare_output &&\n' span_id:472) 
          (Token id:Id.Lit_Chars val:'\n' span_id:473) (Token id:Id.Lit_Chars val:'\tgrep Eight normal >/dev/null &&\n' span_id:474) 
          (Token id:Id.Lit_Chars val:'\tgrep HT normal >/dev/null &&\n' span_id:475) (Token id:Id.Lit_Chars val:'\tgrep With normal >/dev/null &&\n' span_id:476) 
          (Token id:Id.Lit_Chars val:'\tgrep Return normal >/dev/null &&\n' span_id:477) (Token id:Id.Lit_Chars val:'\tgrep No normal >/dev/null\n' span_id:478) 
          (Token id:Id.Lit_Chars val:'\n' span_id:479)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'with cr-at-eol' span_id:486))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:490) (Token id:Id.Lit_Chars val:'\n' span_id:491) 
          (Token id:Id.Lit_Chars val:'\trm -f .gitattributes &&\n' span_id:492) (Token id:Id.Lit_Chars val:'\tgit config core.whitespace cr-at-eol &&\n' span_id:493) 
          (Token id:Id.Lit_Chars val:'\tprepare_output &&\n' span_id:494) (Token id:Id.Lit_Chars val:'\n' span_id:495) 
          (Token id:Id.Lit_Chars val:'\tgrep Eight normal >/dev/null &&\n' span_id:496) (Token id:Id.Lit_Chars val:'\tgrep HT error >/dev/null &&\n' span_id:497) 
          (Token id:Id.Lit_Chars val:'\tgrep With error >/dev/null &&\n' span_id:498) (Token id:Id.Lit_Chars val:'\tgrep Return normal >/dev/null &&\n' span_id:499) 
          (Token id:Id.Lit_Chars val:'\tgrep No normal >/dev/null\n' span_id:500) (Token id:Id.Lit_Chars val:'\n' span_id:501)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'with cr-at-eol (attribute)' span_id:508))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:512) (Token id:Id.Lit_Chars val:'\n' span_id:513) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_might_fail git config --unset core.whitespace &&\n'
            span_id: 514
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\techo "F whitespace=trailing,cr-at-eol" >.gitattributes &&\n'
            span_id: 515
          ) (Token id:Id.Lit_Chars val:'\tprepare_output &&\n' span_id:516) 
          (Token id:Id.Lit_Chars val:'\n' span_id:517) (Token id:Id.Lit_Chars val:'\tgrep Eight normal >/dev/null &&\n' span_id:518) 
          (Token id:Id.Lit_Chars val:'\tgrep HT error >/dev/null &&\n' span_id:519) (Token id:Id.Lit_Chars val:'\tgrep With error >/dev/null &&\n' span_id:520) 
          (Token id:Id.Lit_Chars val:'\tgrep Return normal >/dev/null &&\n' span_id:521) (Token id:Id.Lit_Chars val:'\tgrep No normal >/dev/null\n' span_id:522) 
          (Token id:Id.Lit_Chars val:'\n' span_id:523)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'trailing empty lines (1)' span_id:530))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:534) (Token id:Id.Lit_Chars val:'\n' span_id:535) 
          (Token id:Id.Lit_Chars val:'\trm -f .gitattributes &&\n' span_id:536) (Token id:Id.Lit_Chars val:'\ttest_must_fail git diff --check >output &&\n' span_id:537) 
          (Token id:Id.Lit_Chars val:'\tgrep "new blank line at" output &&\n' span_id:538) (Token id:Id.Lit_Chars val:'\tgrep "trailing whitespace" output\n' span_id:539) 
          (Token id:Id.Lit_Chars val:'\n' span_id:540)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'trailing empty lines (2)' span_id:547))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:551) (Token id:Id.Lit_Chars val:'\n' span_id:552) 
          (Token
            id: Id.Lit_Chars
            val: '\techo "F -whitespace" >.gitattributes &&\n'
            span_id: 553
          ) (Token id:Id.Lit_Chars val:'\tgit diff --check >output &&\n' span_id:554) 
          (Token id:Id.Lit_Chars val:'\t! test -s output\n' span_id:555) (Token id:Id.Lit_Chars val:'\n' span_id:556)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'checkdiff shows correct line number for trailing blank lines'
            span_id: 563
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:567) (Token id:Id.Lit_Chars val:'\n' span_id:568) 
          (Token id:Id.Lit_Chars val:'\tprintf "a\\nb\\n" > G &&\n' span_id:569) (Token id:Id.Lit_Chars val:'\tgit add G &&\n' span_id:570) 
          (Token
            id: Id.Lit_Chars
            val: '\tprintf "x\\nx\\nx\\na\\nb\\nc\\n\\n" > G &&\n'
            span_id: 571
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\t[ "$(git diff --check -- G)" = "G:7: new blank line at EOF." ]\n'
            span_id: 572
          ) (Token id:Id.Lit_Chars val:'\n' span_id:573)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'do not color trailing cr in context' span_id:580))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:584) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_might_fail git config --unset core.whitespace &&\n'
            span_id: 585
          ) (Token id:Id.Lit_Chars val:'\trm -f .gitattributes &&\n' span_id:586) 
          (Token id:Id.Lit_Chars val:'\techo AAAQ | tr Q "\\015" >G &&\n' span_id:587) (Token id:Id.Lit_Chars val:'\tgit add G &&\n' span_id:588) 
          (Token id:Id.Lit_Chars val:'\techo BBBQ | tr Q "\\015" >>G &&\n' span_id:589) (Token id:Id.Lit_Chars val:'\tgit diff --color G | tr "\\015" Q >output &&\n' span_id:590) 
          (Token id:Id.Lit_Chars val:'\tgrep "BBB.*${blue_grep}Q" output &&\n' span_id:591) (Token id:Id.Lit_Chars val:'\tgrep "AAA.*\\[mQ" output\n' span_id:592) 
          (Token id:Id.Lit_Chars val:'\n' span_id:593)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'color new trailing blank lines' span_id:600))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:604) 
          (Token
            id: Id.Lit_Chars
            val: '\t{ echo a; echo b; echo; echo; } >x &&\n'
            span_id: 605
          ) (Token id:Id.Lit_Chars val:'\tgit add x &&\n' span_id:606) 
          (Token
            id: Id.Lit_Chars
            val: '\t{ echo a; echo; echo; echo; echo c; echo; echo; echo; echo; } >x &&\n'
            span_id: 607
          ) (Token id:Id.Lit_Chars val:'\tgit diff --color x >output &&\n' span_id:608) 
          (Token
            id: Id.Lit_Chars
            val: '\tcnt=$($grep_a "${blue_grep}" output | wc -l) &&\n'
            span_id: 609
          ) (Token id:Id.Lit_Chars val:'\ttest $cnt = 2\n' span_id:610)
        )
      }
    )
    (C {(test_done)})
  ]
)