(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:'git rebase --whitespace=fix\n' span_id:6) 
                (Token id:Id.Lit_Chars val:'\n' span_id:7) 
                (Token
                  id: Id.Lit_Chars
                  val: 'This test runs git rebase --whitespace=fix and make sure that it works.\n'
                  span_id: 8
                )
              )
            }
          spids: [4]
        )
      ]
    )
    (C {(.)} {(./test-lib.sh)})
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir op:(Token id:Id.Redir_Great val:'>' span_id:22) fd:-1 arg_word:{(file)})
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:25)
          fd: -1
          here_begin: {(EOF)}
          here_end_span_id: 33
          stdin_parts: [('a\n') ('b\n') ('c\n') ('\n')]
        )
      ]
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:40)
          fd: -1
          arg_word: {(expect-first)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:43)
          fd: -1
          here_begin: {(EOF)}
          here_end_span_id: 50
          stdin_parts: [('a\n') ('b\n') ('c\n')]
        )
      ]
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir op:(Token id:Id.Redir_Great val:'>' span_id:57) fd:-1 arg_word:{(second)})
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:60)
          fd: -1
          here_begin: {(EOF)}
          here_end_span_id: 75
          stdin_parts: [('a\n') ('b\n') ('c\n') ('\n') ('d\n') ('e\n') ('f\n') ('\n') ('\n') ('\n') ('\n')]
        )
      ]
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:82)
          fd: -1
          arg_word: {(expect-second)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:85)
          fd: -1
          here_begin: {(EOF)}
          here_end_span_id: 96
          stdin_parts: [('a\n') ('b\n') ('c\n') ('\n') ('d\n') ('e\n') ('f\n')]
        )
      ]
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'blank line at end of file; extend at end of file'
            span_id: 101
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:105) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit commit --allow-empty -m "Initial empty commit" &&\n'
            span_id: 106
          ) (Token id:Id.Lit_Chars val:'\tgit add file && git commit -m first &&\n' span_id:107) 
          (Token id:Id.Lit_Chars val:'\tmv second file &&\n' span_id:108) (Token id:Id.Lit_Chars val:'\tgit add file &&\tgit commit -m second &&\n' span_id:109) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit rebase --whitespace=fix HEAD^^ &&\n'
            span_id: 110
          ) (Token id:Id.Lit_Chars val:'\tgit diff --exit-code HEAD^:file expect-first &&\n' span_id:111) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp file expect-second\n' span_id:112)
        )
      }
    )
    (command.Simple
      words: [{(sed)} {(-e) (SQ (Token id:Id.Lit_Chars val:s/Z// span_id:123))}]
      redirects: [
        (redir.Redir op:(Token id:Id.Redir_Great val:'>' span_id:126) fd:-1 arg_word:{(third)})
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:129)
          fd: -1
          here_begin: {(EOF)}
          here_end_span_id: 147
          stdin_parts: [
            ('a\n')
            ('b\n')
            ('c\n')
            ('\n')
            ('d\n')
            ('e\n')
            ('f\n')
            ('    Z\n')
            (' Z\n')
            ('h\n')
            ('i\n')
            ('j\n')
            ('k\n')
            ('l\n')
          ]
        )
      ]
    )
    (command.Simple
      words: [{(sed)} {(-e) (SQ (Token id:Id.Lit_Chars val:'s/ //g' span_id:153))}]
      redirects: [
        (redir.Redir op:(Token id:Id.Redir_Less val:'<' span_id:156) fd:-1 arg_word:{(third)})
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:159)
          fd: -1
          arg_word: {(expect-third)}
        )
      ]
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'two blanks line at end of file; extend at end of file'
            span_id: 166
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:170) 
          (Token
            id: Id.Lit_Chars
            val: '\tcp third file && git add file && git commit -m third &&\n'
            span_id: 171
          ) (Token id:Id.Lit_Chars val:'\tgit rebase --whitespace=fix HEAD^^ &&\n' span_id:172) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit diff --exit-code HEAD^:file expect-second &&\n'
            span_id: 173
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp file expect-third\n' span_id:174)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'same, but do not remove trailing spaces' span_id:181))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:185) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit config core.whitespace "-blank-at-eol" &&\n'
            span_id: 186
          ) (Token id:Id.Lit_Chars val:'\tgit reset --hard HEAD^ &&\n' span_id:187) 
          (Token
            id: Id.Lit_Chars
            val: '\tcp third file && git add file && git commit -m third &&\n'
            span_id: 188
          ) (Token id:Id.Lit_Chars val:'\tgit rebase --whitespace=fix HEAD^^ &&\n' span_id:189) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit diff --exit-code HEAD^:file expect-second &&\n'
            span_id: 190
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp file third\n' span_id:191)
        )
      }
    )
    (command.Simple
      words: [{(sed)} {(-e) (SQ (Token id:Id.Lit_Chars val:s/Z// span_id:199))}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:202)
          fd: -1
          arg_word: {(beginning)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:205)
          fd: -1
          here_begin: {(EOF)}
          here_end_span_id: 212
          stdin_parts: [('a\n') ('\t\t    Z\n') ('       Z\n')]
        )
      ]
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:216)
          fd: -1
          arg_word: {(expect-beginning)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:219)
          fd: -1
          here_begin: {(EOF)}
          here_end_span_id: 231
          stdin_parts: [('a\n') ('\n') ('\n') ('1\n') ('2\n') ('3\n') ('4\n') ('5\n')]
        )
      ]
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'at beginning of file' span_id:236))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:240) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit config core.whitespace "blank-at-eol" &&\n'
            span_id: 241
          ) (Token id:Id.Lit_Chars val:'\tcp beginning file &&\n' span_id:242) 
          (Token id:Id.Lit_Chars val:'\tgit commit -m beginning file &&\n' span_id:243) (Token id:Id.Lit_Chars val:'\tfor i in 1 2 3 4 5; do\n' span_id:244) 
          (Token id:Id.Lit_Chars val:'\t\techo $i\n' span_id:245) (Token id:Id.Lit_Chars val:'\tdone >> file &&\n' span_id:246) 
          (Token id:Id.Lit_Chars val:'\tgit commit -m more file\t&&\n' span_id:247) (Token id:Id.Lit_Chars val:'\tgit rebase --whitespace=fix HEAD^^ &&\n' span_id:248) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp file expect-beginning\n' span_id:249)
        )
      }
    )
    (C {(test_done)})
  ]
)