(CommandList
  children: [
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:test_description)
          op: Equal
          rhs: {(SQ <"log/show --expand-tabs">)}
          spids: [4]
        )
      ]
      spids: [4]
    )
    (C {(.)} {(./test-lib.sh)})
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:HT) op:Equal rhs:{(DQ ("\t"))} spids:[15])]
      spids: [15]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:title)
          op: Equal
          rhs: {(SQ <"tab indent at the beginning of the title line">)}
          spids: [20]
        )
      ]
      spids: [20]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:body)
          op: Equal
          rhs: {(SQ <"tab indent on a line in the body">)}
          spids: [25]
        )
      ]
      spids: [25]
    )
    (FuncDef
      name: count_expand
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_None
              pairs: [(assign_pair lhs:(LhsName name:expect) op:Equal rhs:{(SQ )} spids:[42])]
              spids: [42]
            )
            (Sentence
              child: 
                (Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (LhsName name:count)
                      op: Equal
                      rhs: 
                        {
                          (ArithSubPart
                            anode: 
                              (ArithBinary
                                op_id: Arith_Plus
                                left: (ArithWord w:{($ VSub_Number "$1")})
                                right: (ArithWord w:{($ VSub_Number "$2")})
                              )
                            spids: [46 55]
                          )
                        }
                      spids: [45]
                    )
                  ]
                  spids: [45]
                )
              terminator: <Op_Semi ";">
            )
            (While
              cond: [(C {(test)} {($ VSub_Name "$count")} {(-gt)} {(0)})]
              body: 
                (DoGroup
                  children: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:expect)
                          op: Equal
                          rhs: {(DQ ($ VSub_Name "$expect") (" "))}
                          spids: [76]
                        )
                      ]
                      spids: [76]
                    )
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:count)
                          op: Equal
                          rhs: 
                            {
                              (ArithSubPart
                                anode: 
                                  (ArithBinary
                                    op_id: Arith_Minus
                                    left: (ArithWord w:{($ VSub_Name "$count")})
                                    right: (ArithWord w:{(Lit_Digits 1)})
                                  )
                                spids: [84 93]
                              )
                            }
                          spids: [83]
                        )
                      ]
                      spids: [83]
                    )
                  ]
                  spids: [73 96]
                )
            )
            (C {(shift)} {(2)})
            (Sentence
              child: 
                (Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (LhsName name:count)
                      op: Equal
                      rhs: {($ VSub_Number "$1")}
                      spids: [104]
                    )
                  ]
                  spids: [104]
                )
              terminator: <Op_Semi ";">
            )
            (While
              cond: [(C {(test)} {($ VSub_Name "$count")} {(-gt)} {(0)})]
              body: 
                (DoGroup
                  children: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:expect)
                          op: Equal
                          rhs: {(DQ ($ VSub_Name "$expect") ($ VSub_Name "$HT"))}
                          spids: [126]
                        )
                      ]
                      spids: [126]
                    )
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:count)
                          op: Equal
                          rhs: 
                            {
                              (ArithSubPart
                                anode: 
                                  (ArithBinary
                                    op_id: Arith_Minus
                                    left: (ArithWord w:{($ VSub_Name "$count")})
                                    right: (ArithWord w:{(Lit_Digits 1)})
                                  )
                                spids: [134 143]
                              )
                            }
                          spids: [133]
                        )
                      ]
                      spids: [133]
                    )
                  ]
                  spids: [123 146]
                )
            )
            (C {(shift)})
            (Case
              to_match: {(DQ (" ") ($ VSub_Star "$*") (" "))}
              arms: [
                (case_arm
                  pat_list: [{(Lit_Other "*") (SQ <" --pretty=short ">) (Lit_Other "*")}]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:line)
                          op: Equal
                          rhs: {($ VSub_Name "$title")}
                          spids: [176]
                        )
                      ]
                      spids: [176]
                    )
                  ]
                  spids: [168 173 179 -1]
                )
                (case_arm
                  pat_list: [{(Lit_Other "*")}]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:line)
                          op: Equal
                          rhs: {($ VSub_Name "$body")}
                          spids: [186]
                        )
                      ]
                      spids: [186]
                    )
                  ]
                  spids: [182 183 189 -1]
                )
              ]
              spids: [157 165 192]
            )
            (Pipeline
              children: [
                (BraceGroup
                  children: [
                    (C {(echo)} {(DQ ("git show -s ") ($ VSub_Star "$*"))})
                    (C {(echo)} {(DQ ($ VSub_Name "$expect") ($ VSub_Name "$line"))})
                  ]
                  spids: [212]
                )
                (SimpleCommand
                  words: [{(sed)} {(-e)} {(SQ <"s/ /./g">)}]
                  redirects: [(Redir op_id:Redir_Great fd:-1 arg_word:{(expect)} spids:[243])]
                )
              ]
              negated: False
            )
            (Pipeline
              children: [
                (BraceGroup
                  children: [
                    (C {(echo)} {(DQ ("git show -s ") ($ VSub_Star "$*"))})
                    (Pipeline
                      children: [
                        (C {(git)} {(show)} {(-s)} {(DQ ($ VSub_At "$@"))})
                        (C {(sed)} {(-n)} {(-e)} 
                          {
                            (DQ (/) ($ VSub_Name "$line") 
                              (EscapedLiteralPart
                                token: <Lit_EscapedChar "\\$">
                              ) (/p)
                            )
                          }
                        )
                      ]
                      negated: False
                    )
                  ]
                  spids: [248]
                )
                (SimpleCommand
                  words: [{(sed)} {(-e)} {(SQ <"s/ /./g">)}]
                  redirects: [(Redir op_id:Redir_Great fd:-1 arg_word:{(actual)} spids:[298])]
                )
              ]
              negated: False
            )
            (C {(test_cmp)} {(expect)} {(actual)})
          ]
          spids: [39]
        )
      spids: [34 38]
    )
    (FuncDef
      name: test_expand
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:fmt)
                  op: Equal
                  rhs: {($ VSub_Number "$1")}
                  spids: [320]
                )
              ]
              spids: [320]
            )
            (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: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:default)
                          op: Equal
                          rhs: {(DQ ("0 1"))}
                          spids: [351]
                        )
                      ]
                      spids: [351]
                    )
                  ]
                  spids: [333 348 356 -1]
                )
                (case_arm
                  pat_list: [{(Lit_Other "*")}]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:default)
                          op: Equal
                          rhs: {(DQ ("8 0"))}
                          spids: [363]
                        )
                      ]
                      spids: [363]
                    )
                  ]
                  spids: [359 360 368 -1]
                )
              ]
              spids: [324 330 371]
            )
            (Case
              to_match: {(DQ ($ VSub_Name "$fmt"))}
              arms: [
                (case_arm
                  pat_list: [{(Lit_Other "*") (Lit_Other "=") (email)}]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [(assign_pair lhs:(LhsName name:in) op:Equal rhs:{(0)} spids:[389])]
                      spids: [389]
                    )
                  ]
                  spids: [383 386 392 -1]
                )
                (case_arm
                  pat_list: [{(Lit_Other "*")}]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [(assign_pair lhs:(LhsName name:in) op:Equal rhs:{(4)} spids:[399])]
                      spids: [399]
                    )
                  ]
                  spids: [395 396 402 -1]
                )
              ]
              spids: [374 380 405]
            )
            (C {(test_expect_success)} 
              {
                (DQ (expand/no-expand) 
                  (BracedVarSub
                    token: <VSub_Name fmt>
                    suffix_op: 
                      (StringUnary
                        op_id: VTest_ColonPlus
                        arg_word: {(" for ") ($ VSub_Name "$fmt")}
                      )
                    spids: [412 417]
                  )
                )
              } 
              {
                (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: [317]
        )
      spids: [312 316]
    )
    (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)})
  ]
)