(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 notices removal patches generated by GNU diff'
                  span_id: 12
                )
              )
            }
          spids: [10]
        )
      ]
    )
    (C {(.)} {(./test-lib.sh)})
    (C {(test_expect_success)} {(setup)} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:26) 
          (Token id:Id.Lit_Chars val:'\tcat <<-EOF >c &&\n' span_id:27) (Token id:Id.Lit_Chars val:'\tdiff -ruN a/file b/file\n' span_id:28) 
          (Token id:Id.Lit_Chars val:'\t--- a/file\tTS0\n' span_id:29) (Token id:Id.Lit_Chars val:'\t+++ b/file\tTS1\n' span_id:30) 
          (Token id:Id.Lit_Chars val:'\t@@ -0,0 +1 @@\n' span_id:31) (Token id:Id.Lit_Chars val:'\t+something\n' span_id:32) 
          (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:33) (Token id:Id.Lit_Chars val:'\n' span_id:34) 
          (Token id:Id.Lit_Chars val:'\tcat <<-EOF >d &&\n' span_id:35) (Token id:Id.Lit_Chars val:'\tdiff -ruN a/file b/file\n' span_id:36) 
          (Token id:Id.Lit_Chars val:'\t--- a/file\tTS0\n' span_id:37) (Token id:Id.Lit_Chars val:'\t+++ b/file\tTS1\n' span_id:38) 
          (Token id:Id.Lit_Chars val:'\t@@ -1 +0,0 @@\n' span_id:39) (Token id:Id.Lit_Chars val:'\t-something\n' span_id:40) 
          (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:41) (Token id:Id.Lit_Chars val:'\n' span_id:42) 
          (Token
            id: Id.Lit_Chars
            val: '\ttimeWest="1982-09-16 07:00:00.000000000 -0800" &&\n'
            span_id: 43
          ) (Token id:Id.Lit_Chars val:'\t timeGMT="1982-09-16 15:00:00.000000000 +0000" &&\n' span_id:44) 
          (Token
            id: Id.Lit_Chars
            val: '\ttimeEast="1982-09-17 00:00:00.000000000 +0900" &&\n'
            span_id: 45
          ) (Token id:Id.Lit_Chars val:'\n' span_id:46) 
          (Token
            id: Id.Lit_Chars
            val: '\tepocWest="1969-12-31 16:00:00.000000000 -0800" &&\n'
            span_id: 47
          ) (Token id:Id.Lit_Chars val:'\t epocGMT="1970-01-01 00:00:00.000000000 +0000" &&\n' span_id:48) 
          (Token
            id: Id.Lit_Chars
            val: '\tepocEast="1970-01-01 09:00:00.000000000 +0900" &&\n'
            span_id: 49
          ) (Token id:Id.Lit_Chars val:'\tepocWest2="1969-12-31 16:00:00 -08:00" &&\n' span_id:50) 
          (Token id:Id.Lit_Chars val:'\n' span_id:51) 
          (Token
            id: Id.Lit_Chars
            val: '\tsed -e "s/TS0/$epocWest/" -e "s/TS1/$timeWest/" <c >createWest.patch &&\n'
            span_id: 52
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\tsed -e "s/TS0/$epocEast/" -e "s/TS1/$timeEast/" <c >createEast.patch &&\n'
            span_id: 53
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\tsed -e "s/TS0/$epocGMT/" -e "s/TS1/$timeGMT/" <c >createGMT.patch &&\n'
            span_id: 54
          ) (Token id:Id.Lit_Chars val:'\n' span_id:55) 
          (Token
            id: Id.Lit_Chars
            val: '\tsed -e "s/TS0/$timeWest/" -e "s/TS1/$timeWest/" <c >addWest.patch &&\n'
            span_id: 56
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\tsed -e "s/TS0/$timeEast/" -e "s/TS1/$timeEast/" <c >addEast.patch &&\n'
            span_id: 57
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\tsed -e "s/TS0/$timeGMT/" -e "s/TS1/$timeGMT/" <c >addGMT.patch &&\n'
            span_id: 58
          ) (Token id:Id.Lit_Chars val:'\n' span_id:59) 
          (Token
            id: Id.Lit_Chars
            val: '\tsed -e "s/TS0/$timeWest/" -e "s/TS1/$timeWest/" <d >emptyWest.patch &&\n'
            span_id: 60
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\tsed -e "s/TS0/$timeEast/" -e "s/TS1/$timeEast/" <d >emptyEast.patch &&\n'
            span_id: 61
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\tsed -e "s/TS0/$timeGMT/" -e "s/TS1/$timeGMT/" <d >emptyGMT.patch &&\n'
            span_id: 62
          ) (Token id:Id.Lit_Chars val:'\n' span_id:63) 
          (Token
            id: Id.Lit_Chars
            val: '\tsed -e "s/TS0/$timeWest/" -e "s/TS1/$epocWest/" <d >removeWest.patch &&\n'
            span_id: 64
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\tsed -e "s/TS0/$timeEast/" -e "s/TS1/$epocEast/" <d >removeEast.patch &&\n'
            span_id: 65
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\tsed -e "s/TS0/$timeGMT/" -e "s/TS1/$epocGMT/" <d >removeGMT.patch &&\n'
            span_id: 66
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\tsed -e "s/TS0/$timeWest/" -e "s/TS1/$epocWest2/" <d >removeWest2.patch &&\n'
            span_id: 67
          ) (Token id:Id.Lit_Chars val:'\n' span_id:68) 
          (Token id:Id.Lit_Chars val:'\techo something >something &&\n' span_id:69) (Token id:Id.Lit_Chars val:'\t>empty\n' span_id:70)
        )
      }
    )
    (command.ForEach
      iter_name: patch
      iter_words: [{(Id.Lit_Star '*') (.patch)}]
      do_arg_iter: F
      body: 
        (command.DoGroup
          children: [
            (C {(test_expect_success)} {(DQ ('test ') ($ Id.VSub_DollarName '$patch'))} 
              {
                (SQ (Token id:Id.Lit_Chars val:'\n' span_id:94) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\trm -f file .git/index &&\n'
                    span_id: 95
                  ) (Token id:Id.Lit_Chars val:'\t\tcase "$patch" in\n' span_id:96) 
                  (Token id:Id.Lit_Chars val:'\t\tcreate*)\n' span_id:97) (Token id:Id.Lit_Chars val:'\t\t\t# must be able to create\n' span_id:98) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\t\tgit apply --index $patch &&\n'
                    span_id: 99
                  ) (Token id:Id.Lit_Chars val:'\t\t\ttest_cmp file something &&\n' span_id:100) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\t\t# must notice the file is already there\n'
                    span_id: 101
                  ) (Token id:Id.Lit_Chars val:'\t\t\t>file &&\n' span_id:102) 
                  (Token id:Id.Lit_Chars val:'\t\t\tgit add file &&\n' span_id:103) (Token id:Id.Lit_Chars val:'\t\t\ttest_must_fail git apply $patch\n' span_id:104) 
                  (Token id:Id.Lit_Chars val:'\t\t\t;;\n' span_id:105) (Token id:Id.Lit_Chars val:'\t\tadd*)\n' span_id:106) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\t\t# must be able to create or patch\n'
                    span_id: 107
                  ) (Token id:Id.Lit_Chars val:'\t\t\tgit apply $patch &&\n' span_id:108) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\t\ttest_cmp file something &&\n'
                    span_id: 109
                  ) (Token id:Id.Lit_Chars val:'\t\t\t>file &&\n' span_id:110) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\t\tgit apply $patch &&\n'
                    span_id: 111
                  ) (Token id:Id.Lit_Chars val:'\t\t\ttest_cmp file something\n' span_id:112) 
                  (Token id:Id.Lit_Chars val:'\t\t\t;;\n' span_id:113) (Token id:Id.Lit_Chars val:'\t\tempty*)\n' span_id:114) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\t\t# must leave an empty file\n'
                    span_id: 115
                  ) (Token id:Id.Lit_Chars val:'\t\t\tcat something >file &&\n' span_id:116) 
                  (Token id:Id.Lit_Chars val:'\t\t\tgit add file &&\n' span_id:117) (Token id:Id.Lit_Chars val:'\t\t\tgit apply --index $patch &&\n' span_id:118) 
                  (Token id:Id.Lit_Chars val:'\t\t\ttest -f file &&\n' span_id:119) (Token id:Id.Lit_Chars val:'\t\t\ttest_cmp empty file\n' span_id:120) 
                  (Token id:Id.Lit_Chars val:'\t\t\t;;\n' span_id:121) (Token id:Id.Lit_Chars val:'\t\tremove*)\n' span_id:122) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\t\t# must remove the file\n'
                    span_id: 123
                  ) (Token id:Id.Lit_Chars val:'\t\t\tcat something >file &&\n' span_id:124) 
                  (Token id:Id.Lit_Chars val:'\t\t\tgit add file &&\n' span_id:125) (Token id:Id.Lit_Chars val:'\t\t\tgit apply --index $patch &&\n' span_id:126) 
                  (Token id:Id.Lit_Chars val:'\t\t\t! test -f file\n' span_id:127) (Token id:Id.Lit_Chars val:'\t\t\t;;\n' span_id:128) 
                  (Token id:Id.Lit_Chars val:'\t\tesac\n' span_id:129) (Token id:Id.Lit_Chars val:'\t' span_id:130)
                )
              }
            )
          ]
        )
    )
    (C {(test_done)})
  ]
)