(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 handling of ambiguous (branch/tag) refs'
                  span_id: 6
                )
              )
            }
          spids: [4]
        )
      ]
    )
    (C {(.)} {(./test-lib.sh)})
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'setup ambiguous refs' span_id:17))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:21) 
          (Token id:Id.Lit_Chars val:'\ttest_commit branch file &&\n' span_id:22) (Token id:Id.Lit_Chars val:'\tgit branch ambiguity &&\n' span_id:23) 
          (Token id:Id.Lit_Chars val:'\tgit branch vagueness &&\n' span_id:24) (Token id:Id.Lit_Chars val:'\ttest_commit tag file &&\n' span_id:25) 
          (Token id:Id.Lit_Chars val:'\tgit tag ambiguity &&\n' span_id:26) (Token id:Id.Lit_Chars val:'\tgit tag vagueness HEAD:file &&\n' span_id:27) 
          (Token id:Id.Lit_Chars val:'\ttest_commit other file\n' span_id:28)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'checkout ambiguous ref succeeds' span_id:35))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:39) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit checkout ambiguity >stdout 2>stderr\n'
            span_id: 40
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'checkout produces ambiguity warning' span_id:47))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:51) 
          (Token id:Id.Lit_Chars val:'\tgrep "warning.*ambiguous" stderr\n' span_id:52)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'checkout chooses branch over tag' span_id:59))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:63) 
          (Token id:Id.Lit_Chars val:'\techo refs/heads/ambiguity >expect &&\n' span_id:64) (Token id:Id.Lit_Chars val:'\tgit symbolic-ref HEAD >actual &&\n' span_id:65) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual &&\n' span_id:66) (Token id:Id.Lit_Chars val:'\techo branch >expect &&\n' span_id:67) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect file\n' span_id:68)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'checkout reports switch to branch' span_id:75))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:79) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_i18ngrep "Switched to branch" stderr &&\n'
            span_id: 80
          ) (Token id:Id.Lit_Chars val:'\ttest_i18ngrep ! "^HEAD is now at" stderr\n' span_id:81)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'checkout vague ref succeeds' span_id:88))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:92) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit checkout vagueness >stdout 2>stderr &&\n'
            span_id: 93
          ) (Token id:Id.Lit_Chars val:'\ttest_set_prereq VAGUENESS_SUCCESS\n' span_id:94)
        )
      }
    )
    (C {(test_expect_success)} {(VAGUENESS_SUCCESS)} 
      {(SQ (Token id:Id.Lit_Chars val:'checkout produces ambiguity warning' span_id:103))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:107) 
          (Token id:Id.Lit_Chars val:'\tgrep "warning.*ambiguous" stderr\n' span_id:108)
        )
      }
    )
    (C {(test_expect_success)} {(VAGUENESS_SUCCESS)} 
      {(SQ (Token id:Id.Lit_Chars val:'checkout chooses branch over tag' span_id:117))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:121) 
          (Token
            id: Id.Lit_Chars
            val: '\techo refs/heads/vagueness >expect &&\n'
            span_id: 122
          ) (Token id:Id.Lit_Chars val:'\tgit symbolic-ref HEAD >actual &&\n' span_id:123) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual &&\n' span_id:124) (Token id:Id.Lit_Chars val:'\techo branch >expect &&\n' span_id:125) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect file\n' span_id:126)
        )
      }
    )
    (C {(test_expect_success)} {(VAGUENESS_SUCCESS)} 
      {(SQ (Token id:Id.Lit_Chars val:'checkout reports switch to branch' span_id:135))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:139) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_i18ngrep "Switched to branch" stderr &&\n'
            span_id: 140
          ) (Token id:Id.Lit_Chars val:'\ttest_i18ngrep ! "^HEAD is now at" stderr\n' span_id:141)
        )
      }
    )
    (C {(test_done)})
  ]
)