(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:'--reverse combines with --parents' span_id:6))}
          spids: [4]
        )
      ]
    )
    (C {(.)} {(./test-lib.sh)})
    (command.ShFunction
      name: commit
      body: 
        (command.BraceGroup
          children: [
            (command.AndOr
              ops: [Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp]
              children: [
                (C {(test_tick)})
                (command.Simple
                  words: [{(echo)} {($ Id.VSub_Number '$1')}]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:33)
                      fd: -1
                      arg_word: {(foo)}
                    )
                  ]
                )
                (C {(git)} {(add)} {(foo)})
                (C {(git)} {(commit)} {(-m)} {(DQ ($ Id.VSub_Number '$1'))})
              ]
            )
          ]
        )
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'set up --reverse example' span_id:65))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:69) 
          (Token id:Id.Lit_Chars val:'\tcommit one &&\n' span_id:70) (Token id:Id.Lit_Chars val:'\tgit tag root &&\n' span_id:71) 
          (Token id:Id.Lit_Chars val:'\tcommit two &&\n' span_id:72) (Token id:Id.Lit_Chars val:'\tgit checkout -b side HEAD^ &&\n' span_id:73) 
          (Token id:Id.Lit_Chars val:'\tcommit three &&\n' span_id:74) (Token id:Id.Lit_Chars val:'\tgit checkout master &&\n' span_id:75) 
          (Token id:Id.Lit_Chars val:'\tgit merge -s ours side &&\n' span_id:76) (Token id:Id.Lit_Chars val:'\tcommit five\n' span_id:77) (Token id:Id.Lit_Chars val:'\t' span_id:78)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: '--reverse --parents --full-history combines correctly'
            span_id: 85
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:89) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit rev-list --parents --full-history master -- foo |\n'
            span_id: 90
          ) (Token id:Id.Lit_Chars val:'\t\tperl -e "print reverse <>" > expected &&\n' span_id:91) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit rev-list --reverse --parents --full-history master -- foo \\\n'
            span_id: 92
          ) (Token id:Id.Lit_Chars val:'\t\t> actual &&\n' span_id:93) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp actual expected\n' span_id:94) (Token id:Id.Lit_Chars val:'\t' span_id:95)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'--boundary does too' span_id:102))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:106) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit rev-list --boundary --parents --full-history master ^root -- foo |\n'
            span_id: 107
          ) (Token id:Id.Lit_Chars val:'\t\tperl -e "print reverse <>" > expected &&\n' span_id:108) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit rev-list --boundary --reverse --parents --full-history \\\n'
            span_id: 109
          ) (Token id:Id.Lit_Chars val:'\t\tmaster ^root -- foo > actual &&\n' span_id:110) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp actual expected\n' span_id:111) (Token id:Id.Lit_Chars val:'\t' span_id:112)
        )
      }
    )
    (C {(test_done)})
  ]
)