(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 apply trying to add an ending line.\n' span_id:15) 
                (Token id:Id.Lit_Chars val:'\n' span_id:16)
              )
            }
          spids: [13]
        )
      ]
    )
    (C {(.)} {(./test-lib.sh)})
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:30)
          fd: -1
          arg_word: {(test-patch)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:33)
          fd: -1
          here_begin: 
            {(word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\E' span_id:34)) (OF)}
          here_end_span_id: 44
          stdin_parts: [
            ('diff --git a/file b/file\n')
            ('--- a/file\n')
            ('+++ b/file\n')
            ('@@ -1,2 +1,3 @@\n')
            (' a\n')
            (' b\n')
            ('+c\n')
          ]
        )
      ]
    )
    (command.Simple
      words: [{(echo)} {(SQ (Token id:Id.Lit_Chars val:a span_id:49))}]
      redirects: [(redir.Redir op:(Token id:Id.Redir_Great val:'>' span_id:52) fd:-1 arg_word:{(file)})]
    )
    (command.Simple
      words: [{(echo)} {(SQ (Token id:Id.Lit_Chars val:b span_id:58))}]
      redirects: [
        (redir.Redir op:(Token id:Id.Redir_DGreat val:'>>' span_id:61) fd:-1 arg_word:{(file)})
      ]
    )
    (command.Simple
      words: [{(echo)} {(SQ (Token id:Id.Lit_Chars val:c span_id:67))}]
      redirects: [
        (redir.Redir op:(Token id:Id.Redir_DGreat val:'>>' span_id:70) fd:-1 arg_word:{(file)})
      ]
    )
    (C {(test_expect_success)} {(setup)} 
      {(SQ (Token id:Id.Lit_Chars val:'git update-index --add file' span_id:81))}
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'apply at the end' span_id:92))} 
      {(SQ (Token id:Id.Lit_Chars val:'test_must_fail git apply --index test-patch' span_id:98))}
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:104)
          fd: -1
          arg_word: {(test-patch)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:107)
          fd: -1
          here_begin: 
            {(word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\E' span_id:108)) 
              (OF)
            }
          here_end_span_id: 118
          stdin_parts: [
            ('diff a/file b/file\n')
            ('--- a/file\n')
            ('+++ b/file\n')
            ('@@ -1,2 +1,3 @@\n')
            ('+a\n')
            (' b\n')
            (' c\n')
          ]
        )
      ]
    )
    (command.Simple
      words: [
        {(echo)}
        {
          (SQ (Token id:Id.Lit_Chars val:'a\n' span_id:126) 
            (Token id:Id.Lit_Chars val:'b\n' span_id:127) (Token id:Id.Lit_Chars val:c span_id:128)
          )
        }
      ]
      redirects: [
        (redir.Redir op:(Token id:Id.Redir_Great val:'>' span_id:122) fd:-1 arg_word:{(file)})
      ]
    )
    (C {(git)} {(update-index)} {(file)})
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'apply at the beginning' span_id:141))} 
      {(SQ (Token id:Id.Lit_Chars val:'test_must_fail git apply --index test-patch' span_id:147))}
    )
    (C {(test_done)})
  ]
)