(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:'stash -p' span_id:6))}
          spids: [4]
        )
      ]
    )
    (C {(.)} {(./lib-patch-mode.sh)})
    (command.If
      arms: [
        (if_arm
          cond: [(command.Pipeline children:[(C {(test_have_prereq)} {(PERL)})] negated:T)]
          action: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:skip_all)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (SQ 
                        (Token
                          id: Id.Lit_Chars
                          val: 'skipping stash -p tests, perl not available'
                          span_id: 27
                        )
                      )
                    }
                  spids: [25]
                )
              ]
            )
            (C {(test_done)})
          ]
          spids: [14 22]
        )
      ]
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:setup span_id:39))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:43) 
          (Token id:Id.Lit_Chars val:'\tmkdir dir &&\n' span_id:44) (Token id:Id.Lit_Chars val:'\techo parent > dir/foo &&\n' span_id:45) 
          (Token id:Id.Lit_Chars val:'\techo dummy > bar &&\n' span_id:46) (Token id:Id.Lit_Chars val:'\techo committed > HEAD &&\n' span_id:47) 
          (Token id:Id.Lit_Chars val:'\tgit add bar dir/foo HEAD &&\n' span_id:48) (Token id:Id.Lit_Chars val:'\tgit commit -m initial &&\n' span_id:49) 
          (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:50) (Token id:Id.Lit_Chars val:'\ttest_commit second dir/foo head &&\n' span_id:51) 
          (Token id:Id.Lit_Chars val:'\techo index > dir/foo &&\n' span_id:52) (Token id:Id.Lit_Chars val:'\tgit add dir/foo &&\n' span_id:53) 
          (Token
            id: Id.Lit_Chars
            val: '\tset_and_save_state bar bar_work bar_index &&\n'
            span_id: 54
          ) (Token id:Id.Lit_Chars val:'\tsave_head\n' span_id:55)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'saying "n" does nothing' span_id:66))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:70) 
          (Token
            id: Id.Lit_Chars
            val: '\tset_state HEAD HEADfile_work HEADfile_index &&\n'
            span_id: 71
          ) (Token id:Id.Lit_Chars val:'\tset_state dir/foo work index &&\n' span_id:72) 
          (Token
            id: Id.Lit_Chars
            val: '\t(echo n; echo n; echo n) | test_must_fail git stash save -p &&\n'
            span_id: 73
          ) (Token id:Id.Lit_Chars val:'\tverify_state HEAD HEADfile_work HEADfile_index &&\n' span_id:74) 
          (Token id:Id.Lit_Chars val:'\tverify_saved_state bar &&\n' span_id:75) (Token id:Id.Lit_Chars val:'\tverify_state dir/foo work index\n' span_id:76)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'git stash -p' span_id:83))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:87) 
          (Token
            id: Id.Lit_Chars
            val: '\t(echo y; echo n; echo y) | git stash save -p &&\n'
            span_id: 88
          ) (Token id:Id.Lit_Chars val:'\tverify_state HEAD committed HEADfile_index &&\n' span_id:89) 
          (Token id:Id.Lit_Chars val:'\tverify_saved_state bar &&\n' span_id:90) (Token id:Id.Lit_Chars val:'\tverify_state dir/foo head index &&\n' span_id:91) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:92) (Token id:Id.Lit_Chars val:'\tgit stash apply &&\n' span_id:93) 
          (Token
            id: Id.Lit_Chars
            val: '\tverify_state HEAD HEADfile_work committed &&\n'
            span_id: 94
          ) (Token id:Id.Lit_Chars val:'\tverify_state bar dummy dummy &&\n' span_id:95) 
          (Token id:Id.Lit_Chars val:'\tverify_state dir/foo work head\n' span_id:96)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'git stash -p --no-keep-index' span_id:103))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:107) 
          (Token
            id: Id.Lit_Chars
            val: '\tset_state HEAD HEADfile_work HEADfile_index &&\n'
            span_id: 108
          ) (Token id:Id.Lit_Chars val:'\tset_state bar bar_work bar_index &&\n' span_id:109) 
          (Token id:Id.Lit_Chars val:'\tset_state dir/foo work index &&\n' span_id:110) 
          (Token
            id: Id.Lit_Chars
            val: '\t(echo y; echo n; echo y) | git stash save -p --no-keep-index &&\n'
            span_id: 111
          ) (Token id:Id.Lit_Chars val:'\tverify_state HEAD committed committed &&\n' span_id:112) 
          (Token id:Id.Lit_Chars val:'\tverify_state bar bar_work dummy &&\n' span_id:113) (Token id:Id.Lit_Chars val:'\tverify_state dir/foo head head &&\n' span_id:114) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:115) (Token id:Id.Lit_Chars val:'\tgit stash apply --index &&\n' span_id:116) 
          (Token
            id: Id.Lit_Chars
            val: '\tverify_state HEAD HEADfile_work HEADfile_index &&\n'
            span_id: 117
          ) (Token id:Id.Lit_Chars val:'\tverify_state bar dummy bar_index &&\n' span_id:118) 
          (Token id:Id.Lit_Chars val:'\tverify_state dir/foo work index\n' span_id:119)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'git stash --no-keep-index -p' span_id:126))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:130) 
          (Token
            id: Id.Lit_Chars
            val: '\tset_state HEAD HEADfile_work HEADfile_index &&\n'
            span_id: 131
          ) (Token id:Id.Lit_Chars val:'\tset_state bar bar_work bar_index &&\n' span_id:132) 
          (Token id:Id.Lit_Chars val:'\tset_state dir/foo work index &&\n' span_id:133) 
          (Token
            id: Id.Lit_Chars
            val: '\t(echo y; echo n; echo y) | git stash save --no-keep-index -p &&\n'
            span_id: 134
          ) (Token id:Id.Lit_Chars val:'\tverify_state HEAD committed committed &&\n' span_id:135) 
          (Token id:Id.Lit_Chars val:'\tverify_state dir/foo head head &&\n' span_id:136) (Token id:Id.Lit_Chars val:'\tverify_state bar bar_work dummy &&\n' span_id:137) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:138) (Token id:Id.Lit_Chars val:'\tgit stash apply --index &&\n' span_id:139) 
          (Token
            id: Id.Lit_Chars
            val: '\tverify_state HEAD HEADfile_work HEADfile_index &&\n'
            span_id: 140
          ) (Token id:Id.Lit_Chars val:'\tverify_state bar dummy bar_index &&\n' span_id:141) 
          (Token id:Id.Lit_Chars val:'\tverify_state dir/foo work index\n' span_id:142)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'none of this moved HEAD' span_id:149))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:153) 
          (Token id:Id.Lit_Chars val:'\tverify_saved_head\n' span_id:154)
        )
      }
    )
    (C {(test_expect_failure)} {(SQ (Token id:Id.Lit_Chars val:'stash -p with split hunk' span_id:161))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:165) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:166) (Token id:Id.Lit_Chars val:'\tcat >test <<-\\EOF &&\n' span_id:167) 
          (Token id:Id.Lit_Chars val:'\taaa\n' span_id:168) (Token id:Id.Lit_Chars val:'\tbbb\n' span_id:169) (Token id:Id.Lit_Chars val:'\tccc\n' span_id:170) 
          (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:171) (Token id:Id.Lit_Chars val:'\tgit add test &&\n' span_id:172) 
          (Token id:Id.Lit_Chars val:'\tgit commit -m "initial" &&\n' span_id:173) (Token id:Id.Lit_Chars val:'\tcat >test <<-\\EOF &&\n' span_id:174) 
          (Token id:Id.Lit_Chars val:'\taaa\n' span_id:175) (Token id:Id.Lit_Chars val:'\tadded line 1\n' span_id:176) 
          (Token id:Id.Lit_Chars val:'\tbbb\n' span_id:177) (Token id:Id.Lit_Chars val:'\tadded line 2\n' span_id:178) 
          (Token id:Id.Lit_Chars val:'\tccc\n' span_id:179) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:180) 
          (Token id:Id.Lit_Chars val:'\tprintf "%s\\n" s n y q |\n' span_id:181) (Token id:Id.Lit_Chars val:'\ttest_might_fail git stash -p 2>error &&\n' span_id:182) 
          (Token id:Id.Lit_Chars val:'\t! test_must_be_empty error &&\n' span_id:183) (Token id:Id.Lit_Chars val:'\tgrep "added line 1" test &&\n' span_id:184) 
          (Token id:Id.Lit_Chars val:'\t! grep "added line 2" test\n' span_id:185)
        )
      }
    )
    (C {(test_done)})
  ]
)