(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:'rebase should handle arbitrary git message' span_id:6))}
          spids: [4]
        )
      ]
    )
    (C {(.)} {(./test-lib.sh)})
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir op:(Token id:Id.Redir_Great val:'>' span_id:17) fd:-1 arg_word:{(F)})
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:20)
          fd: -1
          here_begin: 
            {(word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\E' span_id:21)) (OF)}
          here_end_span_id: 29
          stdin_parts: [
            ('This is an example of a commit log message\n')
            ('that does not  conform to git commit convention.\n')
            ('\n')
            ('It has two paragraphs, but its first paragraph is not friendly\n')
            ('to oneline summary format.\n')
          ]
        )
      ]
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir op:(Token id:Id.Redir_Great val:'>' span_id:33) fd:-1 arg_word:{(G)})
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:36)
          fd: -1
          here_begin: 
            {(word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\E' span_id:37)) (OF)}
          here_end_span_id: 41
          stdin_parts: [('commit log message containing a diff\n')]
        )
      ]
    )
    (C {(test_expect_success)} {(setup)} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:49) (Token id:Id.Lit_Chars val:'\n' span_id:50) 
          (Token id:Id.Lit_Chars val:'\t>file1 &&\n' span_id:51) (Token id:Id.Lit_Chars val:'\t>file2 &&\n' span_id:52) 
          (Token id:Id.Lit_Chars val:'\tgit add file1 file2 &&\n' span_id:53) (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:54) 
          (Token id:Id.Lit_Chars val:'\tgit commit -m "Initial commit" &&\n' span_id:55) (Token id:Id.Lit_Chars val:'\tgit branch diff-in-message &&\n' span_id:56) 
          (Token id:Id.Lit_Chars val:'\n' span_id:57) (Token id:Id.Lit_Chars val:'\tgit checkout -b multi-line-subject &&\n' span_id:58) 
          (Token id:Id.Lit_Chars val:'\tcat F >file2 &&\n' span_id:59) (Token id:Id.Lit_Chars val:'\tgit add file2 &&\n' span_id:60) 
          (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:61) (Token id:Id.Lit_Chars val:'\tgit commit -F F &&\n' span_id:62) 
          (Token id:Id.Lit_Chars val:'\n' span_id:63) (Token id:Id.Lit_Chars val:'\tgit cat-file commit HEAD | sed -e "1,/^\\$/d" >F0 &&\n' span_id:64) 
          (Token id:Id.Lit_Chars val:'\n' span_id:65) (Token id:Id.Lit_Chars val:'\tgit checkout diff-in-message &&\n' span_id:66) 
          (Token
            id: Id.Lit_Chars
            val: '\techo "commit log message containing a diff" >G &&\n'
            span_id: 67
          ) (Token id:Id.Lit_Chars val:'\techo "" >>G &&\n' span_id:68) 
          (Token id:Id.Lit_Chars val:'\tcat G >file2 &&\n' span_id:69) (Token id:Id.Lit_Chars val:'\tgit add file2 &&\n' span_id:70) 
          (Token id:Id.Lit_Chars val:'\tgit diff --cached >>G &&\n' span_id:71) (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:72) 
          (Token id:Id.Lit_Chars val:'\tgit commit -F G &&\n' span_id:73) (Token id:Id.Lit_Chars val:'\n' span_id:74) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit cat-file commit HEAD | sed -e "1,/^\\$/d" >G0 &&\n'
            span_id: 75
          ) (Token id:Id.Lit_Chars val:'\n' span_id:76) 
          (Token id:Id.Lit_Chars val:'\tgit checkout master &&\n' span_id:77) (Token id:Id.Lit_Chars val:'\n' span_id:78) 
          (Token id:Id.Lit_Chars val:'\techo One >file1 &&\n' span_id:79) (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:80) 
          (Token id:Id.Lit_Chars val:'\tgit add file1 &&\n' span_id:81) (Token id:Id.Lit_Chars val:'\tgit commit -m "Second commit"\n' span_id:82)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'rebase commit with multi-line subject' span_id:89))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:93) (Token id:Id.Lit_Chars val:'\n' span_id:94) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit rebase master multi-line-subject &&\n'
            span_id: 95
          ) (Token id:Id.Lit_Chars val:'\tgit cat-file commit HEAD | sed -e "1,/^\\$/d" >F1 &&\n' span_id:96) 
          (Token id:Id.Lit_Chars val:'\n' span_id:97) (Token id:Id.Lit_Chars val:'\ttest_cmp F0 F1 &&\n' span_id:98) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp F F0\n' span_id:99)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'rebase commit with diff in message' span_id:106))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:110) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit rebase master diff-in-message &&\n'
            span_id: 111
          ) (Token id:Id.Lit_Chars val:'\tgit cat-file commit HEAD | sed -e "1,/^$/d" >G1 &&\n' span_id:112) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp G0 G1 &&\n' span_id:113) (Token id:Id.Lit_Chars val:'\ttest_cmp G G0\n' span_id:114)
        )
      }
    )
    (C {(test_done)})
  ]
)