(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 --whitespace=strip and configuration file.\n'
                  span_id: 15
                ) (Token id:Id.Lit_Chars val:'\n' span_id:16)
              )
            }
          spids: [13]
        )
      ]
    )
    (C {(.)} {(./test-lib.sh)})
    (C {(test_expect_success)} {(setup)} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:30) 
          (Token id:Id.Lit_Chars val:'\tmkdir sub &&\n' span_id:31) (Token id:Id.Lit_Chars val:'\techo A >sub/file1 &&\n' span_id:32) 
          (Token id:Id.Lit_Chars val:'\tcp sub/file1 saved &&\n' span_id:33) (Token id:Id.Lit_Chars val:'\tgit add sub/file1 &&\n' span_id:34) 
          (Token id:Id.Lit_Chars val:'\techo "B " >sub/file1 &&\n' span_id:35) (Token id:Id.Lit_Chars val:'\tgit diff >patch.file\n' span_id:36)
        )
      }
    )
    (command.AndOr
      ops: [Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp]
      children: [
        (command.Simple
          words: [
            {(tr)}
            {(SQ (Token id:Id.Lit_Chars val:_ span_id:46))}
            {(SQ (Token id:Id.Lit_Chars val:' ' span_id:50))}
          ]
          redirects: [
            (redir.Redir
              op: (Token id:Id.Redir_Great val:'>' span_id:53)
              fd: -1
              arg_word: {(gpatch.file)}
            )
            (redir.HereDoc
              op: (Token id:Id.Redir_DLess val:'<<' span_id:56)
              fd: -1
              here_begin: 
                {(word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\E' span_id:57)) 
                  (OF)
                }
              here_end_span_id: 67
              stdin_parts: [
                ('--- file1\t2007-02-21 01:04:24.000000000 -0800\n')
                ('+++ file1+\t2007-02-21 01:07:44.000000000 -0800\n')
                ('@@ -1 +1 @@\n')
                ('-A\n')
                ('+B_\n')
              ]
            )
          ]
        )
        (command.Simple
          words: [
            {(sed)}
            {(-e)}
            {(SQ (Token id:Id.Lit_Chars val:'s|file1|sub/&|' span_id:74))}
            {(gpatch.file)}
          ]
          redirects: [
            (redir.Redir
              op: (Token id:Id.Redir_Great val:'>' span_id:79)
              fd: -1
              arg_word: {(gpatch-sub.file)}
            )
          ]
        )
        (command.Simple
          words: [
            {(sed)}
            {(-e)}
            {
              (SQ (Token id:Id.Lit_Chars val:'\n' span_id:89) 
                (Token id:Id.Lit_Chars val:'\t/^--- /s|file1|a/sub/&|\n' span_id:90) (Token id:Id.Lit_Chars val:'\t/^+++ /s|file1|b/sub/&|\n' span_id:91)
              )
            }
            {(gpatch.file)}
          ]
          redirects: [
            (redir.Redir
              op: (Token id:Id.Redir_Great val:'>' span_id:96)
              fd: -1
              arg_word: {(gpatch-ab-sub.file)}
            )
          ]
        )
        (command.ShFunction
          name: check_result
          body: 
            (command.BraceGroup
              children: [
                (command.If
                  arms: [
                    (if_arm
                      cond: [(C {(grep)} {(DQ (' '))} {(DQ ($ Id.VSub_Number '$1'))})]
                      action: [(C {(echo)} {(DQ ('Eh?'))}) (C {(false)})]
                      spids: [110 123]
                    )
                    (if_arm
                      cond: [(C {(grep)} {(B)} {(DQ ($ Id.VSub_Number '$1'))})]
                      action: [(C {(echo)} {(Happy)})]
                      spids: [136 147]
                    )
                  ]
                  else_action: [(C {(echo)} {(DQ ('Huh?'))}) (C {(false)})]
                )
              ]
            )
        )
      ]
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'apply --whitespace=strip' span_id:176))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:180) (Token id:Id.Lit_Chars val:'\n' span_id:181) 
          (Token id:Id.Lit_Chars val:'\trm -f sub/file1 &&\n' span_id:182) (Token id:Id.Lit_Chars val:'\tcp saved sub/file1 &&\n' span_id:183) 
          (Token id:Id.Lit_Chars val:'\tgit update-index --refresh &&\n' span_id:184) (Token id:Id.Lit_Chars val:'\n' span_id:185) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit apply --whitespace=strip patch.file &&\n'
            span_id: 186
          ) (Token id:Id.Lit_Chars val:'\tcheck_result sub/file1\n' span_id:187)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'apply --whitespace=strip from config' span_id:194))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:198) (Token id:Id.Lit_Chars val:'\n' span_id:199) 
          (Token id:Id.Lit_Chars val:'\trm -f sub/file1 &&\n' span_id:200) (Token id:Id.Lit_Chars val:'\tcp saved sub/file1 &&\n' span_id:201) 
          (Token id:Id.Lit_Chars val:'\tgit update-index --refresh &&\n' span_id:202) (Token id:Id.Lit_Chars val:'\n' span_id:203) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit config apply.whitespace strip &&\n'
            span_id: 204
          ) (Token id:Id.Lit_Chars val:'\tgit apply patch.file &&\n' span_id:205) 
          (Token id:Id.Lit_Chars val:'\tcheck_result sub/file1\n' span_id:206)
        )
      }
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:D)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:211)
                command_list: (command.CommandList children:[(C {(pwd)})])
              )
            }
          spids: [210]
        )
      ]
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'apply --whitespace=strip in subdir' span_id:219))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:223) (Token id:Id.Lit_Chars val:'\n' span_id:224) 
          (Token id:Id.Lit_Chars val:'\tcd "$D" &&\n' span_id:225) (Token id:Id.Lit_Chars val:'\tgit config --unset-all apply.whitespace &&\n' span_id:226) 
          (Token id:Id.Lit_Chars val:'\trm -f sub/file1 &&\n' span_id:227) (Token id:Id.Lit_Chars val:'\tcp saved sub/file1 &&\n' span_id:228) 
          (Token id:Id.Lit_Chars val:'\tgit update-index --refresh &&\n' span_id:229) (Token id:Id.Lit_Chars val:'\n' span_id:230) (Token id:Id.Lit_Chars val:'\tcd sub &&\n' span_id:231) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit apply --whitespace=strip ../patch.file &&\n'
            span_id: 232
          ) (Token id:Id.Lit_Chars val:'\tcheck_result file1\n' span_id:233)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'apply --whitespace=strip from config in subdir' span_id:240))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:244) (Token id:Id.Lit_Chars val:'\n' span_id:245) 
          (Token id:Id.Lit_Chars val:'\tcd "$D" &&\n' span_id:246) (Token id:Id.Lit_Chars val:'\tgit config apply.whitespace strip &&\n' span_id:247) 
          (Token id:Id.Lit_Chars val:'\trm -f sub/file1 &&\n' span_id:248) (Token id:Id.Lit_Chars val:'\tcp saved sub/file1 &&\n' span_id:249) 
          (Token id:Id.Lit_Chars val:'\tgit update-index --refresh &&\n' span_id:250) (Token id:Id.Lit_Chars val:'\n' span_id:251) (Token id:Id.Lit_Chars val:'\tcd sub &&\n' span_id:252) 
          (Token id:Id.Lit_Chars val:'\tgit apply ../patch.file &&\n' span_id:253) (Token id:Id.Lit_Chars val:'\tcheck_result file1\n' span_id:254)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'same in subdir but with traditional patch input' span_id:261))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:265) (Token id:Id.Lit_Chars val:'\n' span_id:266) 
          (Token id:Id.Lit_Chars val:'\tcd "$D" &&\n' span_id:267) (Token id:Id.Lit_Chars val:'\tgit config apply.whitespace strip &&\n' span_id:268) 
          (Token id:Id.Lit_Chars val:'\trm -f sub/file1 &&\n' span_id:269) (Token id:Id.Lit_Chars val:'\tcp saved sub/file1 &&\n' span_id:270) 
          (Token id:Id.Lit_Chars val:'\tgit update-index --refresh &&\n' span_id:271) (Token id:Id.Lit_Chars val:'\n' span_id:272) (Token id:Id.Lit_Chars val:'\tcd sub &&\n' span_id:273) 
          (Token id:Id.Lit_Chars val:'\tgit apply ../gpatch.file &&\n' span_id:274) (Token id:Id.Lit_Chars val:'\tcheck_result file1\n' span_id:275)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'same but with traditional patch input of depth 1'
            span_id: 282
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:286) (Token id:Id.Lit_Chars val:'\n' span_id:287) 
          (Token id:Id.Lit_Chars val:'\tcd "$D" &&\n' span_id:288) (Token id:Id.Lit_Chars val:'\tgit config apply.whitespace strip &&\n' span_id:289) 
          (Token id:Id.Lit_Chars val:'\trm -f sub/file1 &&\n' span_id:290) (Token id:Id.Lit_Chars val:'\tcp saved sub/file1 &&\n' span_id:291) 
          (Token id:Id.Lit_Chars val:'\tgit update-index --refresh &&\n' span_id:292) (Token id:Id.Lit_Chars val:'\n' span_id:293) (Token id:Id.Lit_Chars val:'\tcd sub &&\n' span_id:294) 
          (Token id:Id.Lit_Chars val:'\tgit apply ../gpatch-sub.file &&\n' span_id:295) (Token id:Id.Lit_Chars val:'\tcheck_result file1\n' span_id:296)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'same but with traditional patch input of depth 2'
            span_id: 303
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:307) (Token id:Id.Lit_Chars val:'\n' span_id:308) 
          (Token id:Id.Lit_Chars val:'\tcd "$D" &&\n' span_id:309) (Token id:Id.Lit_Chars val:'\tgit config apply.whitespace strip &&\n' span_id:310) 
          (Token id:Id.Lit_Chars val:'\trm -f sub/file1 &&\n' span_id:311) (Token id:Id.Lit_Chars val:'\tcp saved sub/file1 &&\n' span_id:312) 
          (Token id:Id.Lit_Chars val:'\tgit update-index --refresh &&\n' span_id:313) (Token id:Id.Lit_Chars val:'\n' span_id:314) (Token id:Id.Lit_Chars val:'\tcd sub &&\n' span_id:315) 
          (Token id:Id.Lit_Chars val:'\tgit apply ../gpatch-ab-sub.file &&\n' span_id:316) (Token id:Id.Lit_Chars val:'\tcheck_result file1\n' span_id:317)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'same but with traditional patch input of depth 1'
            span_id: 324
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:328) (Token id:Id.Lit_Chars val:'\n' span_id:329) 
          (Token id:Id.Lit_Chars val:'\tcd "$D" &&\n' span_id:330) (Token id:Id.Lit_Chars val:'\tgit config apply.whitespace strip &&\n' span_id:331) 
          (Token id:Id.Lit_Chars val:'\trm -f sub/file1 &&\n' span_id:332) (Token id:Id.Lit_Chars val:'\tcp saved sub/file1 &&\n' span_id:333) 
          (Token id:Id.Lit_Chars val:'\tgit update-index --refresh &&\n' span_id:334) (Token id:Id.Lit_Chars val:'\n' span_id:335) 
          (Token id:Id.Lit_Chars val:'\tgit apply -p0 gpatch-sub.file &&\n' span_id:336) (Token id:Id.Lit_Chars val:'\tcheck_result sub/file1\n' span_id:337)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'same but with traditional patch input of depth 2'
            span_id: 344
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:348) (Token id:Id.Lit_Chars val:'\n' span_id:349) 
          (Token id:Id.Lit_Chars val:'\tcd "$D" &&\n' span_id:350) (Token id:Id.Lit_Chars val:'\tgit config apply.whitespace strip &&\n' span_id:351) 
          (Token id:Id.Lit_Chars val:'\trm -f sub/file1 &&\n' span_id:352) (Token id:Id.Lit_Chars val:'\tcp saved sub/file1 &&\n' span_id:353) 
          (Token id:Id.Lit_Chars val:'\tgit update-index --refresh &&\n' span_id:354) (Token id:Id.Lit_Chars val:'\n' span_id:355) 
          (Token id:Id.Lit_Chars val:'\tgit apply gpatch-ab-sub.file &&\n' span_id:356) (Token id:Id.Lit_Chars val:'\tcheck_result sub/file1\n' span_id:357)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'in subdir with traditional patch input' span_id:364))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:368) 
          (Token id:Id.Lit_Chars val:'\tcd "$D" &&\n' span_id:369) (Token id:Id.Lit_Chars val:'\tgit config apply.whitespace strip &&\n' span_id:370) 
          (Token id:Id.Lit_Chars val:'\tcat >.gitattributes <<-EOF &&\n' span_id:371) (Token id:Id.Lit_Chars val:'\t/* whitespace=blank-at-eol\n' span_id:372) 
          (Token id:Id.Lit_Chars val:'\tsub/* whitespace=-blank-at-eol\n' span_id:373) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:374) 
          (Token id:Id.Lit_Chars val:'\trm -f sub/file1 &&\n' span_id:375) (Token id:Id.Lit_Chars val:'\tcp saved sub/file1 &&\n' span_id:376) 
          (Token id:Id.Lit_Chars val:'\tgit update-index --refresh &&\n' span_id:377) (Token id:Id.Lit_Chars val:'\n' span_id:378) (Token id:Id.Lit_Chars val:'\tcd sub &&\n' span_id:379) 
          (Token id:Id.Lit_Chars val:'\tgit apply ../gpatch.file &&\n' span_id:380) (Token id:Id.Lit_Chars val:'\techo "B " >expect &&\n' span_id:381) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect file1\n' span_id:382)
        )
      }
    )
    (C {(test_done)})
  ]
)