(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:'test <branch>@{push} syntax' span_id:6))}
          spids: [4]
        )
      ]
    )
    (C {(.)} {(./test-lib.sh)})
    (command.ShFunction
      name: resolve
      body: 
        (command.BraceGroup
          children: [
            (command.AndOr
              ops: [Id.Op_DAmp Id.Op_DAmp]
              children: [
                (command.Simple
                  words: [{(echo)} {(DQ ($ Id.VSub_Number '$2'))}]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:28)
                      fd: -1
                      arg_word: {(expect)}
                    )
                  ]
                )
                (command.Simple
                  words: [{(git)} {(rev-parse)} {(--symbolic-full-name)} {(DQ ($ Id.VSub_Number '$1'))}]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:44)
                      fd: -1
                      arg_word: {(actual)}
                    )
                  ]
                )
                (C {(test_cmp)} {(expect)} {(actual)})
              ]
            )
          ]
        )
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:setup span_id:62))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:66) 
          (Token id:Id.Lit_Chars val:'\tgit init --bare parent.git &&\n' span_id:67) (Token id:Id.Lit_Chars val:'\tgit init --bare other.git &&\n' span_id:68) 
          (Token id:Id.Lit_Chars val:'\tgit remote add origin parent.git &&\n' span_id:69) (Token id:Id.Lit_Chars val:'\tgit remote add other other.git &&\n' span_id:70) 
          (Token id:Id.Lit_Chars val:'\ttest_commit base &&\n' span_id:71) (Token id:Id.Lit_Chars val:'\tgit push origin HEAD &&\n' span_id:72) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit branch --set-upstream-to=origin/master master &&\n'
            span_id: 73
          ) (Token id:Id.Lit_Chars val:'\tgit branch --track topic origin/master &&\n' span_id:74) 
          (Token id:Id.Lit_Chars val:'\tgit push origin topic &&\n' span_id:75) (Token id:Id.Lit_Chars val:'\tgit push other topic\n' span_id:76)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'@{push} with default=nothing' span_id:83))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:87) 
          (Token id:Id.Lit_Chars val:'\ttest_config push.default nothing &&\n' span_id:88) (Token id:Id.Lit_Chars val:'\ttest_must_fail git rev-parse master@{push}\n' span_id:89)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'@{push} with default=simple' span_id:96))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:100) 
          (Token id:Id.Lit_Chars val:'\ttest_config push.default simple &&\n' span_id:101) (Token id:Id.Lit_Chars val:'\tresolve master@{push} refs/remotes/origin/master\n' span_id:102)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'triangular @{push} fails with default=simple' span_id:109))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:113) 
          (Token id:Id.Lit_Chars val:'\ttest_config push.default simple &&\n' span_id:114) (Token id:Id.Lit_Chars val:'\ttest_must_fail git rev-parse topic@{push}\n' span_id:115)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'@{push} with default=current' span_id:122))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:126) 
          (Token id:Id.Lit_Chars val:'\ttest_config push.default current &&\n' span_id:127) (Token id:Id.Lit_Chars val:'\tresolve topic@{push} refs/remotes/origin/topic\n' span_id:128)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'@{push} with default=matching' span_id:135))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:139) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_config push.default matching &&\n'
            span_id: 140
          ) (Token id:Id.Lit_Chars val:'\tresolve topic@{push} refs/remotes/origin/topic\n' span_id:141)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'@{push} with pushremote defined' span_id:148))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:152) 
          (Token id:Id.Lit_Chars val:'\ttest_config push.default current &&\n' span_id:153) (Token id:Id.Lit_Chars val:'\ttest_config branch.topic.pushremote other &&\n' span_id:154) 
          (Token
            id: Id.Lit_Chars
            val: '\tresolve topic@{push} refs/remotes/other/topic\n'
            span_id: 155
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'@{push} with push refspecs' span_id:162))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:166) 
          (Token id:Id.Lit_Chars val:'\ttest_config push.default nothing &&\n' span_id:167) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_config remote.origin.push refs/heads/*:refs/heads/magic/* &&\n'
            span_id: 168
          ) (Token id:Id.Lit_Chars val:'\tgit push &&\n' span_id:169) 
          (Token
            id: Id.Lit_Chars
            val: '\tresolve topic@{push} refs/remotes/origin/magic/topic\n'
            span_id: 170
          )
        )
      }
    )
    (C {(test_done)})
  ]
)