(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 checkout --patch' span_id:6))}
          spids: [4]
        )
      ]
    )
    (C {(.)} {(./lib-patch-mode.sh)})
    (C {(test_expect_success)} {(PERL)} {(SQ (Token id:Id.Lit_Chars val:setup span_id:20))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:24) 
          (Token id:Id.Lit_Chars val:'\tmkdir dir &&\n' span_id:25) (Token id:Id.Lit_Chars val:'\techo parent > dir/foo &&\n' span_id:26) 
          (Token id:Id.Lit_Chars val:'\techo dummy > bar &&\n' span_id:27) (Token id:Id.Lit_Chars val:'\tgit add bar dir/foo &&\n' span_id:28) 
          (Token id:Id.Lit_Chars val:'\tgit commit -m initial &&\n' span_id:29) (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:30) 
          (Token id:Id.Lit_Chars val:'\ttest_commit second dir/foo head &&\n' span_id:31) (Token id:Id.Lit_Chars val:'\tset_and_save_state bar bar_work bar_index &&\n' span_id:32) 
          (Token id:Id.Lit_Chars val:'\tsave_head\n' span_id:33)
        )
      }
    )
    (C {(test_expect_success)} {(PERL)} 
      {(SQ (Token id:Id.Lit_Chars val:'saying "n" does nothing' span_id:46))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:50) 
          (Token
            id: Id.Lit_Chars
            val: '\tset_and_save_state dir/foo work head &&\n'
            span_id: 51
          ) (Token id:Id.Lit_Chars val:'\t(echo n; echo n) | git checkout -p &&\n' span_id:52) 
          (Token id:Id.Lit_Chars val:'\tverify_saved_state bar &&\n' span_id:53) (Token id:Id.Lit_Chars val:'\tverify_saved_state dir/foo\n' span_id:54)
        )
      }
    )
    (C {(test_expect_success)} {(PERL)} {(SQ (Token id:Id.Lit_Chars val:'git checkout -p' span_id:63))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:67) 
          (Token
            id: Id.Lit_Chars
            val: '\t(echo n; echo y) | git checkout -p &&\n'
            span_id: 68
          ) (Token id:Id.Lit_Chars val:'\tverify_saved_state bar &&\n' span_id:69) 
          (Token id:Id.Lit_Chars val:'\tverify_state dir/foo head head\n' span_id:70)
        )
      }
    )
    (C {(test_expect_success)} {(PERL)} 
      {(SQ (Token id:Id.Lit_Chars val:'git checkout -p with staged changes' span_id:79))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:83) 
          (Token id:Id.Lit_Chars val:'\tset_state dir/foo work index &&\n' span_id:84) (Token id:Id.Lit_Chars val:'\t(echo n; echo y) | git checkout -p &&\n' span_id:85) 
          (Token id:Id.Lit_Chars val:'\tverify_saved_state bar &&\n' span_id:86) (Token id:Id.Lit_Chars val:'\tverify_state dir/foo index index\n' span_id:87)
        )
      }
    )
    (C {(test_expect_success)} {(PERL)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'git checkout -p HEAD with NO staged changes: abort'
            span_id: 96
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:100) 
          (Token
            id: Id.Lit_Chars
            val: '\tset_and_save_state dir/foo work head &&\n'
            span_id: 101
          ) (Token id:Id.Lit_Chars val:'\t(echo n; echo y; echo n) | git checkout -p HEAD &&\n' span_id:102) 
          (Token id:Id.Lit_Chars val:'\tverify_saved_state bar &&\n' span_id:103) (Token id:Id.Lit_Chars val:'\tverify_saved_state dir/foo\n' span_id:104)
        )
      }
    )
    (C {(test_expect_success)} {(PERL)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'git checkout -p HEAD with NO staged changes: apply'
            span_id: 113
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:117) 
          (Token
            id: Id.Lit_Chars
            val: '\t(echo n; echo y; echo y) | git checkout -p HEAD &&\n'
            span_id: 118
          ) (Token id:Id.Lit_Chars val:'\tverify_saved_state bar &&\n' span_id:119) 
          (Token id:Id.Lit_Chars val:'\tverify_state dir/foo head head\n' span_id:120)
        )
      }
    )
    (C {(test_expect_success)} {(PERL)} 
      {(SQ (Token id:Id.Lit_Chars val:'git checkout -p HEAD with change already staged' span_id:129))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:133) 
          (Token id:Id.Lit_Chars val:'\tset_state dir/foo index index &&\n' span_id:134) 
          (Token
            id: Id.Lit_Chars
            val: '\t# the third n is to get out in case it mistakenly does not apply\n'
            span_id: 135
          ) (Token id:Id.Lit_Chars val:'\t(echo n; echo y; echo n) | git checkout -p HEAD &&\n' span_id:136) 
          (Token id:Id.Lit_Chars val:'\tverify_saved_state bar &&\n' span_id:137) (Token id:Id.Lit_Chars val:'\tverify_state dir/foo head head\n' span_id:138)
        )
      }
    )
    (C {(test_expect_success)} {(PERL)} 
      {(SQ (Token id:Id.Lit_Chars val:'git checkout -p HEAD^' span_id:147))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:151) 
          (Token
            id: Id.Lit_Chars
            val: '\t# the third n is to get out in case it mistakenly does not apply\n'
            span_id: 152
          ) (Token id:Id.Lit_Chars val:'\t(echo n; echo y; echo n) | git checkout -p HEAD^ &&\n' span_id:153) 
          (Token id:Id.Lit_Chars val:'\tverify_saved_state bar &&\n' span_id:154) (Token id:Id.Lit_Chars val:'\tverify_state dir/foo parent parent\n' span_id:155)
        )
      }
    )
    (C {(test_expect_success)} {(PERL)} 
      {(SQ (Token id:Id.Lit_Chars val:'git checkout -p handles deletion' span_id:164))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:168) 
          (Token id:Id.Lit_Chars val:'\tset_state dir/foo work index &&\n' span_id:169) (Token id:Id.Lit_Chars val:'\trm dir/foo &&\n' span_id:170) 
          (Token
            id: Id.Lit_Chars
            val: '\t(echo n; echo y) | git checkout -p &&\n'
            span_id: 171
          ) (Token id:Id.Lit_Chars val:'\tverify_saved_state bar &&\n' span_id:172) 
          (Token id:Id.Lit_Chars val:'\tverify_state dir/foo index index\n' span_id:173)
        )
      }
    )
    (C {(test_expect_success)} {(PERL)} 
      {(SQ (Token id:Id.Lit_Chars val:'path limiting works: dir' span_id:195))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:199) 
          (Token id:Id.Lit_Chars val:'\tset_state dir/foo work head &&\n' span_id:200) (Token id:Id.Lit_Chars val:'\t(echo y; echo n) | git checkout -p dir &&\n' span_id:201) 
          (Token id:Id.Lit_Chars val:'\tverify_saved_state bar &&\n' span_id:202) (Token id:Id.Lit_Chars val:'\tverify_state dir/foo head head\n' span_id:203)
        )
      }
    )
    (C {(test_expect_success)} {(PERL)} 
      {(SQ (Token id:Id.Lit_Chars val:'path limiting works: -- dir' span_id:212))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:216) 
          (Token id:Id.Lit_Chars val:'\tset_state dir/foo work head &&\n' span_id:217) (Token id:Id.Lit_Chars val:'\t(echo y; echo n) | git checkout -p -- dir &&\n' span_id:218) 
          (Token id:Id.Lit_Chars val:'\tverify_saved_state bar &&\n' span_id:219) (Token id:Id.Lit_Chars val:'\tverify_state dir/foo head head\n' span_id:220)
        )
      }
    )
    (C {(test_expect_success)} {(PERL)} 
      {(SQ (Token id:Id.Lit_Chars val:'path limiting works: HEAD^ -- dir' span_id:229))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:233) 
          (Token
            id: Id.Lit_Chars
            val: '\t# the third n is to get out in case it mistakenly does not apply\n'
            span_id: 234
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\t(echo y; echo n; echo n) | git checkout -p HEAD^ -- dir &&\n'
            span_id: 235
          ) (Token id:Id.Lit_Chars val:'\tverify_saved_state bar &&\n' span_id:236) 
          (Token id:Id.Lit_Chars val:'\tverify_state dir/foo parent parent\n' span_id:237)
        )
      }
    )
    (C {(test_expect_success)} {(PERL)} 
      {(SQ (Token id:Id.Lit_Chars val:'path limiting works: foo inside dir' span_id:246))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:250) 
          (Token id:Id.Lit_Chars val:'\tset_state dir/foo work head &&\n' span_id:251) 
          (Token
            id: Id.Lit_Chars
            val: '\t# the third n is to get out in case it mistakenly does not apply\n'
            span_id: 252
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\t(echo y; echo n; echo n) | (cd dir && git checkout -p foo) &&\n'
            span_id: 253
          ) (Token id:Id.Lit_Chars val:'\tverify_saved_state bar &&\n' span_id:254) 
          (Token id:Id.Lit_Chars val:'\tverify_state dir/foo head head\n' span_id:255)
        )
      }
    )
    (C {(test_expect_success)} {(PERL)} 
      {(SQ (Token id:Id.Lit_Chars val:'none of this moved HEAD' span_id:264))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:268) 
          (Token id:Id.Lit_Chars val:'\tverify_saved_head\n' span_id:269)
        )
      }
    )
    (C {(test_done)})
  ]
)