(command.CommandList
  children: [
    (command.Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (lhs_expr.LhsName name:test_description spids:[12])
          op: Equal
          rhs: {(SQ <'log/show --expand-tabs'>)}
          spids: [12]
        )
      ]
      spids: [12]
    )
    (C {(.)} {(./test-lib.sh)})
    (command.Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (lhs_expr.LhsName name:HT spids:[23])
          op: Equal
          rhs: {(DQ ('\t'))}
          spids: [23]
        )
      ]
      spids: [23]
    )
    (command.Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (lhs_expr.LhsName name:title spids:[28])
          op: Equal
          rhs: {(SQ <'tab indent at the beginning of the title line'>)}
          spids: [28]
        )
      ]
      spids: [28]
    )
    (command.Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (lhs_expr.LhsName name:body spids:[33])
          op: Equal
          rhs: {(SQ <'tab indent on a line in the body'>)}
          spids: [33]
        )
      ]
      spids: [33]
    )
    (command.FuncDef
      name: count_expand
      body: 
        (command.BraceGroup
          children: [
            (command.Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (lhs_expr.LhsName name:expect spids:[50])
                  op: Equal
                  rhs: (word.EmptyWord)
                  spids: [50]
                )
              ]
              spids: [50]
            )
            (command.Sentence
              child: 
                (command.Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (lhs_expr.LhsName name:count spids:[53])
                      op: Equal
                      rhs: 
                        {
                          (word_part.ArithSubPart
                            anode: 
                              (arith_expr.ArithBinary
                                op_id: Arith_Plus
                                left: (arith_expr.ArithWord w:{($ VSub_Number '$1')})
                                right: (arith_expr.ArithWord w:{($ VSub_Number '$2')})
                              )
                            spids: [54 63]
                          )
                        }
                      spids: [53]
                    )
                  ]
                  spids: [53]
                )
              terminator: <Op_Semi ';'>
            )
            (command.WhileUntil
              keyword: <KW_While while>
              cond: [(C {(test)} {($ VSub_Name '$count')} {(-gt)} {(0)})]
              body: 
                (command.DoGroup
                  children: [
                    (command.Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (lhs_expr.LhsName name:expect spids:[84])
                          op: Equal
                          rhs: {(DQ ($ VSub_Name '$expect') (' '))}
                          spids: [84]
                        )
                      ]
                      spids: [84]
                    )
                    (command.Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (lhs_expr.LhsName name:count spids:[91])
                          op: Equal
                          rhs: 
                            {
                              (word_part.ArithSubPart
                                anode: 
                                  (arith_expr.ArithBinary
                                    op_id: Arith_Minus
                                    left: (arith_expr.ArithWord w:{($ VSub_Name '$count')})
                                    right: (arith_expr.ArithWord w:{(Lit_Digits 1)})
                                  )
                                spids: [92 101]
                              )
                            }
                          spids: [91]
                        )
                      ]
                      spids: [91]
                    )
                  ]
                  spids: [81 104]
                )
            )
            (C {(shift)} {(2)})
            (command.Sentence
              child: 
                (command.Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (lhs_expr.LhsName name:count spids:[112])
                      op: Equal
                      rhs: {($ VSub_Number '$1')}
                      spids: [112]
                    )
                  ]
                  spids: [112]
                )
              terminator: <Op_Semi ';'>
            )
            (command.WhileUntil
              keyword: <KW_While while>
              cond: [(C {(test)} {($ VSub_Name '$count')} {(-gt)} {(0)})]
              body: 
                (command.DoGroup
                  children: [
                    (command.Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (lhs_expr.LhsName name:expect spids:[134])
                          op: Equal
                          rhs: {(DQ ($ VSub_Name '$expect') ($ VSub_Name '$HT'))}
                          spids: [134]
                        )
                      ]
                      spids: [134]
                    )
                    (command.Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (lhs_expr.LhsName name:count spids:[141])
                          op: Equal
                          rhs: 
                            {
                              (word_part.ArithSubPart
                                anode: 
                                  (arith_expr.ArithBinary
                                    op_id: Arith_Minus
                                    left: (arith_expr.ArithWord w:{($ VSub_Name '$count')})
                                    right: (arith_expr.ArithWord w:{(Lit_Digits 1)})
                                  )
                                spids: [142 151]
                              )
                            }
                          spids: [141]
                        )
                      ]
                      spids: [141]
                    )
                  ]
                  spids: [131 154]
                )
            )
            (C {(shift)})
            (command.Case
              to_match: {(DQ (' ') ($ VSub_Star '$*') (' '))}
              arms: [
                (case_arm
                  pat_list: [{(Lit_Other '*') (SQ <' --pretty=short '>) (Lit_Other '*')}]
                  action: [
                    (command.Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (lhs_expr.LhsName name:line spids:[184])
                          op: Equal
                          rhs: {($ VSub_Name '$title')}
                          spids: [184]
                        )
                      ]
                      spids: [184]
                    )
                  ]
                  spids: [176 181 187 16777215]
                )
                (case_arm
                  pat_list: [{(Lit_Other '*')}]
                  action: [
                    (command.Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (lhs_expr.LhsName name:line spids:[194])
                          op: Equal
                          rhs: {($ VSub_Name '$body')}
                          spids: [194]
                        )
                      ]
                      spids: [194]
                    )
                  ]
                  spids: [190 191 197 16777215]
                )
              ]
              spids: [165 173 200]
            )
            (command.Pipeline
              children: [
                (command.BraceGroup
                  children: [
                    (C {(echo)} {(DQ ('git show -s ') ($ VSub_Star '$*'))})
                    (C {(echo)} {(DQ ($ VSub_Name '$expect') ($ VSub_Name '$line'))})
                  ]
                  spids: [220]
                )
                (command.SimpleCommand
                  words: [{(sed)} {(-e)} {(SQ <'s/ /./g'>)}]
                  redirects: [(redir.Redir op:<Redir_Great '>'> fd:16777215 arg_word:{(expect)})]
                )
              ]
              negated: F
            )
            (command.Pipeline
              children: [
                (command.BraceGroup
                  children: [
                    (C {(echo)} {(DQ ('git show -s ') ($ VSub_Star '$*'))})
                    (command.Pipeline
                      children: [
                        (C {(git)} {(show)} {(-s)} {(DQ ($ VSub_At '$@'))})
                        (C {(sed)} {(-n)} {(-e)} 
                          {
                            (DQ (/) ($ VSub_Name '$line') 
                              (word_part.EscapedLiteralPart
                                token: <Lit_EscapedChar '\\$'>
                              ) (/p)
                            )
                          }
                        )
                      ]
                      negated: F
                    )
                  ]
                  spids: [256]
                )
                (command.SimpleCommand
                  words: [{(sed)} {(-e)} {(SQ <'s/ /./g'>)}]
                  redirects: [(redir.Redir op:<Redir_Great '>'> fd:16777215 arg_word:{(actual)})]
                )
              ]
              negated: F
            )
            (C {(test_cmp)} {(expect)} {(actual)})
          ]
          spids: [47]
        )
      spids: [42 46]
    )
    (command.FuncDef
      name: test_expand
      body: 
        (command.BraceGroup
          children: [
            (command.Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (lhs_expr.LhsName name:fmt spids:[328])
                  op: Equal
                  rhs: {($ VSub_Number '$1')}
                  spids: [328]
                )
              ]
              spids: [328]
            )
            (command.Case
              to_match: {(DQ ($ VSub_Name '$fmt'))}
              arms: [
                (case_arm
                  pat_list: [
                    {(Lit_Other '*') (Lit_Other '=') (raw)}
                    {(Lit_Other '*') (Lit_Other '=') (short)}
                    {(Lit_Other '*') (Lit_Other '=') (email)}
                  ]
                  action: [
                    (command.Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (lhs_expr.LhsName name:default spids:[359])
                          op: Equal
                          rhs: {(DQ ('0 1'))}
                          spids: [359]
                        )
                      ]
                      spids: [359]
                    )
                  ]
                  spids: [341 356 364 16777215]
                )
                (case_arm
                  pat_list: [{(Lit_Other '*')}]
                  action: [
                    (command.Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (lhs_expr.LhsName name:default spids:[371])
                          op: Equal
                          rhs: {(DQ ('8 0'))}
                          spids: [371]
                        )
                      ]
                      spids: [371]
                    )
                  ]
                  spids: [367 368 376 16777215]
                )
              ]
              spids: [332 338 379]
            )
            (command.Case
              to_match: {(DQ ($ VSub_Name '$fmt'))}
              arms: [
                (case_arm
                  pat_list: [{(Lit_Other '*') (Lit_Other '=') (email)}]
                  action: [
                    (command.Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (lhs_expr.LhsName name:in spids:[397])
                          op: Equal
                          rhs: {(0)}
                          spids: [397]
                        )
                      ]
                      spids: [397]
                    )
                  ]
                  spids: [391 394 400 16777215]
                )
                (case_arm
                  pat_list: [{(Lit_Other '*')}]
                  action: [
                    (command.Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (lhs_expr.LhsName name:in spids:[407])
                          op: Equal
                          rhs: {(4)}
                          spids: [407]
                        )
                      ]
                      spids: [407]
                    )
                  ]
                  spids: [403 404 410 16777215]
                )
              ]
              spids: [382 388 413]
            )
            (C {(test_expect_success)} 
              {
                (DQ (expand/no-expand) 
                  (word_part.BracedVarSub
                    token: <VSub_Name fmt>
                    suffix_op: 
                      (suffix_op.StringUnary
                        op_id: VTest_ColonPlus
                        arg_word: {(' for ') ($ VSub_Name '$fmt')}
                      )
                    spids: [420 425]
                  )
                )
              } 
              {
                (SQ <'\n'> <'\t\tcount_expand $in $default $fmt &&\n'> 
                  <'\t\tcount_expand $in 8 0 $fmt --expand-tabs &&\n'> <'\t\tcount_expand $in 8 0 --expand-tabs $fmt &&\n'> 
                  <'\t\tcount_expand $in 8 0 $fmt --expand-tabs=8 &&\n'> <'\t\tcount_expand $in 8 0 --expand-tabs=8 $fmt &&\n'> 
                  <'\t\tcount_expand $in 0 1 $fmt --no-expand-tabs &&\n'> <'\t\tcount_expand $in 0 1 --no-expand-tabs $fmt &&\n'> 
                  <'\t\tcount_expand $in 0 1 $fmt --expand-tabs=0 &&\n'> <'\t\tcount_expand $in 0 1 --expand-tabs=0 $fmt &&\n'> 
                  <'\t\tcount_expand $in 4 0 $fmt --expand-tabs=4 &&\n'> <'\t\tcount_expand $in 4 0 --expand-tabs=4 $fmt\n'> <'\t'>
                )
              }
            )
          ]
          spids: [325]
        )
      spids: [320 324]
    )
    (C {(test_expect_success)} {(SQ <setup>)} 
      {
        (SQ <'\n'> <'\ttest_tick &&\n'> <'\tsed -e "s/Q/$HT/g" <<-EOF >msg &&\n'> <'\tQ$title\n'> <'\n'> 
          <'\tQ$body\n'> <'\tEOF\n'> <'\tgit commit --allow-empty -F msg\n'>
        )
      }
    )
    (C {(test_expand)} {(DQ )})
    (C {(test_expand)} {(--pretty)})
    (C {(test_expand)} {(--pretty) (Lit_Other '=') (short)})
    (C {(test_expand)} {(--pretty) (Lit_Other '=') (medium)})
    (C {(test_expand)} {(--pretty) (Lit_Other '=') (full)})
    (C {(test_expand)} {(--pretty) (Lit_Other '=') (fuller)})
    (C {(test_expand)} {(--pretty) (Lit_Other '=') (raw)})
    (C {(test_expand)} {(--pretty) (Lit_Other '=') (email)})
    (C {(test_done)})
  ]
)