(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:'Tests for rev-parse --prefix' span_id:6))}
          spids: [4]
        )
      ]
    )
    (C {(.)} {(./test-lib.sh)})
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:setup span_id:18))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:22) 
          (Token id:Id.Lit_Chars val:'\tmkdir -p sub1/sub2 &&\n' span_id:23) (Token id:Id.Lit_Chars val:'\techo top >top &&\n' span_id:24) 
          (Token id:Id.Lit_Chars val:'\techo file1 >sub1/file1 &&\n' span_id:25) (Token id:Id.Lit_Chars val:'\techo file2 >sub1/sub2/file2 &&\n' span_id:26) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit add top sub1/file1 sub1/sub2/file2 &&\n'
            span_id: 27
          ) (Token id:Id.Lit_Chars val:'\tgit commit -m commit\n' span_id:28)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'empty prefix -- file' span_id:35))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:39) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit rev-parse --prefix "" -- top sub1/file1 >actual &&\n'
            span_id: 40
          ) (Token id:Id.Lit_Chars val:'\tcat <<-\\EOF >expected &&\n' span_id:41) 
          (Token id:Id.Lit_Chars val:'\t--\n' span_id:42) (Token id:Id.Lit_Chars val:'\ttop\n' span_id:43) 
          (Token id:Id.Lit_Chars val:'\tsub1/file1\n' span_id:44) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:45) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:46)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'valid prefix -- file' span_id:53))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:57) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit rev-parse --prefix sub1/ -- file1 sub2/file2 >actual &&\n'
            span_id: 58
          ) (Token id:Id.Lit_Chars val:'\tcat <<-\\EOF >expected &&\n' span_id:59) 
          (Token id:Id.Lit_Chars val:'\t--\n' span_id:60) (Token id:Id.Lit_Chars val:'\tsub1/file1\n' span_id:61) 
          (Token id:Id.Lit_Chars val:'\tsub1/sub2/file2\n' span_id:62) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:63) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:64)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'valid prefix -- ../file' span_id:71))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:75) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit rev-parse --prefix sub1/ -- ../top sub2/file2 >actual &&\n'
            span_id: 76
          ) (Token id:Id.Lit_Chars val:'\tcat <<-\\EOF >expected &&\n' span_id:77) 
          (Token id:Id.Lit_Chars val:'\t--\n' span_id:78) (Token id:Id.Lit_Chars val:'\tsub1/../top\n' span_id:79) 
          (Token id:Id.Lit_Chars val:'\tsub1/sub2/file2\n' span_id:80) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:81) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:82)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'empty prefix HEAD:./path' span_id:89))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:93) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit rev-parse --prefix "" HEAD:./top >actual &&\n'
            span_id: 94
          ) (Token id:Id.Lit_Chars val:'\tgit rev-parse HEAD:top >expected &&\n' span_id:95) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:96)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'valid prefix HEAD:./path' span_id:103))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:107) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit rev-parse --prefix sub1/ HEAD:./file1 >actual &&\n'
            span_id: 108
          ) (Token id:Id.Lit_Chars val:'\tgit rev-parse HEAD:sub1/file1 >expected &&\n' span_id:109) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:110)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'valid prefix HEAD:../path' span_id:117))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:121) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit rev-parse --prefix sub1/ HEAD:../top >actual &&\n'
            span_id: 122
          ) (Token id:Id.Lit_Chars val:'\tgit rev-parse HEAD:top >expected &&\n' span_id:123) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:124)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'prefix ignored with HEAD:top' span_id:131))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:135) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit rev-parse --prefix sub1/ HEAD:top >actual &&\n'
            span_id: 136
          ) (Token id:Id.Lit_Chars val:'\tgit rev-parse HEAD:top >expected &&\n' span_id:137) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:138)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'disambiguate path with valid prefix' span_id:145))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:149) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit rev-parse --prefix sub1/ file1 >actual &&\n'
            span_id: 150
          ) (Token id:Id.Lit_Chars val:'\tcat <<-\\EOF >expected &&\n' span_id:151) 
          (Token id:Id.Lit_Chars val:'\tsub1/file1\n' span_id:152) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:153) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:154)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'file and refs with prefix' span_id:161))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:165) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit rev-parse --prefix sub1/ master file1 >actual &&\n'
            span_id: 166
          ) (Token id:Id.Lit_Chars val:'\tcat <<-EOF >expected &&\n' span_id:167) 
          (Token id:Id.Lit_Chars val:'\t$(git rev-parse master)\n' span_id:168) (Token id:Id.Lit_Chars val:'\tsub1/file1\n' span_id:169) 
          (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:170) (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:171)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'two-levels deep' span_id:178))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:182) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit rev-parse --prefix sub1/sub2/ -- file2 >actual &&\n'
            span_id: 183
          ) (Token id:Id.Lit_Chars val:'\tcat <<-\\EOF >expected &&\n' span_id:184) 
          (Token id:Id.Lit_Chars val:'\t--\n' span_id:185) (Token id:Id.Lit_Chars val:'\tsub1/sub2/file2\n' span_id:186) 
          (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:187) (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:188)
        )
      }
    )
    (C {(test_done)})
  ]
)