(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:'checkout <branch>\n' span_id:6) 
                (Token id:Id.Lit_Chars val:'\n' span_id:7) 
                (Token
                  id: Id.Lit_Chars
                  val: 'Ensures that checkout on an unborn branch does what the user expects'
                  span_id: 8
                )
              )
            }
          spids: [4]
        )
      ]
    )
    (C {(.)} {(./test-lib.sh)})
    (command.ShFunction
      name: test_branch
      body: 
        (command.BraceGroup
          children: [
            (command.AndOr
              ops: [Id.Op_DAmp Id.Op_DAmp]
              children: [
                (command.Simple
                  words: [
                    {(printf)}
                    {(DQ ('%s') (Id.Lit_Other '\\') (n))}
                    {(DQ (refs/heads/) ($ Id.VSub_Number '$1'))}
                  ]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:41)
                      fd: -1
                      arg_word: {(expect.HEAD)}
                    )
                  ]
                )
                (command.Simple
                  words: [{(git)} {(symbolic-ref)} {(HEAD)}]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:53)
                      fd: -1
                      arg_word: {(actual.HEAD)}
                    )
                  ]
                )
                (C {(test_cmp)} {(expect.HEAD)} {(actual.HEAD)})
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: test_branch_upstream
      body: 
        (command.BraceGroup
          children: [
            (command.AndOr
              ops: [Id.Op_DAmp Id.Op_DAmp]
              children: [
                (command.Simple
                  words: [
                    {(printf)}
                    {(DQ ('%s') (Id.Lit_Other '\\') (n))}
                    {(DQ ($ Id.VSub_Number '$2'))}
                    {(DQ (refs/heads/) ($ Id.VSub_Number '$3'))}
                  ]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:96)
                      fd: -1
                      arg_word: {(expect.upstream)}
                    )
                  ]
                )
                (command.BraceGroup
                  children: [
                    (command.AndOr
                      ops: [Id.Op_DAmp]
                      children: [
                        (C {(git)} {(config)} {(DQ (branch.) ($ Id.VSub_Number '$1') (.remote))})
                        (C {(git)} {(config)} {(DQ (branch.) ($ Id.VSub_Number '$1') (.merge))})
                      ]
                    )
                  ]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:131)
                      fd: -1
                      arg_word: {(actual.upstream)}
                    )
                  ]
                )
                (C {(test_cmp)} {(expect.upstream)} {(actual.upstream)})
              ]
            )
          ]
        )
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:setup span_id:149))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:153) 
          (Token id:Id.Lit_Chars val:'\ttest_commit my_master &&\n' span_id:154) (Token id:Id.Lit_Chars val:'\tgit init repo_a &&\n' span_id:155) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:156) (Token id:Id.Lit_Chars val:'\t\tcd repo_a &&\n' span_id:157) 
          (Token id:Id.Lit_Chars val:'\t\ttest_commit a_master &&\n' span_id:158) (Token id:Id.Lit_Chars val:'\t\tgit checkout -b foo &&\n' span_id:159) 
          (Token id:Id.Lit_Chars val:'\t\ttest_commit a_foo &&\n' span_id:160) (Token id:Id.Lit_Chars val:'\t\tgit checkout -b bar &&\n' span_id:161) 
          (Token id:Id.Lit_Chars val:'\t\ttest_commit a_bar\n' span_id:162) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:163) 
          (Token id:Id.Lit_Chars val:'\tgit init repo_b &&\n' span_id:164) (Token id:Id.Lit_Chars val:'\t(\n' span_id:165) 
          (Token id:Id.Lit_Chars val:'\t\tcd repo_b &&\n' span_id:166) (Token id:Id.Lit_Chars val:'\t\ttest_commit b_master &&\n' span_id:167) 
          (Token id:Id.Lit_Chars val:'\t\tgit checkout -b foo &&\n' span_id:168) (Token id:Id.Lit_Chars val:'\t\ttest_commit b_foo &&\n' span_id:169) 
          (Token id:Id.Lit_Chars val:'\t\tgit checkout -b baz &&\n' span_id:170) (Token id:Id.Lit_Chars val:'\t\ttest_commit b_baz\n' span_id:171) 
          (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:172) (Token id:Id.Lit_Chars val:'\tgit remote add repo_a repo_a &&\n' span_id:173) 
          (Token id:Id.Lit_Chars val:'\tgit remote add repo_b repo_b &&\n' span_id:174) (Token id:Id.Lit_Chars val:'\tgit config remote.repo_b.fetch \\\n' span_id:175) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t"+refs/heads/*:refs/remotes/other_b/*" &&\n'
            span_id: 176
          ) (Token id:Id.Lit_Chars val:'\tgit fetch --all\n' span_id:177)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'checkout of non-existing branch fails' span_id:184))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:188) 
          (Token id:Id.Lit_Chars val:'\tgit checkout -B master &&\n' span_id:189) (Token id:Id.Lit_Chars val:'\ttest_might_fail git branch -D xyzzy &&\n' span_id:190) 
          (Token id:Id.Lit_Chars val:'\n' span_id:191) (Token id:Id.Lit_Chars val:'\ttest_must_fail git checkout xyzzy &&\n' span_id:192) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git rev-parse --verify refs/heads/xyzzy &&\n'
            span_id: 193
          ) (Token id:Id.Lit_Chars val:'\ttest_branch master\n' span_id:194)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'checkout of branch from multiple remotes fails #1'
            span_id: 201
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:205) 
          (Token id:Id.Lit_Chars val:'\tgit checkout -B master &&\n' span_id:206) (Token id:Id.Lit_Chars val:'\ttest_might_fail git branch -D foo &&\n' span_id:207) 
          (Token id:Id.Lit_Chars val:'\n' span_id:208) (Token id:Id.Lit_Chars val:'\ttest_must_fail git checkout foo &&\n' span_id:209) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git rev-parse --verify refs/heads/foo &&\n'
            span_id: 210
          ) (Token id:Id.Lit_Chars val:'\ttest_branch master\n' span_id:211)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'checkout of branch from a single remote succeeds #1'
            span_id: 218
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:222) 
          (Token id:Id.Lit_Chars val:'\tgit checkout -B master &&\n' span_id:223) (Token id:Id.Lit_Chars val:'\ttest_might_fail git branch -D bar &&\n' span_id:224) 
          (Token id:Id.Lit_Chars val:'\n' span_id:225) (Token id:Id.Lit_Chars val:'\tgit checkout bar &&\n' span_id:226) 
          (Token id:Id.Lit_Chars val:'\ttest_branch bar &&\n' span_id:227) (Token id:Id.Lit_Chars val:'\ttest_cmp_rev remotes/repo_a/bar HEAD &&\n' span_id:228) 
          (Token id:Id.Lit_Chars val:'\ttest_branch_upstream bar repo_a bar\n' span_id:229)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'checkout of branch from a single remote succeeds #2'
            span_id: 236
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:240) 
          (Token id:Id.Lit_Chars val:'\tgit checkout -B master &&\n' span_id:241) (Token id:Id.Lit_Chars val:'\ttest_might_fail git branch -D baz &&\n' span_id:242) 
          (Token id:Id.Lit_Chars val:'\n' span_id:243) (Token id:Id.Lit_Chars val:'\tgit checkout baz &&\n' span_id:244) 
          (Token id:Id.Lit_Chars val:'\ttest_branch baz &&\n' span_id:245) (Token id:Id.Lit_Chars val:'\ttest_cmp_rev remotes/other_b/baz HEAD &&\n' span_id:246) 
          (Token id:Id.Lit_Chars val:'\ttest_branch_upstream baz repo_b baz\n' span_id:247)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'--no-guess suppresses branch auto-vivification' span_id:254))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:258) 
          (Token id:Id.Lit_Chars val:'\tgit checkout -B master &&\n' span_id:259) (Token id:Id.Lit_Chars val:'\ttest_might_fail git branch -D bar &&\n' span_id:260) 
          (Token id:Id.Lit_Chars val:'\n' span_id:261) (Token id:Id.Lit_Chars val:'\ttest_must_fail git checkout --no-guess bar &&\n' span_id:262) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git rev-parse --verify refs/heads/bar &&\n'
            span_id: 263
          ) (Token id:Id.Lit_Chars val:'\ttest_branch master\n' span_id:264)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'setup more remotes with unconventional refspecs' span_id:271))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:275) 
          (Token id:Id.Lit_Chars val:'\tgit checkout -B master &&\n' span_id:276) (Token id:Id.Lit_Chars val:'\tgit init repo_c &&\n' span_id:277) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:278) (Token id:Id.Lit_Chars val:'\t\tcd repo_c &&\n' span_id:279) 
          (Token id:Id.Lit_Chars val:'\t\ttest_commit c_master &&\n' span_id:280) (Token id:Id.Lit_Chars val:'\t\tgit checkout -b bar &&\n' span_id:281) 
          (Token id:Id.Lit_Chars val:'\t\ttest_commit c_bar &&\n' span_id:282) (Token id:Id.Lit_Chars val:'\t\tgit checkout -b spam &&\n' span_id:283) 
          (Token id:Id.Lit_Chars val:'\t\ttest_commit c_spam\n' span_id:284) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:285) 
          (Token id:Id.Lit_Chars val:'\tgit init repo_d &&\n' span_id:286) (Token id:Id.Lit_Chars val:'\t(\n' span_id:287) 
          (Token id:Id.Lit_Chars val:'\t\tcd repo_d &&\n' span_id:288) (Token id:Id.Lit_Chars val:'\t\ttest_commit d_master &&\n' span_id:289) 
          (Token id:Id.Lit_Chars val:'\t\tgit checkout -b baz &&\n' span_id:290) (Token id:Id.Lit_Chars val:'\t\ttest_commit d_baz &&\n' span_id:291) 
          (Token id:Id.Lit_Chars val:'\t\tgit checkout -b eggs &&\n' span_id:292) (Token id:Id.Lit_Chars val:'\t\ttest_commit d_eggs\n' span_id:293) 
          (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:294) (Token id:Id.Lit_Chars val:'\tgit remote add repo_c repo_c &&\n' span_id:295) 
          (Token id:Id.Lit_Chars val:'\tgit config remote.repo_c.fetch \\\n' span_id:296) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t"+refs/heads/*:refs/remotes/extra_dir/repo_c/extra_dir/*" &&\n'
            span_id: 297
          ) (Token id:Id.Lit_Chars val:'\tgit remote add repo_d repo_d &&\n' span_id:298) 
          (Token id:Id.Lit_Chars val:'\tgit config remote.repo_d.fetch \\\n' span_id:299) (Token id:Id.Lit_Chars val:'\t\t"+refs/heads/*:refs/repo_d/*" &&\n' span_id:300) 
          (Token id:Id.Lit_Chars val:'\tgit fetch --all\n' span_id:301)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'checkout of branch from multiple remotes fails #2'
            span_id: 308
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:312) 
          (Token id:Id.Lit_Chars val:'\tgit checkout -B master &&\n' span_id:313) (Token id:Id.Lit_Chars val:'\ttest_might_fail git branch -D bar &&\n' span_id:314) 
          (Token id:Id.Lit_Chars val:'\n' span_id:315) (Token id:Id.Lit_Chars val:'\ttest_must_fail git checkout bar &&\n' span_id:316) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git rev-parse --verify refs/heads/bar &&\n'
            span_id: 317
          ) (Token id:Id.Lit_Chars val:'\ttest_branch master\n' span_id:318)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'checkout of branch from multiple remotes fails #3'
            span_id: 325
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:329) 
          (Token id:Id.Lit_Chars val:'\tgit checkout -B master &&\n' span_id:330) (Token id:Id.Lit_Chars val:'\ttest_might_fail git branch -D baz &&\n' span_id:331) 
          (Token id:Id.Lit_Chars val:'\n' span_id:332) (Token id:Id.Lit_Chars val:'\ttest_must_fail git checkout baz &&\n' span_id:333) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git rev-parse --verify refs/heads/baz &&\n'
            span_id: 334
          ) (Token id:Id.Lit_Chars val:'\ttest_branch master\n' span_id:335)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'checkout of branch from a single remote succeeds #3'
            span_id: 342
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:346) 
          (Token id:Id.Lit_Chars val:'\tgit checkout -B master &&\n' span_id:347) (Token id:Id.Lit_Chars val:'\ttest_might_fail git branch -D spam &&\n' span_id:348) 
          (Token id:Id.Lit_Chars val:'\n' span_id:349) (Token id:Id.Lit_Chars val:'\tgit checkout spam &&\n' span_id:350) 
          (Token id:Id.Lit_Chars val:'\ttest_branch spam &&\n' span_id:351) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_cmp_rev refs/remotes/extra_dir/repo_c/extra_dir/spam HEAD &&\n'
            span_id: 352
          ) (Token id:Id.Lit_Chars val:'\ttest_branch_upstream spam repo_c spam\n' span_id:353)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'checkout of branch from a single remote succeeds #4'
            span_id: 360
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:364) 
          (Token id:Id.Lit_Chars val:'\tgit checkout -B master &&\n' span_id:365) (Token id:Id.Lit_Chars val:'\ttest_might_fail git branch -D eggs &&\n' span_id:366) 
          (Token id:Id.Lit_Chars val:'\n' span_id:367) (Token id:Id.Lit_Chars val:'\tgit checkout eggs &&\n' span_id:368) 
          (Token id:Id.Lit_Chars val:'\ttest_branch eggs &&\n' span_id:369) (Token id:Id.Lit_Chars val:'\ttest_cmp_rev refs/repo_d/eggs HEAD &&\n' span_id:370) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_branch_upstream eggs repo_d eggs\n'
            span_id: 371
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'checkout of branch with a file having the same name fails'
            span_id: 378
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:382) 
          (Token id:Id.Lit_Chars val:'\tgit checkout -B master &&\n' span_id:383) (Token id:Id.Lit_Chars val:'\ttest_might_fail git branch -D spam &&\n' span_id:384) 
          (Token id:Id.Lit_Chars val:'\n' span_id:385) (Token id:Id.Lit_Chars val:'\t>spam &&\n' span_id:386) 
          (Token id:Id.Lit_Chars val:'\ttest_must_fail git checkout spam &&\n' span_id:387) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git rev-parse --verify refs/heads/spam &&\n'
            span_id: 388
          ) (Token id:Id.Lit_Chars val:'\ttest_branch master\n' span_id:389)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'checkout of branch with a file in subdir having the same name fails'
            span_id: 396
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:400) 
          (Token id:Id.Lit_Chars val:'\tgit checkout -B master &&\n' span_id:401) (Token id:Id.Lit_Chars val:'\ttest_might_fail git branch -D spam &&\n' span_id:402) 
          (Token id:Id.Lit_Chars val:'\n' span_id:403) (Token id:Id.Lit_Chars val:'\t>spam &&\n' span_id:404) 
          (Token id:Id.Lit_Chars val:'\tmkdir sub &&\n' span_id:405) (Token id:Id.Lit_Chars val:'\tmv spam sub/spam &&\n' span_id:406) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git -C sub checkout spam &&\n'
            span_id: 407
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git rev-parse --verify refs/heads/spam &&\n'
            span_id: 408
          ) (Token id:Id.Lit_Chars val:'\ttest_branch master\n' span_id:409)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'checkout <branch> -- succeeds, even if a file with the same name exists'
            span_id: 416
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:420) 
          (Token id:Id.Lit_Chars val:'\tgit checkout -B master &&\n' span_id:421) (Token id:Id.Lit_Chars val:'\ttest_might_fail git branch -D spam &&\n' span_id:422) 
          (Token id:Id.Lit_Chars val:'\n' span_id:423) (Token id:Id.Lit_Chars val:'\t>spam &&\n' span_id:424) 
          (Token id:Id.Lit_Chars val:'\tgit checkout spam -- &&\n' span_id:425) (Token id:Id.Lit_Chars val:'\ttest_branch spam &&\n' span_id:426) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_cmp_rev refs/remotes/extra_dir/repo_c/extra_dir/spam HEAD &&\n'
            span_id: 427
          ) (Token id:Id.Lit_Chars val:'\ttest_branch_upstream spam repo_c spam\n' span_id:428)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'loosely defined local base branch is reported correctly'
            span_id: 435
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:439) (Token id:Id.Lit_Chars val:'\n' span_id:440) 
          (Token id:Id.Lit_Chars val:'\tgit checkout master &&\n' span_id:441) (Token id:Id.Lit_Chars val:'\tgit branch strict &&\n' span_id:442) 
          (Token id:Id.Lit_Chars val:'\tgit branch loose &&\n' span_id:443) (Token id:Id.Lit_Chars val:'\tgit commit --allow-empty -m "a bit more" &&\n' span_id:444) 
          (Token id:Id.Lit_Chars val:'\n' span_id:445) (Token id:Id.Lit_Chars val:'\ttest_config branch.strict.remote . &&\n' span_id:446) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_config branch.loose.remote . &&\n'
            span_id: 447
          ) (Token id:Id.Lit_Chars val:'\ttest_config branch.strict.merge refs/heads/master &&\n' span_id:448) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_config branch.loose.merge master &&\n'
            span_id: 449
          ) (Token id:Id.Lit_Chars val:'\n' span_id:450) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit checkout strict | sed -e "s/strict/BRANCHNAME/g" >expect &&\n'
            span_id: 451
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit checkout loose | sed -e "s/loose/BRANCHNAME/g" >actual &&\n'
            span_id: 452
          ) (Token id:Id.Lit_Chars val:'\n' span_id:453) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:454)
        )
      }
    )
    (C {(test_done)})
  ]
)