(CommandList
  children: [
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:test_description)
          op: Equal
          rhs: {(SQ <'Test git check-ref-format'>)}
          spids: [4]
        )
      ]
      spids: [4]
    )
    (C {(.)} {(./test-lib.sh)})
    (FuncDef
      name: valid_ref
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_None
              pairs: [(assign_pair lhs:(LhsName name:prereq) op:Equal rhs:{(SQ )} spids:[22])]
              spids: [22]
            )
            (Case
              to_match: {($ VSub_Number '$1')}
              arms: [
                (case_arm
                  pat_list: [{(Lit_Other '[') (A-Z) (KW_Bang '!') (Lit_Other ']') (Lit_Other '*')}]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:prereq)
                          op: Equal
                          rhs: {($ VSub_Number '$1')}
                          spids: [40]
                        )
                      ]
                      spids: [40]
                    )
                    (C {(shift)})
                  ]
                  spids: [32 37 16777215 47]
                )
              ]
              spids: [25 29 47]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:desc)
                  op: Equal
                  rhs: 
                    {
                      (DQ ("ref name '") ($ VSub_Number '$1') ("' is valid") 
                        (BracedVarSub
                          token: <VSub_Number 2>
                          suffix_op: 
                            (StringUnary
                              op_id: VTest_ColonPlus
                              arg_word: {(' with options ') ($ VSub_Number '$2')}
                            )
                          spids: [55 60]
                        )
                      )
                    }
                  spids: [50]
                )
              ]
              spids: [50]
            )
            (C {(test_expect_success)} {($ VSub_Name '$prereq')} {(DQ ($ VSub_Name '$desc'))} 
              {
                (DQ ('\n') ('\t\tgit check-ref-format ') ($ VSub_Number '$2') (" '") ($ VSub_Number '$1') 
                  ("'\n") ('\t')
                )
              }
            )
          ]
          spids: [19]
        )
      spids: [15 18]
    )
    (FuncDef
      name: invalid_ref
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_None
              pairs: [(assign_pair lhs:(LhsName name:prereq) op:Equal rhs:{(SQ )} spids:[91])]
              spids: [91]
            )
            (Case
              to_match: {($ VSub_Number '$1')}
              arms: [
                (case_arm
                  pat_list: [{(Lit_Other '[') (A-Z) (KW_Bang '!') (Lit_Other ']') (Lit_Other '*')}]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:prereq)
                          op: Equal
                          rhs: {($ VSub_Number '$1')}
                          spids: [109]
                        )
                      ]
                      spids: [109]
                    )
                    (C {(shift)})
                  ]
                  spids: [101 106 16777215 116]
                )
              ]
              spids: [94 98 116]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:desc)
                  op: Equal
                  rhs: 
                    {
                      (DQ ("ref name '") ($ VSub_Number '$1') ("' is invalid") 
                        (BracedVarSub
                          token: <VSub_Number 2>
                          suffix_op: 
                            (StringUnary
                              op_id: VTest_ColonPlus
                              arg_word: {(' with options ') ($ VSub_Number '$2')}
                            )
                          spids: [124 129]
                        )
                      )
                    }
                  spids: [119]
                )
              ]
              spids: [119]
            )
            (C {(test_expect_success)} {($ VSub_Name '$prereq')} {(DQ ($ VSub_Name '$desc'))} 
              {
                (DQ ('\n') ('\t\ttest_must_fail git check-ref-format ') ($ VSub_Number '$2') (" '") 
                  ($ VSub_Number '$1') ("'\n") ('\t')
                )
              }
            )
          ]
          spids: [88]
        )
      spids: [84 87]
    )
    (C {(invalid_ref)} {(SQ )})
    (C {(invalid_ref)} {(KW_Bang '!') (MINGW)} {(SQ </>)})
    (C {(invalid_ref)} {(KW_Bang '!') (MINGW)} {(SQ </>)} {(--allow-onelevel)})
    (C {(invalid_ref)} {(KW_Bang '!') (MINGW)} {(SQ </>)} {(--normalize)})
    (C {(invalid_ref)} {(KW_Bang '!') (MINGW)} {(SQ </>)} {(SQ <'--allow-onelevel --normalize'>)})
    (C {(valid_ref)} {(SQ <foo/bar/baz>)})
    (C {(valid_ref)} {(SQ <foo/bar/baz>)} {(--normalize)})
    (C {(invalid_ref)} {(SQ <refs///heads/foo>)})
    (C {(valid_ref)} {(SQ <refs///heads/foo>)} {(--normalize)})
    (C {(invalid_ref)} {(SQ <heads/foo/>)})
    (C {(invalid_ref)} {(KW_Bang '!') (MINGW)} {(SQ </heads/foo>)})
    (C {(valid_ref)} {(KW_Bang '!') (MINGW)} {(SQ </heads/foo>)} {(--normalize)})
    (C {(invalid_ref)} {(SQ <///heads/foo>)})
    (C {(valid_ref)} {(SQ <///heads/foo>)} {(--normalize)})
    (C {(invalid_ref)} {(SQ <./foo>)})
    (C {(invalid_ref)} {(SQ <./foo/bar>)})
    (C {(invalid_ref)} {(SQ <foo/./bar>)})
    (C {(invalid_ref)} {(SQ <foo/bar/.>)})
    (C {(invalid_ref)} {(SQ <.refs/foo>)})
    (C {(invalid_ref)} {(SQ <refs/heads/foo.>)})
    (C {(invalid_ref)} {(SQ <heads/foo..bar>)})
    (C {(invalid_ref)} {(SQ <'heads/foo?bar'>)})
    (C {(valid_ref)} {(SQ <foo./bar>)})
    (C {(invalid_ref)} {(SQ <heads/foo.lock>)})
    (C {(invalid_ref)} {(SQ <heads///foo.lock>)})
    (C {(invalid_ref)} {(SQ <foo.lock/bar>)})
    (C {(invalid_ref)} {(SQ <foo.lock///bar>)})
    (C {(valid_ref)} {(SQ <'heads/foo@bar'>)})
    (C {(invalid_ref)} {(SQ <'heads/v@{ation'>)})
    (C {(invalid_ref)} {(SQ <'heads/foo\\bar'>)})
    (C {(invalid_ref)} 
      {
        (DQ 
          (CommandSubPart
            command_list: (CommandList children:[(C {(printf)} {(SQ <'heads/foo\\t'>)})])
            left_token: <Left_CommandSub '$('>
            spids: [370 376]
          )
        )
      }
    )
    (C {(invalid_ref)} 
      {
        (DQ 
          (CommandSubPart
            command_list: (CommandList children:[(C {(printf)} {(SQ <'heads/foo\\177'>)})])
            left_token: <Left_CommandSub '$('>
            spids: [382 388]
          )
        )
      }
    )
    (C {(valid_ref)} 
      {
        (DQ 
          (CommandSubPart
            command_list: (CommandList children:[(C {(printf)} {(SQ <'heads/fu\\303\\237'>)})])
            left_token: <Left_CommandSub '$('>
            spids: [394 400]
          )
        )
      }
    )
    (C {(valid_ref)} {(SQ <'heads/*foo/bar'>)} {(--refspec-pattern)})
    (C {(valid_ref)} {(SQ <'heads/foo*/bar'>)} {(--refspec-pattern)})
    (C {(valid_ref)} {(SQ <'heads/f*o/bar'>)} {(--refspec-pattern)})
    (C {(invalid_ref)} {(SQ <'heads/f*o*/bar'>)} {(--refspec-pattern)})
    (C {(invalid_ref)} {(SQ <'heads/foo*/bar*'>)} {(--refspec-pattern)})
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:ref) op:Equal rhs:{(SQ <foo>)} spids:[444])]
      spids: [444]
    )
    (C {(invalid_ref)} {(DQ ($ VSub_Name '$ref'))})
    (C {(valid_ref)} {(DQ ($ VSub_Name '$ref'))} {(--allow-onelevel)})
    (C {(invalid_ref)} {(DQ ($ VSub_Name '$ref'))} {(--refspec-pattern)})
    (C {(valid_ref)} {(DQ ($ VSub_Name '$ref'))} {(SQ <'--refspec-pattern --allow-onelevel'>)})
    (C {(invalid_ref)} {(DQ ($ VSub_Name '$ref'))} {(--normalize)})
    (C {(valid_ref)} {(DQ ($ VSub_Name '$ref'))} {(SQ <'--allow-onelevel --normalize'>)})
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:ref) op:Equal rhs:{(SQ <foo/bar>)} spids:[500])]
      spids: [500]
    )
    (C {(valid_ref)} {(DQ ($ VSub_Name '$ref'))})
    (C {(valid_ref)} {(DQ ($ VSub_Name '$ref'))} {(--allow-onelevel)})
    (C {(valid_ref)} {(DQ ($ VSub_Name '$ref'))} {(--refspec-pattern)})
    (C {(valid_ref)} {(DQ ($ VSub_Name '$ref'))} {(SQ <'--refspec-pattern --allow-onelevel'>)})
    (C {(valid_ref)} {(DQ ($ VSub_Name '$ref'))} {(--normalize)})
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:ref) op:Equal rhs:{(SQ <'foo/*'>)} spids:[546])]
      spids: [546]
    )
    (C {(invalid_ref)} {(DQ ($ VSub_Name '$ref'))})
    (C {(invalid_ref)} {(DQ ($ VSub_Name '$ref'))} {(--allow-onelevel)})
    (C {(valid_ref)} {(DQ ($ VSub_Name '$ref'))} {(--refspec-pattern)})
    (C {(valid_ref)} {(DQ ($ VSub_Name '$ref'))} {(SQ <'--refspec-pattern --allow-onelevel'>)})
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:ref) op:Equal rhs:{(SQ <'*/foo'>)} spids:[584])]
      spids: [584]
    )
    (C {(invalid_ref)} {(DQ ($ VSub_Name '$ref'))})
    (C {(invalid_ref)} {(DQ ($ VSub_Name '$ref'))} {(--allow-onelevel)})
    (C {(valid_ref)} {(DQ ($ VSub_Name '$ref'))} {(--refspec-pattern)})
    (C {(valid_ref)} {(DQ ($ VSub_Name '$ref'))} {(SQ <'--refspec-pattern --allow-onelevel'>)})
    (C {(invalid_ref)} {(DQ ($ VSub_Name '$ref'))} {(--normalize)})
    (C {(valid_ref)} {(DQ ($ VSub_Name '$ref'))} {(SQ <'--refspec-pattern --normalize'>)})
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:ref) op:Equal rhs:{(SQ <'foo/*/bar'>)} spids:[640])]
      spids: [640]
    )
    (C {(invalid_ref)} {(DQ ($ VSub_Name '$ref'))})
    (C {(invalid_ref)} {(DQ ($ VSub_Name '$ref'))} {(--allow-onelevel)})
    (C {(valid_ref)} {(DQ ($ VSub_Name '$ref'))} {(--refspec-pattern)})
    (C {(valid_ref)} {(DQ ($ VSub_Name '$ref'))} {(SQ <'--refspec-pattern --allow-onelevel'>)})
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:ref) op:Equal rhs:{(SQ <'*'>)} spids:[678])]
      spids: [678]
    )
    (C {(invalid_ref)} {(DQ ($ VSub_Name '$ref'))})
    (C {(invalid_ref)} {(DQ ($ VSub_Name '$ref'))} {(--allow-onelevel)})
    (C {(invalid_ref)} {(DQ ($ VSub_Name '$ref'))} {(--refspec-pattern)})
    (C {(valid_ref)} {(DQ ($ VSub_Name '$ref'))} {(SQ <'--refspec-pattern --allow-onelevel'>)})
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:ref) op:Equal rhs:{(SQ <'foo/*/*'>)} spids:[716])]
      spids: [716]
    )
    (C {(invalid_ref)} {(DQ ($ VSub_Name '$ref'))} {(--refspec-pattern)})
    (C {(invalid_ref)} {(DQ ($ VSub_Name '$ref'))} {(SQ <'--refspec-pattern --allow-onelevel'>)})
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:ref) op:Equal rhs:{(SQ <'*/foo/*'>)} spids:[740])]
      spids: [740]
    )
    (C {(invalid_ref)} {(DQ ($ VSub_Name '$ref'))} {(--refspec-pattern)})
    (C {(invalid_ref)} {(DQ ($ VSub_Name '$ref'))} {(SQ <'--refspec-pattern --allow-onelevel'>)})
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:ref) op:Equal rhs:{(SQ <'*/*/foo'>)} spids:[764])]
      spids: [764]
    )
    (C {(invalid_ref)} {(DQ ($ VSub_Name '$ref'))} {(--refspec-pattern)})
    (C {(invalid_ref)} {(DQ ($ VSub_Name '$ref'))} {(SQ <'--refspec-pattern --allow-onelevel'>)})
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:ref) op:Equal rhs:{(SQ </foo>)} spids:[788])]
      spids: [788]
    )
    (C {(invalid_ref)} {(KW_Bang '!') (MINGW)} {(DQ ($ VSub_Name '$ref'))})
    (C {(invalid_ref)} {(KW_Bang '!') (MINGW)} {(DQ ($ VSub_Name '$ref'))} {(--allow-onelevel)})
    (C {(invalid_ref)} {(KW_Bang '!') (MINGW)} {(DQ ($ VSub_Name '$ref'))} {(--refspec-pattern)})
    (C {(invalid_ref)} {(KW_Bang '!') (MINGW)} {(DQ ($ VSub_Name '$ref'))} 
      {(SQ <'--refspec-pattern --allow-onelevel'>)}
    )
    (C {(invalid_ref)} {(KW_Bang '!') (MINGW)} {(DQ ($ VSub_Name '$ref'))} {(--normalize)})
    (C {(valid_ref)} {(KW_Bang '!') (MINGW)} {(DQ ($ VSub_Name '$ref'))} 
      {(SQ <'--allow-onelevel --normalize'>)}
    )
    (C {(invalid_ref)} {(KW_Bang '!') (MINGW)} {(DQ ($ VSub_Name '$ref'))} 
      {(SQ <'--refspec-pattern --normalize'>)}
    )
    (C {(valid_ref)} {(KW_Bang '!') (MINGW)} {(DQ ($ VSub_Name '$ref'))} 
      {(SQ <'--refspec-pattern --allow-onelevel --normalize'>)}
    )
    (C {(test_expect_success)} {(DQ ('check-ref-format --branch @{-1}'))} 
      {
        (SQ <'\n'> <'\tT=$(git write-tree) &&\n'> <'\tsha1=$(echo A | git commit-tree $T) &&\n'> 
          <'\tgit update-ref refs/heads/master $sha1 &&\n'> <'\tgit update-ref refs/remotes/origin/master $sha1 &&\n'> <'\tgit checkout master &&\n'> 
          <'\tgit checkout origin/master &&\n'> <'\tgit checkout master &&\n'> <'\trefname=$(git check-ref-format --branch @{-1}) &&\n'> 
          <'\ttest "$refname" = "$sha1" &&\n'> <'\trefname2=$(git check-ref-format --branch @{-2}) &&\n'> <'\ttest "$refname2" = master'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'check-ref-format --branch from subdir'>)} 
      {
        (SQ <'\n'> <'\tmkdir subdir &&\n'> <'\n'> <'\tT=$(git write-tree) &&\n'> 
          <'\tsha1=$(echo A | git commit-tree $T) &&\n'> <'\tgit update-ref refs/heads/master $sha1 &&\n'> 
          <'\tgit update-ref refs/remotes/origin/master $sha1 &&\n'> <'\tgit checkout master &&\n'> <'\tgit checkout origin/master &&\n'> <'\tgit checkout master &&\n'> 
          <'\trefname=$(\n'> <'\t\tcd subdir &&\n'> <'\t\tgit check-ref-format --branch @{-1}\n'> <'\t) &&\n'> 
          <'\ttest "$refname" = "$sha1"\n'>
        )
      }
    )
    (FuncDef
      name: valid_ref_normalized
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_None
              pairs: [(assign_pair lhs:(LhsName name:prereq) op:Equal rhs:{(SQ )} spids:[942])]
              spids: [942]
            )
            (Case
              to_match: {($ VSub_Number '$1')}
              arms: [
                (case_arm
                  pat_list: [{(Lit_Other '[') (A-Z) (KW_Bang '!') (Lit_Other ']') (Lit_Other '*')}]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:prereq)
                          op: Equal
                          rhs: {($ VSub_Number '$1')}
                          spids: [960]
                        )
                      ]
                      spids: [960]
                    )
                    (C {(shift)})
                  ]
                  spids: [952 957 16777215 967]
                )
              ]
              spids: [945 949 967]
            )
            (C {(test_expect_success)} {($ VSub_Name '$prereq')} 
              {
                (DQ ("ref name '") ($ VSub_Number '$1') ("' simplifies to '") ($ VSub_Number '$2') ("'"))
              } 
              {
                (DQ ('\n') ('\t\trefname=') (EscapedLiteralPart token:<Lit_EscapedChar '\\$'>) 
                  ("(git check-ref-format --normalize '") ($ VSub_Number '$1') ("') &&\n") ('\t\ttest ') (EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) 
                  (EscapedLiteralPart token:<Lit_EscapedChar '\\$'>) (refname) (EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) (" = '") ($ VSub_Number '$2') ("'\n") ('\t')
                )
              }
            )
          ]
          spids: [939]
        )
      spids: [935 938]
    )
    (FuncDef
      name: invalid_ref_normalized
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_None
              pairs: [(assign_pair lhs:(LhsName name:prereq) op:Equal rhs:{(SQ )} spids:[1009])]
              spids: [1009]
            )
            (Case
              to_match: {($ VSub_Number '$1')}
              arms: [
                (case_arm
                  pat_list: [{(Lit_Other '[') (A-Z) (KW_Bang '!') (Lit_Other ']') (Lit_Other '*')}]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:prereq)
                          op: Equal
                          rhs: {($ VSub_Number '$1')}
                          spids: [1027]
                        )
                      ]
                      spids: [1027]
                    )
                    (C {(shift)})
                  ]
                  spids: [1019 1024 16777215 1034]
                )
              ]
              spids: [1012 1016 1034]
            )
            (C {(test_expect_success)} {($ VSub_Name '$prereq')} 
              {(DQ ("check-ref-format --normalize rejects '") ($ VSub_Number '$1') ("'"))} 
              {
                (DQ ('\n') ("\t\ttest_must_fail git check-ref-format --normalize '") 
                  ($ VSub_Number '$1') ("'\n") ('\t')
                )
              }
            )
          ]
          spids: [1006]
        )
      spids: [1002 1005]
    )
    (C {(valid_ref_normalized)} {(SQ <heads/foo>)} {(SQ <heads/foo>)})
    (C {(valid_ref_normalized)} {(SQ <refs///heads/foo>)} {(SQ <refs/heads/foo>)})
    (C {(valid_ref_normalized)} {(KW_Bang '!') (MINGW)} {(SQ </heads/foo>)} {(SQ <heads/foo>)})
    (C {(valid_ref_normalized)} {(SQ <///heads/foo>)} {(SQ <heads/foo>)})
    (C {(invalid_ref_normalized)} {(SQ <foo>)})
    (C {(invalid_ref_normalized)} {(KW_Bang '!') (MINGW)} {(SQ </foo>)})
    (C {(invalid_ref_normalized)} {(SQ <heads/foo/../bar>)})
    (C {(invalid_ref_normalized)} {(SQ <heads/./foo>)})
    (C {(invalid_ref_normalized)} {(SQ <'heads\\foo'>)})
    (C {(invalid_ref_normalized)} {(SQ <heads/foo.lock>)})
    (C {(invalid_ref_normalized)} {(SQ <heads///foo.lock>)})
    (C {(invalid_ref_normalized)} {(SQ <foo.lock/bar>)})
    (C {(invalid_ref_normalized)} {(SQ <foo.lock///bar>)})
    (C {(test_done)})
  ]
)