(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 reset --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:19))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:23) 
          (Token id:Id.Lit_Chars val:'\tmkdir dir &&\n' span_id:24) (Token id:Id.Lit_Chars val:'\techo parent > dir/foo &&\n' span_id:25) 
          (Token id:Id.Lit_Chars val:'\techo dummy > bar &&\n' span_id:26) (Token id:Id.Lit_Chars val:'\tgit add dir &&\n' span_id:27) 
          (Token id:Id.Lit_Chars val:'\tgit commit -m initial &&\n' span_id:28) (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:29) 
          (Token id:Id.Lit_Chars val:'\ttest_commit second dir/foo head &&\n' span_id:30) (Token id:Id.Lit_Chars val:'\tset_and_save_state bar bar_work bar_index &&\n' span_id:31) 
          (Token id:Id.Lit_Chars val:'\tsave_head\n' span_id:32)
        )
      }
    )
    (C {(test_expect_success)} {(PERL)} 
      {(SQ (Token id:Id.Lit_Chars val:'saying "n" does nothing' span_id:45))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:49) 
          (Token
            id: Id.Lit_Chars
            val: '\tset_and_save_state dir/foo work work &&\n'
            span_id: 50
          ) (Token id:Id.Lit_Chars val:'\t(echo n; echo n) | git reset -p &&\n' span_id:51) 
          (Token id:Id.Lit_Chars val:'\tverify_saved_state dir/foo &&\n' span_id:52) (Token id:Id.Lit_Chars val:'\tverify_saved_state bar\n' span_id:53)
        )
      }
    )
    (C {(test_expect_success)} {(PERL)} {(SQ (Token id:Id.Lit_Chars val:'git reset -p' span_id:62))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:66) 
          (Token
            id: Id.Lit_Chars
            val: '\t(echo n; echo y) | git reset -p >output &&\n'
            span_id: 67
          ) (Token id:Id.Lit_Chars val:'\tverify_state dir/foo work head &&\n' span_id:68) 
          (Token id:Id.Lit_Chars val:'\tverify_saved_state bar &&\n' span_id:69) (Token id:Id.Lit_Chars val:'\ttest_i18ngrep "Unstage" output\n' span_id:70)
        )
      }
    )
    (C {(test_expect_success)} {(PERL)} 
      {(SQ (Token id:Id.Lit_Chars val:'git reset -p HEAD^' span_id:79))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:83) 
          (Token
            id: Id.Lit_Chars
            val: '\t(echo n; echo y) | git reset -p HEAD^ >output &&\n'
            span_id: 84
          ) (Token id:Id.Lit_Chars val:'\tverify_state dir/foo work parent &&\n' span_id:85) 
          (Token id:Id.Lit_Chars val:'\tverify_saved_state bar &&\n' span_id:86) (Token id:Id.Lit_Chars val:'\ttest_i18ngrep "Apply" output\n' span_id:87)
        )
      }
    )
    (C {(test_expect_success)} {(PERL)} {(SQ (Token id:Id.Lit_Chars val:'git reset -p dir' span_id:109))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:113) 
          (Token id:Id.Lit_Chars val:'\tset_state dir/foo work work &&\n' span_id:114) (Token id:Id.Lit_Chars val:'\t(echo y; echo n) | git reset -p dir &&\n' span_id:115) 
          (Token id:Id.Lit_Chars val:'\tverify_state dir/foo work head &&\n' span_id:116) (Token id:Id.Lit_Chars val:'\tverify_saved_state bar\n' span_id:117)
        )
      }
    )
    (C {(test_expect_success)} {(PERL)} 
      {(SQ (Token id:Id.Lit_Chars val:'git reset -p -- foo (inside dir)' span_id:126))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:130) 
          (Token id:Id.Lit_Chars val:'\tset_state dir/foo work work &&\n' span_id:131) (Token id:Id.Lit_Chars val:'\t(echo y; echo n) | (cd dir && git reset -p -- foo) &&\n' span_id:132) 
          (Token id:Id.Lit_Chars val:'\tverify_state dir/foo work head &&\n' span_id:133) (Token id:Id.Lit_Chars val:'\tverify_saved_state bar\n' span_id:134)
        )
      }
    )
    (C {(test_expect_success)} {(PERL)} 
      {(SQ (Token id:Id.Lit_Chars val:'git reset -p HEAD^ -- dir' span_id:143))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:147) 
          (Token
            id: Id.Lit_Chars
            val: '\t(echo y; echo n) | git reset -p HEAD^ -- dir &&\n'
            span_id: 148
          ) (Token id:Id.Lit_Chars val:'\tverify_state dir/foo work parent &&\n' span_id:149) 
          (Token id:Id.Lit_Chars val:'\tverify_saved_state bar\n' span_id:150)
        )
      }
    )
    (C {(test_expect_success)} {(PERL)} 
      {(SQ (Token id:Id.Lit_Chars val:'none of this moved HEAD' span_id:159))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:163) 
          (Token id:Id.Lit_Chars val:'\tverify_saved_head\n' span_id:164)
        )
      }
    )
    (C {(test_done)})
  ]
)