(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 boundary tests\n' span_id:15) 
                (Token id:Id.Lit_Chars val:'\n' span_id:16)
              )
            }
          spids: [13]
        )
      ]
    )
    (C {(.)} {(./test-lib.sh)})
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:L)
          op: assign_op.Equal
          rhs: {(DQ ('c d e f g h i j k l m n o p q r s t u v w x'))}
          spids: [24]
        )
      ]
    )
    (C {(test_expect_success)} {(setup)} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:35) 
          (Token id:Id.Lit_Chars val:'\tfor i in b ' span_id:36)
        ) (DQ ($ Id.VSub_DollarName '$L')) 
        (SQ (Token id:Id.Lit_Chars val:' y\n' span_id:42) 
          (Token id:Id.Lit_Chars val:'\tdo\n' span_id:43) (Token id:Id.Lit_Chars val:'\t\techo $i\n' span_id:44) 
          (Token id:Id.Lit_Chars val:'\tdone >victim &&\n' span_id:45) (Token id:Id.Lit_Chars val:'\tcat victim >original &&\n' span_id:46) 
          (Token id:Id.Lit_Chars val:'\tgit update-index --add victim &&\n' span_id:47) (Token id:Id.Lit_Chars val:'\n' span_id:48) 
          (Token id:Id.Lit_Chars val:'\t# add to the head\n' span_id:49) (Token id:Id.Lit_Chars val:'\tfor i in a b ' span_id:50)
        ) (DQ ($ Id.VSub_DollarName '$L')) 
        (SQ (Token id:Id.Lit_Chars val:' y\n' span_id:56) 
          (Token id:Id.Lit_Chars val:'\tdo\n' span_id:57) (Token id:Id.Lit_Chars val:'\t\techo $i\n' span_id:58) 
          (Token id:Id.Lit_Chars val:'\tdone >victim &&\n' span_id:59) (Token id:Id.Lit_Chars val:'\tcat victim >add-a-expect &&\n' span_id:60) 
          (Token id:Id.Lit_Chars val:'\tgit diff victim >add-a-patch.with &&\n' span_id:61) (Token id:Id.Lit_Chars val:'\tgit diff --unified=0 >add-a-patch.without &&\n' span_id:62) 
          (Token id:Id.Lit_Chars val:'\n' span_id:63) (Token id:Id.Lit_Chars val:'\t# insert at line two\n' span_id:64) 
          (Token id:Id.Lit_Chars val:'\tfor i in b a ' span_id:65)
        ) (DQ ($ Id.VSub_DollarName '$L')) 
        (SQ (Token id:Id.Lit_Chars val:' y\n' span_id:71) 
          (Token id:Id.Lit_Chars val:'\tdo\n' span_id:72) (Token id:Id.Lit_Chars val:'\t\techo $i\n' span_id:73) 
          (Token id:Id.Lit_Chars val:'\tdone >victim &&\n' span_id:74) (Token id:Id.Lit_Chars val:'\tcat victim >insert-a-expect &&\n' span_id:75) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit diff victim >insert-a-patch.with &&\n'
            span_id: 76
          ) (Token id:Id.Lit_Chars val:'\tgit diff --unified=0 >insert-a-patch.without &&\n' span_id:77) 
          (Token id:Id.Lit_Chars val:'\n' span_id:78) (Token id:Id.Lit_Chars val:'\t# modify at the head\n' span_id:79) 
          (Token id:Id.Lit_Chars val:'\tfor i in a ' span_id:80)
        ) (DQ ($ Id.VSub_DollarName '$L')) 
        (SQ (Token id:Id.Lit_Chars val:' y\n' span_id:86) 
          (Token id:Id.Lit_Chars val:'\tdo\n' span_id:87) (Token id:Id.Lit_Chars val:'\t\techo $i\n' span_id:88) 
          (Token id:Id.Lit_Chars val:'\tdone >victim &&\n' span_id:89) (Token id:Id.Lit_Chars val:'\tcat victim >mod-a-expect &&\n' span_id:90) 
          (Token id:Id.Lit_Chars val:'\tgit diff victim >mod-a-patch.with &&\n' span_id:91) (Token id:Id.Lit_Chars val:'\tgit diff --unified=0 >mod-a-patch.without &&\n' span_id:92) 
          (Token id:Id.Lit_Chars val:'\n' span_id:93) (Token id:Id.Lit_Chars val:'\t# remove from the head\n' span_id:94) 
          (Token id:Id.Lit_Chars val:'\tfor i in ' span_id:95)
        ) (DQ ($ Id.VSub_DollarName '$L')) 
        (SQ (Token id:Id.Lit_Chars val:' y\n' span_id:101) 
          (Token id:Id.Lit_Chars val:'\tdo\n' span_id:102) (Token id:Id.Lit_Chars val:'\t\techo $i\n' span_id:103) 
          (Token id:Id.Lit_Chars val:'\tdone >victim &&\n' span_id:104) (Token id:Id.Lit_Chars val:'\tcat victim >del-a-expect &&\n' span_id:105) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit diff victim >del-a-patch.with &&\n'
            span_id: 106
          ) (Token id:Id.Lit_Chars val:'\tgit diff --unified=0 >del-a-patch.without &&\n' span_id:107) 
          (Token id:Id.Lit_Chars val:'\n' span_id:108) (Token id:Id.Lit_Chars val:'\t# add to the tail\n' span_id:109) 
          (Token id:Id.Lit_Chars val:'\tfor i in b ' span_id:110)
        ) (DQ ($ Id.VSub_DollarName '$L')) 
        (SQ (Token id:Id.Lit_Chars val:' y z\n' span_id:116) 
          (Token id:Id.Lit_Chars val:'\tdo\n' span_id:117) (Token id:Id.Lit_Chars val:'\t\techo $i\n' span_id:118) 
          (Token id:Id.Lit_Chars val:'\tdone >victim &&\n' span_id:119) (Token id:Id.Lit_Chars val:'\tcat victim >add-z-expect &&\n' span_id:120) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit diff victim >add-z-patch.with &&\n'
            span_id: 121
          ) (Token id:Id.Lit_Chars val:'\tgit diff --unified=0 >add-z-patch.without &&\n' span_id:122) 
          (Token id:Id.Lit_Chars val:'\n' span_id:123) (Token id:Id.Lit_Chars val:'\t# modify at the tail\n' span_id:124) 
          (Token id:Id.Lit_Chars val:'\tfor i in b ' span_id:125)
        ) (DQ ($ Id.VSub_DollarName '$L')) 
        (SQ (Token id:Id.Lit_Chars val:' z\n' span_id:131) 
          (Token id:Id.Lit_Chars val:'\tdo\n' span_id:132) (Token id:Id.Lit_Chars val:'\t\techo $i\n' span_id:133) 
          (Token id:Id.Lit_Chars val:'\tdone >victim &&\n' span_id:134) (Token id:Id.Lit_Chars val:'\tcat victim >mod-z-expect &&\n' span_id:135) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit diff victim >mod-z-patch.with &&\n'
            span_id: 136
          ) (Token id:Id.Lit_Chars val:'\tgit diff --unified=0 >mod-z-patch.without &&\n' span_id:137) 
          (Token id:Id.Lit_Chars val:'\n' span_id:138) (Token id:Id.Lit_Chars val:'\t# remove from the tail\n' span_id:139) 
          (Token id:Id.Lit_Chars val:'\tfor i in b ' span_id:140)
        ) (DQ ($ Id.VSub_DollarName '$L')) 
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:146) 
          (Token id:Id.Lit_Chars val:'\tdo\n' span_id:147) (Token id:Id.Lit_Chars val:'\t\techo $i\n' span_id:148) 
          (Token id:Id.Lit_Chars val:'\tdone >victim &&\n' span_id:149) (Token id:Id.Lit_Chars val:'\tcat victim >del-z-expect &&\n' span_id:150) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit diff victim >del-z-patch.with &&\n'
            span_id: 151
          ) (Token id:Id.Lit_Chars val:'\tgit diff --unified=0 >del-z-patch.without\n' span_id:152) 
          (Token id:Id.Lit_Chars val:'\n' span_id:153) (Token id:Id.Lit_Chars val:'\t# done\n' span_id:154)
        )
      }
    )
    (command.ForEach
      iter_name: with
      iter_words: [{(with)} {(without)}]
      do_arg_iter: F
      body: 
        (command.DoGroup
          children: [
            (command.Case
              to_match: {(DQ ($ Id.VSub_DollarName '$with'))}
              arms: [
                (case_arm
                  pat_list: [{(with)}]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:u)
                          op: assign_op.Equal
                          rhs: (word.Empty)
                          spids: [183]
                        )
                      ]
                    )
                  ]
                  spids: [180 181 185 -1]
                )
                (case_arm
                  pat_list: [{(without)}]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:u)
                          op: assign_op.Equal
                          rhs: {(SQ (Token id:Id.Lit_Chars val:'--unidiff-zero ' span_id:193))}
                          spids: [191]
                        )
                      ]
                    )
                  ]
                  spids: [188 189 196 -1]
                )
              ]
            )
            (command.ForEach
              iter_name: kind
              iter_words: [{(add-a)} {(add-z)} {(insert-a)} {(mod-a)} {(mod-z)} {(del-a)} {(del-z)}]
              do_arg_iter: F
              body: 
                (command.DoGroup
                  children: [
                    (C {(test_expect_success)} 
                      {
                        (DQ ('apply ') ($ Id.VSub_DollarName '$kind') ('-patch ') 
                          ($ Id.VSub_DollarName '$with') (' context')
                        )
                      } 
                      {
                        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:237) 
                          (Token
                            id: Id.Lit_Chars
                            val: '\t\t\tcat original >victim &&\n'
                            span_id: 238
                          ) (Token id:Id.Lit_Chars val:'\t\t\tgit update-index victim &&\n' span_id:239) 
                          (Token
                            id: Id.Lit_Chars
                            val: '\t\t\tgit apply --index '
                            span_id: 240
                          )
                        ) 
                        (DQ ($ Id.VSub_DollarName '$u') ($ Id.VSub_DollarName '$kind') (-patch.) 
                          ($ Id.VSub_DollarName '$with')
                        ) 
                        (SQ (Token id:Id.Lit_Chars val:' &&\n' span_id:249) 
                          (Token
                            id: Id.Lit_Chars
                            val: '\t\t\ttest_cmp '
                            span_id: 250
                          )
                        ) (DQ ($ Id.VSub_DollarName '$kind')) 
                        (SQ (Token id:Id.Lit_Chars val:'-expect victim\n' span_id:256) 
                          (Token id:Id.Lit_Chars val:'\t\t' span_id:257)
                        )
                      }
                    )
                  ]
                )
            )
          ]
        )
    )
    (command.ForEach
      iter_name: kind
      iter_words: [{(add-a)} {(add-z)} {(insert-a)} {(mod-a)} {(mod-z)} {(del-a)} {(del-z)}]
      do_arg_iter: F
      body: 
        (command.DoGroup
          children: [
            (C {(rm)} {(-f)} {($ Id.VSub_DollarName '$kind') (-ng.without)})
            (command.Simple
              words: [
                {(sed)}
                {(-e)}
                {(DQ ('s/^diff --git /diff /'))}
                {(-e)}
                {(SQ (Token id:Id.Lit_Chars val:'/^index /d' span_id:310))}
              ]
              redirects: [
                (redir.Redir
                  op: (Token id:Id.Redir_Less val:'<' span_id:315)
                  fd: -1
                  arg_word: {($ Id.VSub_DollarName '$kind') (-patch.without)}
                )
                (redir.Redir
                  op: (Token id:Id.Redir_Great val:'>' span_id:319)
                  fd: -1
                  arg_word: {($ Id.VSub_DollarName '$kind') (-ng.without)}
                )
              ]
            )
            (C {(test_expect_success)} 
              {(DQ ('apply non-git ') ($ Id.VSub_DollarName '$kind') ('-patch without context'))} 
              {
                (SQ (Token id:Id.Lit_Chars val:'\n' span_id:333) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\tcat original >victim &&\n'
                    span_id: 334
                  ) (Token id:Id.Lit_Chars val:'\t\tgit update-index victim &&\n' span_id:335) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\tgit apply --unidiff-zero --index '
                    span_id: 336
                  )
                ) (DQ ($ Id.VSub_DollarName '$kind') (-ng.without)) 
                (SQ (Token id:Id.Lit_Chars val:' &&\n' span_id:343) 
                  (Token id:Id.Lit_Chars val:'\t\ttest_cmp ' span_id:344)
                ) (DQ ($ Id.VSub_DollarName '$kind')) 
                (SQ (Token id:Id.Lit_Chars val:'-expect victim\n' span_id:350) 
                  (Token id:Id.Lit_Chars val:'\t' span_id:351)
                )
              }
            )
          ]
        )
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'two lines' span_id:360))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:364) (Token id:Id.Lit_Chars val:'\n' span_id:365) 
          (Token id:Id.Lit_Chars val:'\t>file &&\n' span_id:366) (Token id:Id.Lit_Chars val:'\tgit add file &&\n' span_id:367) 
          (Token id:Id.Lit_Chars val:'\techo aaa >file &&\n' span_id:368) (Token id:Id.Lit_Chars val:'\tgit diff >patch &&\n' span_id:369) 
          (Token id:Id.Lit_Chars val:'\tgit add file &&\n' span_id:370) (Token id:Id.Lit_Chars val:'\techo bbb >file &&\n' span_id:371) 
          (Token id:Id.Lit_Chars val:'\tgit add file &&\n' span_id:372) (Token id:Id.Lit_Chars val:'\ttest_must_fail git apply --check patch\n' span_id:373) 
          (Token id:Id.Lit_Chars val:'\n' span_id:374)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'apply patch with 3 context lines matching at end'
            span_id: 381
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:385) 
          (Token
            id: Id.Lit_Chars
            val: '\t{ echo a; echo b; echo c; echo d; } >file &&\n'
            span_id: 386
          ) (Token id:Id.Lit_Chars val:'\tgit add file &&\n' span_id:387) 
          (Token id:Id.Lit_Chars val:'\techo e >>file &&\n' span_id:388) (Token id:Id.Lit_Chars val:'\tgit diff >patch &&\n' span_id:389) 
          (Token id:Id.Lit_Chars val:'\t>file &&\n' span_id:390) (Token id:Id.Lit_Chars val:'\ttest_must_fail git apply patch\n' span_id:391)
        )
      }
    )
    (C {(test_done)})
  ]
)