(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 bash completion' span_id:15))}
          spids: [13]
        )
      ]
    )
    (C {(.)} {(./lib-bash.sh)})
    (command.ShFunction
      name: complete
      body: 
        (command.BraceGroup
          children: [
            (command.ControlFlow
              token: (Token id:Id.ControlFlow_Return val:return span_id:36)
              arg_word: {(0)}
            )
          ]
        )
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:GIT_TESTING_COMMAND_COMPLETION)
          op: assign_op.Equal
          rhs: 
            {
              (SQ 
                (Token
                  id: Id.Lit_Chars
                  val: 'add checkout check-attr filter-branch ls-files'
                  span_id: 94
                )
              )
            }
          spids: [92]
        )
      ]
    )
    (C {(.)} {(DQ ($ Id.VSub_DollarName '$GIT_BUILD_DIR') (/contrib/completion/git-completion.bash))})
    (command.ShFunction
      name: _get_comp_words_by_ref
      body: 
        (command.BraceGroup
          children: [
            (command.WhileUntil
              keyword: (Token id:Id.KW_While val:while span_id:123)
              cond: [
                (command.Sentence
                  child: 
                    (C {(Id.Lit_LBracket '[')} {($ Id.VSub_Pound '$#')} {(-gt)} {(0)} 
                      {(Id.Lit_RBracket ']')}
                    )
                  terminator: (Token id:Id.Op_Semi val:';' span_id:134)
                )
              ]
              body: 
                (command.DoGroup
                  children: [
                    (command.Case
                      to_match: {(DQ ($ Id.VSub_Number '$1'))}
                      arms: [
                        (case_arm
                          pat_list: [{(cur)}]
                          action: [
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:cur)
                                  op: assign_op.Equal
                                  rhs: 
                                    {
                                      (braced_var_sub
                                        token: (Token id:Id.VSub_Name val:_words span_id:154)
                                        bracket_op: 
                                          (bracket_op.ArrayIndex
                                            expr: 
                                              (arith_expr.VarRef
                                                token: 
                                                  (Token
                                                    id: Id.Lit_ArithVarLike
                                                    val: _cword
                                                    span_id: 156
                                                  )
                                              )
                                          )
                                      )
                                    }
                                  spids: [152]
                                )
                              ]
                            )
                          ]
                          spids: [148 149 161 -1]
                        )
                        (case_arm
                          pat_list: [{(prev)}]
                          action: [
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:prev)
                                  op: assign_op.Equal
                                  rhs: 
                                    {
                                      (braced_var_sub
                                        token: (Token id:Id.VSub_Name val:_words span_id:170)
                                        bracket_op: 
                                          (bracket_op.ArrayIndex
                                            expr: 
                                              (arith_expr.Binary
                                                op_id: Id.Arith_Minus
                                                left: 
                                                  (arith_expr.VarRef
                                                    token: 
                                                      (Token
                                                        id: Id.Lit_ArithVarLike
                                                        val: _cword
                                                        span_id: 172
                                                      )
                                                  )
                                                right: (arith_expr.ArithWord w:{(Id.Lit_Digits 1)})
                                              )
                                          )
                                      )
                                    }
                                  spids: [168]
                                )
                              ]
                            )
                          ]
                          spids: [164 165 179 -1]
                        )
                        (case_arm
                          pat_list: [{(words)}]
                          action: [
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:words)
                                  op: assign_op.Equal
                                  rhs: 
                                    {
                                      (sh_array_literal
                                        left: (Token id:Id.Op_LParen val:'(' span_id:187)
                                        words: [
                                          {
                                            (DQ 
                                              (braced_var_sub
                                                token: (Token id:Id.VSub_Name val:_words span_id:190)
                                                bracket_op: (bracket_op.WholeArray op_id:Id.Lit_At)
                                              )
                                            )
                                          }
                                        ]
                                      )
                                    }
                                  spids: [186]
                                )
                              ]
                            )
                          ]
                          spids: [182 183 199 -1]
                        )
                        (case_arm
                          pat_list: [{(cword)}]
                          action: [
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:cword)
                                  op: assign_op.Equal
                                  rhs: {($ Id.VSub_DollarName '$_cword')}
                                  spids: [206]
                                )
                              ]
                            )
                          ]
                          spids: [202 203 210 -1]
                        )
                      ]
                    )
                    (C {(shift)})
                  ]
                )
            )
          ]
        )
    )
    (command.ShFunction
      name: print_comp
      body: 
        (command.BraceGroup
          children: [
            (C {(local)} 
              {(Id.Lit_VarLike 'IFS=') 
                (single_quoted
                  left: (Token id:Id.Left_SingleQuoteC val:"$'" span_id:235)
                  tokens: [(Token id:Id.Char_OneChar val:'\\n' span_id:236)]
                )
              }
            )
            (command.Simple
              words: [
                {(echo)}
                {
                  (DQ 
                    (braced_var_sub
                      token: (Token id:Id.VSub_Name val:COMPREPLY span_id:244)
                      bracket_op: (bracket_op.WholeArray op_id:Id.Arith_Star)
                    )
                  )
                }
              ]
              redirects: [
                (redir.Redir
                  op: (Token id:Id.Redir_Great val:'>' span_id:251)
                  fd: -1
                  arg_word: {(out)}
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: run_completion
      body: 
        (command.BraceGroup
          children: [
            (C {(local)} {(-a)} {(COMPREPLY)} {(_words)})
            (C {(local)} {(_cword)})
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:_words)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (sh_array_literal
                        left: (Token id:Id.Op_LParen val:'(' span_id:281)
                        words: [{($ Id.VSub_Number '$1')}]
                      )
                    }
                  spids: [280]
                )
              ]
            )
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [
                (C {(test)} 
                  {
                    (DQ 
                      (braced_var_sub
                        token: (Token id:Id.VSub_Number val:1 span_id:292)
                        suffix_op: 
                          (suffix_op.Slice
                            begin: 
                              (arith_expr.Unary
                                op_id: Id.Node_UnaryMinus
                                child: (arith_expr.ArithWord w:{(Id.Lit_Digits 1)})
                              )
                          )
                      )
                    )
                  } {(Id.Lit_Equals '=')} {(SQ (Token id:Id.Lit_Chars val:' ' span_id:303))}
                )
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: 
                        (sh_lhs_expr.IndexedName
                          name: _words
                          index: 
                            (arith_expr.Binary
                              op_id: Id.Arith_Plus
                              left: 
                                (arith_expr.ArithWord
                                  w: 
                                    {
                                      (braced_var_sub
                                        token: (Token id:Id.VSub_Name val:_words span_id:324)
                                        prefix_op: (Id.VSub_Pound)
                                        bracket_op: (bracket_op.WholeArray op_id:Id.Lit_At)
                                      )
                                    }
                                )
                              right: (arith_expr.ArithWord w:{(Id.Lit_Digits 1)})
                            )
                        )
                      op: assign_op.Equal
                      rhs: {(SQ )}
                      spids: [308]
                    )
                  ]
                )
              ]
            )
            (command.DParen
              child: 
                (arith_expr.BinaryAssign
                  op_id: Id.Arith_Equal
                  left: (sh_lhs_expr.Name name:_cword)
                  right: 
                    (arith_expr.Binary
                      op_id: Id.Arith_Minus
                      left: 
                        (arith_expr.ArithWord
                          w: 
                            {
                              (braced_var_sub
                                token: (Token id:Id.VSub_Name val:_words span_id:341)
                                prefix_op: (Id.VSub_Pound)
                                bracket_op: (bracket_op.WholeArray op_id:Id.Lit_At)
                              )
                            }
                        )
                      right: (arith_expr.ArithWord w:{(Id.Lit_Digits 1)})
                    )
                )
            )
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [(C {(__git_wrap__git_main)}) (C {(print_comp)})]
            )
          ]
        )
    )
    (command.ShFunction
      name: test_completion
      body: 
        (command.BraceGroup
          children: [
            (command.AndOr
              ops: [Id.Op_DAmp Id.Op_DAmp]
              children: [
                (command.If
                  arms: [
                    (if_arm
                      cond: [(C {(test)} {($ Id.VSub_Pound '$#')} {(-gt)} {(1)})]
                      action: [
                        (command.Simple
                          words: [
                            {(printf)}
                            {(SQ (Token id:Id.Lit_Chars val:'%s\\n' span_id:401))}
                            {(DQ ($ Id.VSub_Number '$2'))}
                          ]
                          redirects: [
                            (redir.Redir
                              op: (Token id:Id.Redir_Great val:'>' span_id:408)
                              fd: -1
                              arg_word: {(expected)}
                            )
                          ]
                        )
                      ]
                      spids: [384 395]
                    )
                  ]
                  else_action: [
                    (command.Simple
                      words: [{(sed)} {(-e)} {(SQ (Token id:Id.Lit_Chars val:'s/Z$//' span_id:420))}]
                      redirects: [
                        (redir.Redir
                          op: (Token id:Id.Redir_Great val:'>' span_id:423)
                          fd: -1
                          arg_word: {(expected)}
                        )
                      ]
                    )
                  ]
                )
                (C {(run_completion)} {(DQ ($ Id.VSub_Number '$1'))})
                (C {(test_cmp)} {(expected)} {(out)})
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: test_gitcomp
      body: 
        (command.BraceGroup
          children: [
            (command.AndOr
              ops: [Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp]
              children: [
                (C {(local)} {(-a)} {(COMPREPLY)})
                (command.Simple
                  words: [{(sed)} {(-e)} {(SQ (Token id:Id.Lit_Chars val:'s/Z$//' span_id:484))}]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:487)
                      fd: -1
                      arg_word: {(expected)}
                    )
                  ]
                )
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:cur)
                      op: assign_op.Equal
                      rhs: {(DQ ($ Id.VSub_Number '$1'))}
                      spids: [493]
                    )
                  ]
                )
                (C {(shift)})
                (C {(__gitcomp)} {(DQ ($ Id.VSub_At '$@'))})
                (C {(print_comp)})
                (C {(test_cmp)} {(expected)} {(out)})
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: test_gitcomp_nl
      body: 
        (command.BraceGroup
          children: [
            (command.AndOr
              ops: [Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp]
              children: [
                (C {(local)} {(-a)} {(COMPREPLY)})
                (command.Simple
                  words: [{(sed)} {(-e)} {(SQ (Token id:Id.Lit_Chars val:'s/Z$//' span_id:563))}]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:566)
                      fd: -1
                      arg_word: {(expected)}
                    )
                  ]
                )
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:cur)
                      op: assign_op.Equal
                      rhs: {(DQ ($ Id.VSub_Number '$1'))}
                      spids: [572]
                    )
                  ]
                )
                (C {(shift)})
                (C {(__gitcomp_nl)} {(DQ ($ Id.VSub_At '$@'))})
                (C {(print_comp)})
                (C {(test_cmp)} {(expected)} {(out)})
              ]
            )
          ]
        )
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:invalid_variable_name)
          op: assign_op.Equal
          rhs: {(SQ (Token id:Id.Lit_Chars val:'${foo.bar}' span_id:610))}
          spids: [608]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:actual)
          op: assign_op.Equal
          rhs: {(DQ ($ Id.VSub_DollarName '$TRASH_DIRECTORY') (/actual))}
          spids: [614]
        )
      ]
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'setup for __gitdir tests' span_id:624))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:628) 
          (Token id:Id.Lit_Chars val:'\tmkdir -p subdir/subsubdir &&\n' span_id:629) (Token id:Id.Lit_Chars val:'\tgit init otherrepo\n' span_id:630)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: '__gitdir - from command line (through $__git_dir)'
            span_id: 637
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:641) 
          (Token
            id: Id.Lit_Chars
            val: '\techo "$TRASH_DIRECTORY/otherrepo/.git" >expected &&\n'
            span_id: 642
          ) (Token id:Id.Lit_Chars val:'\t(\n' span_id:643) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t__git_dir="$TRASH_DIRECTORY/otherrepo/.git" &&\n'
            span_id: 644
          ) (Token id:Id.Lit_Chars val:'\t\t__gitdir >"$actual"\n' span_id:645) 
          (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:646) (Token id:Id.Lit_Chars val:'\ttest_cmp expected "$actual"\n' span_id:647)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'__gitdir - repo as argument' span_id:654))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:658) 
          (Token id:Id.Lit_Chars val:'\techo "otherrepo/.git" >expected &&\n' span_id:659) (Token id:Id.Lit_Chars val:'\t__gitdir "otherrepo" >"$actual" &&\n' span_id:660) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expected "$actual"\n' span_id:661)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'__gitdir - remote as argument' span_id:668))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:672) 
          (Token id:Id.Lit_Chars val:'\techo "remote" >expected &&\n' span_id:673) (Token id:Id.Lit_Chars val:'\t__gitdir "remote" >"$actual" &&\n' span_id:674) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expected "$actual"\n' span_id:675)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'__gitdir - .git directory in cwd' span_id:682))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:686) 
          (Token id:Id.Lit_Chars val:'\techo ".git" >expected &&\n' span_id:687) (Token id:Id.Lit_Chars val:'\t__gitdir >"$actual" &&\n' span_id:688) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expected "$actual"\n' span_id:689)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'__gitdir - .git directory in parent' span_id:696))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:700) 
          (Token id:Id.Lit_Chars val:'\techo "$(pwd -P)/.git" >expected &&\n' span_id:701) (Token id:Id.Lit_Chars val:'\t(\n' span_id:702) 
          (Token id:Id.Lit_Chars val:'\t\tcd subdir/subsubdir &&\n' span_id:703) (Token id:Id.Lit_Chars val:'\t\t__gitdir >"$actual"\n' span_id:704) 
          (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:705) (Token id:Id.Lit_Chars val:'\ttest_cmp expected "$actual"\n' span_id:706)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'__gitdir - cwd is a .git directory' span_id:713))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:717) 
          (Token id:Id.Lit_Chars val:'\techo "." >expected &&\n' span_id:718) (Token id:Id.Lit_Chars val:'\t(\n' span_id:719) 
          (Token id:Id.Lit_Chars val:'\t\tcd .git &&\n' span_id:720) (Token id:Id.Lit_Chars val:'\t\t__gitdir >"$actual"\n' span_id:721) 
          (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:722) (Token id:Id.Lit_Chars val:'\ttest_cmp expected "$actual"\n' span_id:723)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'__gitdir - parent is a .git directory' span_id:730))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:734) 
          (Token id:Id.Lit_Chars val:'\techo "$(pwd -P)/.git" >expected &&\n' span_id:735) (Token id:Id.Lit_Chars val:'\t(\n' span_id:736) 
          (Token id:Id.Lit_Chars val:'\t\tcd .git/refs/heads &&\n' span_id:737) (Token id:Id.Lit_Chars val:'\t\t__gitdir >"$actual"\n' span_id:738) 
          (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:739) (Token id:Id.Lit_Chars val:'\ttest_cmp expected "$actual"\n' span_id:740)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: '__gitdir - $GIT_DIR set while .git directory in cwd'
            span_id: 747
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:751) 
          (Token
            id: Id.Lit_Chars
            val: '\techo "$TRASH_DIRECTORY/otherrepo/.git" >expected &&\n'
            span_id: 752
          ) (Token id:Id.Lit_Chars val:'\t(\n' span_id:753) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tGIT_DIR="$TRASH_DIRECTORY/otherrepo/.git" &&\n'
            span_id: 754
          ) (Token id:Id.Lit_Chars val:'\t\texport GIT_DIR &&\n' span_id:755) 
          (Token id:Id.Lit_Chars val:'\t\t__gitdir >"$actual"\n' span_id:756) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:757) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expected "$actual"\n' span_id:758)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: '__gitdir - $GIT_DIR set while .git directory in parent'
            span_id: 765
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:769) 
          (Token
            id: Id.Lit_Chars
            val: '\techo "$TRASH_DIRECTORY/otherrepo/.git" >expected &&\n'
            span_id: 770
          ) (Token id:Id.Lit_Chars val:'\t(\n' span_id:771) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tGIT_DIR="$TRASH_DIRECTORY/otherrepo/.git" &&\n'
            span_id: 772
          ) (Token id:Id.Lit_Chars val:'\t\texport GIT_DIR &&\n' span_id:773) 
          (Token id:Id.Lit_Chars val:'\t\tcd subdir &&\n' span_id:774) (Token id:Id.Lit_Chars val:'\t\t__gitdir >"$actual"\n' span_id:775) 
          (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:776) (Token id:Id.Lit_Chars val:'\ttest_cmp expected "$actual"\n' span_id:777)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'__gitdir - non-existing $GIT_DIR' span_id:784))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:788) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:789) (Token id:Id.Lit_Chars val:'\t\tGIT_DIR="$TRASH_DIRECTORY/non-existing" &&\n' span_id:790) 
          (Token id:Id.Lit_Chars val:'\t\texport GIT_DIR &&\n' span_id:791) (Token id:Id.Lit_Chars val:'\t\ttest_must_fail __gitdir\n' span_id:792) 
          (Token id:Id.Lit_Chars val:'\t)\n' span_id:793)
        )
      }
    )
    (command.ShFunction
      name: pwd_P_W
      body: 
        (command.BraceGroup
          children: [
            (command.If
              arms: [
                (if_arm
                  cond: [(C {(test_have_prereq)} {(MINGW)})]
                  action: [(C {(pwd)} {(-W)})]
                  spids: [807 814]
                )
              ]
              else_action: [(C {(pwd)} {(-P)})]
            )
          ]
        )
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'__gitdir - gitfile in cwd' span_id:838))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:842) 
          (Token
            id: Id.Lit_Chars
            val: '\techo "$(pwd_P_W)/otherrepo/.git" >expected &&\n'
            span_id: 843
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\techo "gitdir: $(pwd_P_W)/otherrepo/.git" >subdir/.git &&\n'
            span_id: 844
          ) (Token id:Id.Lit_Chars val:'\ttest_when_finished "rm -f subdir/.git" &&\n' span_id:845) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:846) (Token id:Id.Lit_Chars val:'\t\tcd subdir &&\n' span_id:847) 
          (Token id:Id.Lit_Chars val:'\t\t__gitdir >"$actual"\n' span_id:848) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:849) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expected "$actual"\n' span_id:850)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'__gitdir - gitfile in parent' span_id:857))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:861) 
          (Token
            id: Id.Lit_Chars
            val: '\techo "$(pwd_P_W)/otherrepo/.git" >expected &&\n'
            span_id: 862
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\techo "gitdir: $(pwd_P_W)/otherrepo/.git" >subdir/.git &&\n'
            span_id: 863
          ) (Token id:Id.Lit_Chars val:'\ttest_when_finished "rm -f subdir/.git" &&\n' span_id:864) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:865) (Token id:Id.Lit_Chars val:'\t\tcd subdir/subsubdir &&\n' span_id:866) 
          (Token id:Id.Lit_Chars val:'\t\t__gitdir >"$actual"\n' span_id:867) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:868) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expected "$actual"\n' span_id:869)
        )
      }
    )
    (C {(test_expect_success)} {(SYMLINKS)} 
      {(SQ (Token id:Id.Lit_Chars val:'__gitdir - resulting path avoids symlinks' span_id:878))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:882) 
          (Token
            id: Id.Lit_Chars
            val: '\techo "$(pwd -P)/otherrepo/.git" >expected &&\n'
            span_id: 883
          ) (Token id:Id.Lit_Chars val:'\tmkdir otherrepo/dir &&\n' span_id:884) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_when_finished "rm -rf otherrepo/dir" &&\n'
            span_id: 885
          ) (Token id:Id.Lit_Chars val:'\tln -s otherrepo/dir link &&\n' span_id:886) 
          (Token id:Id.Lit_Chars val:'\ttest_when_finished "rm -f link" &&\n' span_id:887) (Token id:Id.Lit_Chars val:'\t(\n' span_id:888) 
          (Token id:Id.Lit_Chars val:'\t\tcd link &&\n' span_id:889) (Token id:Id.Lit_Chars val:'\t\t__gitdir >"$actual"\n' span_id:890) 
          (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:891) (Token id:Id.Lit_Chars val:'\ttest_cmp expected "$actual"\n' span_id:892)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'__gitdir - not a git repository' span_id:899))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:903) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:904) (Token id:Id.Lit_Chars val:'\t\tcd subdir/subsubdir &&\n' span_id:905) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tGIT_CEILING_DIRECTORIES="$TRASH_DIRECTORY" &&\n'
            span_id: 906
          ) (Token id:Id.Lit_Chars val:'\t\texport GIT_CEILING_DIRECTORIES &&\n' span_id:907) 
          (Token id:Id.Lit_Chars val:'\t\ttest_must_fail __gitdir\n' span_id:908) (Token id:Id.Lit_Chars val:'\t)\n' span_id:909)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'__gitcomp - trailing space - options' span_id:916))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:920) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_gitcomp "--re" "--dry-run --reuse-message= --reedit-message=\n'
            span_id: 921
          ) (Token id:Id.Lit_Chars val:'\t\t--reset-author" <<-EOF\n' span_id:922) 
          (Token id:Id.Lit_Chars val:'\t--reuse-message=Z\n' span_id:923) (Token id:Id.Lit_Chars val:'\t--reedit-message=Z\n' span_id:924) 
          (Token id:Id.Lit_Chars val:'\t--reset-author Z\n' span_id:925) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:926)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'__gitcomp - trailing space - config keys' span_id:933))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:937) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_gitcomp "br" "branch. branch.autosetupmerge\n'
            span_id: 938
          ) (Token id:Id.Lit_Chars val:'\t\tbranch.autosetuprebase browser." <<-\\EOF\n' span_id:939) 
          (Token id:Id.Lit_Chars val:'\tbranch.Z\n' span_id:940) (Token id:Id.Lit_Chars val:'\tbranch.autosetupmerge Z\n' span_id:941) 
          (Token id:Id.Lit_Chars val:'\tbranch.autosetuprebase Z\n' span_id:942) (Token id:Id.Lit_Chars val:'\tbrowser.Z\n' span_id:943) 
          (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:944)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'__gitcomp - option parameter' span_id:951))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:955) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_gitcomp "--strategy=re" "octopus ours recursive resolve subtree" \\\n'
            span_id: 956
          ) (Token id:Id.Lit_Chars val:'\t\t"" "re" <<-\\EOF\n' span_id:957) 
          (Token id:Id.Lit_Chars val:'\trecursive Z\n' span_id:958) (Token id:Id.Lit_Chars val:'\tresolve Z\n' span_id:959) 
          (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:960)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'__gitcomp - prefix' span_id:967))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:971) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_gitcomp "branch.me" "remote merge mergeoptions rebase" \\\n'
            span_id: 972
          ) (Token id:Id.Lit_Chars val:'\t\t"branch.maint." "me" <<-\\EOF\n' span_id:973) 
          (Token id:Id.Lit_Chars val:'\tbranch.maint.merge Z\n' span_id:974) (Token id:Id.Lit_Chars val:'\tbranch.maint.mergeoptions Z\n' span_id:975) 
          (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:976)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'__gitcomp - suffix' span_id:983))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:987) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_gitcomp "branch.me" "master maint next pu" "branch." \\\n'
            span_id: 988
          ) (Token id:Id.Lit_Chars val:'\t\t"ma" "." <<-\\EOF\n' span_id:989) 
          (Token id:Id.Lit_Chars val:'\tbranch.master.Z\n' span_id:990) (Token id:Id.Lit_Chars val:'\tbranch.maint.Z\n' span_id:991) 
          (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:992)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: '__gitcomp - doesnt fail because of invalid variable name'
            span_id: 999
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1003) 
          (Token id:Id.Lit_Chars val:'\t__gitcomp "$invalid_variable_name"\n' span_id:1004)
        )
      }
    )
    (command.Simple
      words: [{(read)} {(-r)} {(-d)} {(DQ )} {(refs)}]
      redirects: [
        (redir.HereDoc
          op: (Token id:Id.Redir_DLessDash val:'<<-' span_id:1019)
          fd: -1
          here_begin: 
            {(word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\E' span_id:1020)) 
              (OF)
            }
          here_end_span_id: 1027
          stdin_parts: [('maint\n') ('master\n') ('next\n') ('pu\n')]
        )
      ]
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'__gitcomp_nl - trailing space' span_id:1032))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1036) 
          (Token id:Id.Lit_Chars val:'\ttest_gitcomp_nl "m" "$refs" <<-EOF\n' span_id:1037) (Token id:Id.Lit_Chars val:'\tmaint Z\n' span_id:1038) 
          (Token id:Id.Lit_Chars val:'\tmaster Z\n' span_id:1039) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:1040)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'__gitcomp_nl - prefix' span_id:1047))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1051) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_gitcomp_nl "--fixup=m" "$refs" "--fixup=" "m" <<-EOF\n'
            span_id: 1052
          ) (Token id:Id.Lit_Chars val:'\t--fixup=maint Z\n' span_id:1053) 
          (Token id:Id.Lit_Chars val:'\t--fixup=master Z\n' span_id:1054) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:1055)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'__gitcomp_nl - suffix' span_id:1062))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1066) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_gitcomp_nl "branch.ma" "$refs" "branch." "ma" "." <<-\\EOF\n'
            span_id: 1067
          ) (Token id:Id.Lit_Chars val:'\tbranch.maint.Z\n' span_id:1068) 
          (Token id:Id.Lit_Chars val:'\tbranch.master.Z\n' span_id:1069) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:1070)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'__gitcomp_nl - no suffix' span_id:1077))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1081) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_gitcomp_nl "ma" "$refs" "" "ma" "" <<-\\EOF\n'
            span_id: 1082
          ) (Token id:Id.Lit_Chars val:'\tmaintZ\n' span_id:1083) 
          (Token id:Id.Lit_Chars val:'\tmasterZ\n' span_id:1084) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:1085)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: '__gitcomp_nl - doesnt fail because of invalid variable name'
            span_id: 1092
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1096) 
          (Token
            id: Id.Lit_Chars
            val: '\t__gitcomp_nl "$invalid_variable_name"\n'
            span_id: 1097
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: '__git_remotes - list remotes from $GIT_DIR/remotes and from config file'
            span_id: 1104
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1108) 
          (Token id:Id.Lit_Chars val:'\tcat >expect <<-EOF &&\n' span_id:1109) (Token id:Id.Lit_Chars val:'\tremote_from_file_1\n' span_id:1110) 
          (Token id:Id.Lit_Chars val:'\tremote_from_file_2\n' span_id:1111) (Token id:Id.Lit_Chars val:'\tremote_in_config_1\n' span_id:1112) 
          (Token id:Id.Lit_Chars val:'\tremote_in_config_2\n' span_id:1113) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:1114) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_when_finished "rm -rf .git/remotes" &&\n'
            span_id: 1115
          ) (Token id:Id.Lit_Chars val:'\tmkdir -p .git/remotes &&\n' span_id:1116) 
          (Token
            id: Id.Lit_Chars
            val: '\t>.git/remotes/remote_from_file_1 &&\n'
            span_id: 1117
          ) (Token id:Id.Lit_Chars val:'\t>.git/remotes/remote_from_file_2 &&\n' span_id:1118) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_when_finished "git remote remove remote_in_config_1" &&\n'
            span_id: 1119
          ) (Token id:Id.Lit_Chars val:'\tgit remote add remote_in_config_1 git://remote_1 &&\n' span_id:1120) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_when_finished "git remote remove remote_in_config_2" &&\n'
            span_id: 1121
          ) (Token id:Id.Lit_Chars val:'\tgit remote add remote_in_config_2 git://remote_2 &&\n' span_id:1122) 
          (Token id:Id.Lit_Chars val:'\t__git_remotes >actual &&\n' span_id:1123) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:1124)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:__git_get_config_variables span_id:1131))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1135) 
          (Token id:Id.Lit_Chars val:'\tcat >expect <<-EOF &&\n' span_id:1136) (Token id:Id.Lit_Chars val:'\tname-1\n' span_id:1137) 
          (Token id:Id.Lit_Chars val:'\tname-2\n' span_id:1138) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:1139) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_config interesting.name-1 good &&\n'
            span_id: 1140
          ) (Token id:Id.Lit_Chars val:'\ttest_config interesting.name-2 good &&\n' span_id:1141) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_config subsection.interesting.name-3 bad &&\n'
            span_id: 1142
          ) (Token id:Id.Lit_Chars val:'\t__git_get_config_variables interesting >actual &&\n' span_id:1143) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:1144)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:__git_pretty_aliases span_id:1151))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1155) 
          (Token id:Id.Lit_Chars val:'\tcat >expect <<-EOF &&\n' span_id:1156) (Token id:Id.Lit_Chars val:'\tauthor\n' span_id:1157) 
          (Token id:Id.Lit_Chars val:'\thash\n' span_id:1158) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:1159) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_config pretty.author "%an %ae" &&\n'
            span_id: 1160
          ) (Token id:Id.Lit_Chars val:'\ttest_config pretty.hash %H &&\n' span_id:1161) 
          (Token id:Id.Lit_Chars val:'\t__git_pretty_aliases >actual &&\n' span_id:1162) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:1163)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:__git_aliases span_id:1170))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1174) 
          (Token id:Id.Lit_Chars val:'\tcat >expect <<-EOF &&\n' span_id:1175) (Token id:Id.Lit_Chars val:'\tci\n' span_id:1176) (Token id:Id.Lit_Chars val:'\tco\n' span_id:1177) 
          (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:1178) (Token id:Id.Lit_Chars val:'\ttest_config alias.ci commit &&\n' span_id:1179) 
          (Token id:Id.Lit_Chars val:'\ttest_config alias.co checkout &&\n' span_id:1180) (Token id:Id.Lit_Chars val:'\t__git_aliases >actual &&\n' span_id:1181) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:1182)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:basic span_id:1189))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1193) 
          (Token id:Id.Lit_Chars val:'\trun_completion "git " &&\n' span_id:1194) (Token id:Id.Lit_Chars val:'\t# built-in\n' span_id:1195) 
          (Token id:Id.Lit_Chars val:'\tgrep -q "^add \\$" out &&\n' span_id:1196) (Token id:Id.Lit_Chars val:'\t# script\n' span_id:1197) 
          (Token
            id: Id.Lit_Chars
            val: '\tgrep -q "^filter-branch \\$" out &&\n'
            span_id: 1198
          ) (Token id:Id.Lit_Chars val:'\t# plumbing\n' span_id:1199) 
          (Token id:Id.Lit_Chars val:'\t! grep -q "^ls-files \\$" out &&\n' span_id:1200) (Token id:Id.Lit_Chars val:'\n' span_id:1201) 
          (Token id:Id.Lit_Chars val:'\trun_completion "git f" &&\n' span_id:1202) (Token id:Id.Lit_Chars val:'\t! grep -q -v "^f" out\n' span_id:1203)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'double dash "git" itself' span_id:1210))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1214) 
          (Token id:Id.Lit_Chars val:'\ttest_completion "git --" <<-\\EOF\n' span_id:1215) (Token id:Id.Lit_Chars val:'\t--paginate Z\n' span_id:1216) 
          (Token id:Id.Lit_Chars val:'\t--no-pager Z\n' span_id:1217) (Token id:Id.Lit_Chars val:'\t--git-dir=\n' span_id:1218) 
          (Token id:Id.Lit_Chars val:'\t--bare Z\n' span_id:1219) (Token id:Id.Lit_Chars val:'\t--version Z\n' span_id:1220) 
          (Token id:Id.Lit_Chars val:'\t--exec-path Z\n' span_id:1221) (Token id:Id.Lit_Chars val:'\t--exec-path=\n' span_id:1222) 
          (Token id:Id.Lit_Chars val:'\t--html-path Z\n' span_id:1223) (Token id:Id.Lit_Chars val:'\t--man-path Z\n' span_id:1224) 
          (Token id:Id.Lit_Chars val:'\t--info-path Z\n' span_id:1225) (Token id:Id.Lit_Chars val:'\t--work-tree=\n' span_id:1226) 
          (Token id:Id.Lit_Chars val:'\t--namespace=\n' span_id:1227) (Token id:Id.Lit_Chars val:'\t--no-replace-objects Z\n' span_id:1228) 
          (Token id:Id.Lit_Chars val:'\t--help Z\n' span_id:1229) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:1230)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'double dash "git checkout"' span_id:1237))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1241) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_completion "git checkout --" <<-\\EOF\n'
            span_id: 1242
          ) (Token id:Id.Lit_Chars val:'\t--quiet Z\n' span_id:1243) 
          (Token id:Id.Lit_Chars val:'\t--ours Z\n' span_id:1244) (Token id:Id.Lit_Chars val:'\t--theirs Z\n' span_id:1245) 
          (Token id:Id.Lit_Chars val:'\t--track Z\n' span_id:1246) (Token id:Id.Lit_Chars val:'\t--no-track Z\n' span_id:1247) 
          (Token id:Id.Lit_Chars val:'\t--merge Z\n' span_id:1248) (Token id:Id.Lit_Chars val:'\t--conflict=\n' span_id:1249) 
          (Token id:Id.Lit_Chars val:'\t--orphan Z\n' span_id:1250) (Token id:Id.Lit_Chars val:'\t--patch Z\n' span_id:1251) 
          (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:1252)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'general options' span_id:1259))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1263) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_completion "git --ver" "--version " &&\n'
            span_id: 1264
          ) (Token id:Id.Lit_Chars val:'\ttest_completion "git --hel" "--help " &&\n' span_id:1265) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_completion "git --exe" <<-\\EOF &&\n'
            span_id: 1266
          ) (Token id:Id.Lit_Chars val:'\t--exec-path Z\n' span_id:1267) 
          (Token id:Id.Lit_Chars val:'\t--exec-path=\n' span_id:1268) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:1269) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_completion "git --htm" "--html-path " &&\n'
            span_id: 1270
          ) (Token id:Id.Lit_Chars val:'\ttest_completion "git --pag" "--paginate " &&\n' span_id:1271) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_completion "git --no-p" "--no-pager " &&\n'
            span_id: 1272
          ) (Token id:Id.Lit_Chars val:'\ttest_completion "git --git" "--git-dir=" &&\n' span_id:1273) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_completion "git --wor" "--work-tree=" &&\n'
            span_id: 1274
          ) (Token id:Id.Lit_Chars val:'\ttest_completion "git --nam" "--namespace=" &&\n' span_id:1275) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_completion "git --bar" "--bare " &&\n'
            span_id: 1276
          ) (Token id:Id.Lit_Chars val:'\ttest_completion "git --inf" "--info-path " &&\n' span_id:1277) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_completion "git --no-r" "--no-replace-objects "\n'
            span_id: 1278
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'general options plus command' span_id:1285))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1289) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_completion "git --version check" "checkout " &&\n'
            span_id: 1290
          ) (Token id:Id.Lit_Chars val:'\ttest_completion "git --paginate check" "checkout " &&\n' span_id:1291) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_completion "git --git-dir=foo check" "checkout " &&\n'
            span_id: 1292
          ) (Token id:Id.Lit_Chars val:'\ttest_completion "git --bare check" "checkout " &&\n' span_id:1293) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_completion "git --exec-path=foo check" "checkout " &&\n'
            span_id: 1294
          ) (Token id:Id.Lit_Chars val:'\ttest_completion "git --html-path check" "checkout " &&\n' span_id:1295) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_completion "git --no-pager check" "checkout " &&\n'
            span_id: 1296
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_completion "git --work-tree=foo check" "checkout " &&\n'
            span_id: 1297
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_completion "git --namespace=foo check" "checkout " &&\n'
            span_id: 1298
          ) (Token id:Id.Lit_Chars val:'\ttest_completion "git --paginate check" "checkout " &&\n' span_id:1299) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_completion "git --info-path check" "checkout " &&\n'
            span_id: 1300
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_completion "git --no-replace-objects check" "checkout "\n'
            span_id: 1301
          )
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'git --help completion' span_id:1308))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1312) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_completion "git --help ad" "add " &&\n'
            span_id: 1313
          ) (Token id:Id.Lit_Chars val:'\ttest_completion "git --help core" "core-tutorial "\n' span_id:1314)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'setup for ref completion' span_id:1321))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1325) 
          (Token id:Id.Lit_Chars val:'\techo content >file1 &&\n' span_id:1326) (Token id:Id.Lit_Chars val:'\techo more >file2 &&\n' span_id:1327) 
          (Token id:Id.Lit_Chars val:'\tgit add . &&\n' span_id:1328) (Token id:Id.Lit_Chars val:'\tgit commit -m one &&\n' span_id:1329) 
          (Token id:Id.Lit_Chars val:'\tgit branch mybranch &&\n' span_id:1330) (Token id:Id.Lit_Chars val:'\tgit tag mytag\n' span_id:1331)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'checkout completes ref names' span_id:1338))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1342) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_completion "git checkout m" <<-\\EOF\n'
            span_id: 1343
          ) (Token id:Id.Lit_Chars val:'\tmaster Z\n' span_id:1344) 
          (Token id:Id.Lit_Chars val:'\tmybranch Z\n' span_id:1345) (Token id:Id.Lit_Chars val:'\tmytag Z\n' span_id:1346) 
          (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:1347)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'show completes all refs' span_id:1354))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1358) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_completion "git show m" <<-\\EOF\n'
            span_id: 1359
          ) (Token id:Id.Lit_Chars val:'\tmaster Z\n' span_id:1360) 
          (Token id:Id.Lit_Chars val:'\tmybranch Z\n' span_id:1361) (Token id:Id.Lit_Chars val:'\tmytag Z\n' span_id:1362) 
          (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:1363)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'<ref>: completes paths' span_id:1370))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1374) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_completion "git show mytag:f" <<-\\EOF\n'
            span_id: 1375
          ) (Token id:Id.Lit_Chars val:'\tfile1 Z\n' span_id:1376) 
          (Token id:Id.Lit_Chars val:'\tfile2 Z\n' span_id:1377) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:1378)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'complete tree filename with spaces' span_id:1385))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1389) 
          (Token
            id: Id.Lit_Chars
            val: '\techo content >"name with spaces" &&\n'
            span_id: 1390
          ) (Token id:Id.Lit_Chars val:'\tgit add . &&\n' span_id:1391) 
          (Token id:Id.Lit_Chars val:'\tgit commit -m spaces &&\n' span_id:1392) (Token id:Id.Lit_Chars val:'\ttest_completion "git show HEAD:nam" <<-\\EOF\n' span_id:1393) 
          (Token id:Id.Lit_Chars val:'\tname with spaces Z\n' span_id:1394) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:1395)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'complete tree filename with metacharacters' span_id:1402))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1406) 
          (Token
            id: Id.Lit_Chars
            val: '\techo content >"name with \\${meta}" &&\n'
            span_id: 1407
          ) (Token id:Id.Lit_Chars val:'\tgit add . &&\n' span_id:1408) 
          (Token id:Id.Lit_Chars val:'\tgit commit -m meta &&\n' span_id:1409) (Token id:Id.Lit_Chars val:'\ttest_completion "git show HEAD:nam" <<-\\EOF\n' span_id:1410) 
          (Token id:Id.Lit_Chars val:'\tname with ${meta} Z\n' span_id:1411) (Token id:Id.Lit_Chars val:'\tname with spaces Z\n' span_id:1412) 
          (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:1413)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:send-email span_id:1420))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1424) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_completion "git send-email --cov" "--cover-letter " &&\n'
            span_id: 1425
          ) (Token id:Id.Lit_Chars val:'\ttest_completion "git send-email ma" "master "\n' span_id:1426)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'complete files' span_id:1433))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1437) 
          (Token id:Id.Lit_Chars val:'\tgit init tmp && cd tmp &&\n' span_id:1438) (Token id:Id.Lit_Chars val:'\ttest_when_finished "cd .. && rm -rf tmp" &&\n' span_id:1439) 
          (Token id:Id.Lit_Chars val:'\n' span_id:1440) (Token id:Id.Lit_Chars val:'\techo "expected" > .gitignore &&\n' span_id:1441) 
          (Token id:Id.Lit_Chars val:'\techo "out" >> .gitignore &&\n' span_id:1442) (Token id:Id.Lit_Chars val:'\n' span_id:1443) 
          (Token id:Id.Lit_Chars val:'\tgit add .gitignore &&\n' span_id:1444) (Token id:Id.Lit_Chars val:'\ttest_completion "git commit " ".gitignore" &&\n' span_id:1445) 
          (Token id:Id.Lit_Chars val:'\n' span_id:1446) (Token id:Id.Lit_Chars val:'\tgit commit -m ignore &&\n' span_id:1447) 
          (Token id:Id.Lit_Chars val:'\n' span_id:1448) (Token id:Id.Lit_Chars val:'\ttouch new &&\n' span_id:1449) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_completion "git add " "new" &&\n'
            span_id: 1450
          ) (Token id:Id.Lit_Chars val:'\n' span_id:1451) 
          (Token id:Id.Lit_Chars val:'\tgit add new &&\n' span_id:1452) (Token id:Id.Lit_Chars val:'\tgit commit -a -m new &&\n' span_id:1453) 
          (Token id:Id.Lit_Chars val:'\ttest_completion "git add " "" &&\n' span_id:1454) (Token id:Id.Lit_Chars val:'\n' span_id:1455) 
          (Token id:Id.Lit_Chars val:'\tgit mv new modified &&\n' span_id:1456) (Token id:Id.Lit_Chars val:'\techo modify > modified &&\n' span_id:1457) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_completion "git add " "modified" &&\n'
            span_id: 1458
          ) (Token id:Id.Lit_Chars val:'\n' span_id:1459) 
          (Token id:Id.Lit_Chars val:'\ttouch untracked &&\n' span_id:1460) (Token id:Id.Lit_Chars val:'\n' span_id:1461) 
          (Token
            id: Id.Lit_Chars
            val: '\t: TODO .gitignore should not be here &&\n'
            span_id: 1462
          ) (Token id:Id.Lit_Chars val:'\ttest_completion "git rm " <<-\\EOF &&\n' span_id:1463) 
          (Token id:Id.Lit_Chars val:'\t.gitignore\n' span_id:1464) (Token id:Id.Lit_Chars val:'\tmodified\n' span_id:1465) 
          (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:1466) (Token id:Id.Lit_Chars val:'\n' span_id:1467) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_completion "git clean " "untracked" &&\n'
            span_id: 1468
          ) (Token id:Id.Lit_Chars val:'\n' span_id:1469) 
          (Token
            id: Id.Lit_Chars
            val: '\t: TODO .gitignore should not be here &&\n'
            span_id: 1470
          ) (Token id:Id.Lit_Chars val:'\ttest_completion "git mv " <<-\\EOF &&\n' span_id:1471) 
          (Token id:Id.Lit_Chars val:'\t.gitignore\n' span_id:1472) (Token id:Id.Lit_Chars val:'\tmodified\n' span_id:1473) 
          (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:1474) (Token id:Id.Lit_Chars val:'\n' span_id:1475) 
          (Token id:Id.Lit_Chars val:'\tmkdir dir &&\n' span_id:1476) (Token id:Id.Lit_Chars val:'\ttouch dir/file-in-dir &&\n' span_id:1477) 
          (Token id:Id.Lit_Chars val:'\tgit add dir/file-in-dir &&\n' span_id:1478) (Token id:Id.Lit_Chars val:'\tgit commit -m dir &&\n' span_id:1479) 
          (Token id:Id.Lit_Chars val:'\n' span_id:1480) (Token id:Id.Lit_Chars val:'\tmkdir untracked-dir &&\n' span_id:1481) 
          (Token id:Id.Lit_Chars val:'\n' span_id:1482) (Token id:Id.Lit_Chars val:'\t: TODO .gitignore should not be here &&\n' span_id:1483) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_completion "git mv modified " <<-\\EOF &&\n'
            span_id: 1484
          ) (Token id:Id.Lit_Chars val:'\t.gitignore\n' span_id:1485) 
          (Token id:Id.Lit_Chars val:'\tdir\n' span_id:1486) (Token id:Id.Lit_Chars val:'\tmodified\n' span_id:1487) 
          (Token id:Id.Lit_Chars val:'\tuntracked\n' span_id:1488) (Token id:Id.Lit_Chars val:'\tuntracked-dir\n' span_id:1489) 
          (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:1490) (Token id:Id.Lit_Chars val:'\n' span_id:1491) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_completion "git commit " "modified" &&\n'
            span_id: 1492
          ) (Token id:Id.Lit_Chars val:'\n' span_id:1493) 
          (Token
            id: Id.Lit_Chars
            val: '\t: TODO .gitignore should not be here &&\n'
            span_id: 1494
          ) (Token id:Id.Lit_Chars val:'\ttest_completion "git ls-files " <<-\\EOF &&\n' span_id:1495) 
          (Token id:Id.Lit_Chars val:'\t.gitignore\n' span_id:1496) (Token id:Id.Lit_Chars val:'\tdir\n' span_id:1497) 
          (Token id:Id.Lit_Chars val:'\tmodified\n' span_id:1498) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:1499) (Token id:Id.Lit_Chars val:'\n' span_id:1500) 
          (Token id:Id.Lit_Chars val:'\ttouch momified &&\n' span_id:1501) (Token id:Id.Lit_Chars val:'\ttest_completion "git add mom" "momified"\n' span_id:1502)
        )
      }
    )
    (C {(test_expect_success)} 
      {(DQ ("completion uses <cmd> completion for alias: !sh -c 'git <cmd> ...'"))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1513) 
          (Token id:Id.Lit_Chars val:'\ttest_config alias.co "!sh -c ' span_id:1514)
        ) (DQ ("'")) (SQ (Token id:Id.Lit_Chars val:'git checkout ...' span_id:1520)) (DQ ("'")) 
        (SQ (Token id:Id.Lit_Chars val:'" &&\n' span_id:1526) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_completion "git co m" <<-\\EOF\n'
            span_id: 1527
          ) (Token id:Id.Lit_Chars val:'\tmaster Z\n' span_id:1528) 
          (Token id:Id.Lit_Chars val:'\tmybranch Z\n' span_id:1529) (Token id:Id.Lit_Chars val:'\tmytag Z\n' span_id:1530) 
          (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:1531)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'completion uses <cmd> completion for alias: !f () { VAR=val git <cmd> ... }'
            span_id: 1538
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1542) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_config alias.co "!f () { VAR=val git checkout ... ; } f" &&\n'
            span_id: 1543
          ) (Token id:Id.Lit_Chars val:'\ttest_completion "git co m" <<-\\EOF\n' span_id:1544) 
          (Token id:Id.Lit_Chars val:'\tmaster Z\n' span_id:1545) (Token id:Id.Lit_Chars val:'\tmybranch Z\n' span_id:1546) 
          (Token id:Id.Lit_Chars val:'\tmytag Z\n' span_id:1547) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:1548)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'completion used <cmd> completion for alias: !f() { : git <cmd> ; ... }'
            span_id: 1555
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1559) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_config alias.co "!f() { : git checkout ; if ... } f" &&\n'
            span_id: 1560
          ) (Token id:Id.Lit_Chars val:'\ttest_completion "git co m" <<-\\EOF\n' span_id:1561) 
          (Token id:Id.Lit_Chars val:'\tmaster Z\n' span_id:1562) (Token id:Id.Lit_Chars val:'\tmybranch Z\n' span_id:1563) 
          (Token id:Id.Lit_Chars val:'\tmytag Z\n' span_id:1564) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:1565)
        )
      }
    )
    (C {(test_expect_failure)} 
      {(SQ (Token id:Id.Lit_Chars val:'complete with tilde expansion' span_id:1572))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1576) 
          (Token id:Id.Lit_Chars val:'\tgit init tmp && cd tmp &&\n' span_id:1577) (Token id:Id.Lit_Chars val:'\ttest_when_finished "cd .. && rm -rf tmp" &&\n' span_id:1578) 
          (Token id:Id.Lit_Chars val:'\n' span_id:1579) (Token id:Id.Lit_Chars val:'\ttouch ~/tmp/file &&\n' span_id:1580) 
          (Token id:Id.Lit_Chars val:'\n' span_id:1581) (Token id:Id.Lit_Chars val:'\ttest_completion "git add ~/tmp/" "~/tmp/file"\n' span_id:1582)
        )
      }
    )
    (C {(test_done)})
  ]
)