(CommandList
  children: [
    (C {(set)} {(-e)})
    (FuncDef
      name: encode_name
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:name)
                  op: Equal
                  rhs: {(DQ ($ VSub_Number "$1"))}
                  spids: [17]
                )
              ]
              spids: [15]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [(assign_pair lhs:(LhsName name:result) op:Equal rhs:{(DQ (test_))} spids:[25])]
              spids: [23]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (DBracket
                          expr: 
                            (LogicalNot
                              child: 
                                (BoolBinary
                                  op_id: BoolBinary_EqualTilde
                                  left: {(DQ ($ VSub_Name "$name"))}
                                  right: 
                                    {(Lit_Other "[") (Lit_Other "^") (Lit_Other "[") (Lit_Other ":") 
                                      (alnum) (Lit_Other ":") (Lit_Other "]") (EscapedLiteralPart token:<Lit_EscapedChar "\\ ">) (_-) (Lit_Other "]")
                                    }
                                )
                            )
                        )
                      terminator: <Op_Semi ";">
                    )
                  ]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:name)
                          op: Equal
                          rhs: 
                            {
                              (DQ 
                                (BracedVarSub
                                  token: <VSub_Name name>
                                  suffix_op: 
                                    (PatSub
                                      pat: {(_)}
                                      replace: {(-5f)}
                                      do_all: True
                                      do_prefix: False
                                      do_suffix: False
                                    )
                                  spids: [63 70]
                                )
                              )
                            }
                          spids: [61]
                        )
                      ]
                      spids: [61]
                    )
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:name)
                          op: Equal
                          rhs: 
                            {
                              (DQ 
                                (BracedVarSub
                                  token: <VSub_Name name>
                                  suffix_op: 
                                    (PatSub
                                      pat: {(-)}
                                      replace: {(-2d)}
                                      do_all: True
                                      do_prefix: False
                                      do_suffix: False
                                    )
                                  spids: [76 83]
                                )
                              )
                            }
                          spids: [74]
                        )
                      ]
                      spids: [74]
                    )
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:name)
                          op: Equal
                          rhs: 
                            {
                              (DQ 
                                (BracedVarSub
                                  token: <VSub_Name name>
                                  suffix_op: 
                                    (PatSub
                                      pat: {(" ")}
                                      replace: {(_)}
                                      do_all: True
                                      do_prefix: False
                                      do_suffix: False
                                    )
                                  spids: [89 96]
                                )
                              )
                            }
                          spids: [87]
                        )
                      ]
                      spids: [87]
                    )
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:result)
                          op: PlusEqual
                          rhs: {(DQ ($ VSub_Name "$name"))}
                          spids: [100]
                        )
                      ]
                      spids: [100]
                    )
                  ]
                  spids: [-1 58]
                )
              ]
              else_action: [
                (Assignment
                  keyword: Assign_Local
                  pairs: [
                    (assign_pair
                      lhs: (LhsName name:length)
                      op: Equal
                      rhs: 
                        {
                          (DQ 
                            (BracedVarSub
                              token: <VSub_Name name>
                              prefix_op: VSub_Pound
                              spids: [113 116]
                            )
                          )
                        }
                      spids: [111]
                    )
                  ]
                  spids: [109]
                )
                (Assignment
                  keyword: Assign_Local
                  pairs: [
                    (assign_pair lhs:(LhsName name:char) op:Equal spids:[122])
                    (assign_pair lhs:(LhsName name:i) op:Equal spids:[124])
                  ]
                  spids: [120]
                )
                (ForExpr
                  init: 
                    (BinaryAssign
                      op_id: Arith_Equal
                      left: (LhsName name:i)
                      right: (ArithWord w:{(Lit_Digits 0)})
                    )
                  cond: 
                    (ArithBinary
                      op_id: Arith_Less
                      left: (ArithVarRef name:i)
                      right: (ArithVarRef name:length)
                    )
                  update: (UnaryAssign op_id:Node_PostDPlus child:(LhsName name:i))
                  body: 
                    (DoGroup
                      children: [
                        (Assignment
                          keyword: Assign_None
                          pairs: [
                            (assign_pair
                              lhs: (LhsName name:char)
                              op: Equal
                              rhs: 
                                {
                                  (DQ 
                                    (BracedVarSub
                                      token: <VSub_Name name>
                                      suffix_op: 
                                        (Slice
                                          begin: (ArithWord w:{($ VSub_Name "$i")})
                                          length: (ArithWord w:{(Lit_Digits 1)})
                                        )
                                      spids: [152 158]
                                    )
                                  )
                                }
                              spids: [150]
                            )
                          ]
                          spids: [150]
                        )
                        (If
                          arms: [
                            (if_arm
                              cond: [
                                (Sentence
                                  child: 
                                    (C {(Lit_Other "[")} {(DQ ($ VSub_Name "$char"))} {(Lit_Other "=")} 
                                      {(DQ (" "))} {(Lit_Other "]")}
                                    )
                                  terminator: <Op_Semi ";">
                                )
                              ]
                              action: [
                                (Assignment
                                  keyword: Assign_None
                                  pairs: [
                                    (assign_pair
                                      lhs: (LhsName name:result)
                                      op: PlusEqual
                                      rhs: {(DQ (_))}
                                      spids: [182]
                                    )
                                  ]
                                  spids: [182]
                                )
                              ]
                              spids: [-1 179]
                            )
                            (if_arm
                              cond: [
                                (Sentence
                                  child: 
                                    (DBracket
                                      expr: 
                                        (BoolBinary
                                          op_id: BoolBinary_EqualTilde
                                          left: {(DQ ($ VSub_Name "$char"))}
                                          right: 
                                            {(Lit_Other "[") (Lit_Other "[") (Lit_Other ":") (alnum) 
                                              (Lit_Other ":") (Lit_Other "]") (Lit_Other "]")
                                            }
                                        )
                                    )
                                  terminator: <Op_Semi ";">
                                )
                              ]
                              action: [
                                (Assignment
                                  keyword: Assign_None
                                  pairs: [
                                    (assign_pair
                                      lhs: (LhsName name:result)
                                      op: PlusEqual
                                      rhs: {(DQ ($ VSub_Name "$char"))}
                                      spids: [212]
                                    )
                                  ]
                                  spids: [212]
                                )
                              ]
                              spids: [188 209]
                            )
                          ]
                          else_action: [
                            (Assignment
                              keyword: Assign_None
                              pairs: [
                                (assign_pair
                                  lhs: (LhsName name:result)
                                  op: PlusEqual
                                  rhs: 
                                    {
                                      (DQ 
                                        (CommandSubPart
                                          command_list: 
                                            (CommandList
                                              children: [
                                                (C {(printf)} {(--)} {(DQ ("-%02x"))} 
                                                  {
                                                    (EscapedLiteralPart
                                                      token: <Lit_EscapedChar "\\'">
                                                    ) (DQ ($ VSub_Name "$char"))
                                                  }
                                                )
                                              ]
                                            )
                                          left_token: <Left_CommandSub "$(">
                                          spids: [223 236]
                                        )
                                      )
                                    }
                                  spids: [221]
                                )
                              ]
                              spids: [221]
                            )
                          ]
                          spids: [218 240]
                        )
                      ]
                      spids: [147 243]
                    )
                )
              ]
              spids: [106 246]
            )
            (C {(echo)} {(DQ ($ VSub_Name "$result"))})
          ]
          spids: [12]
        )
      spids: [8 11]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:tests) op:Equal rhs:{(ArrayLiteralPart)} spids:[259])]
      spids: [259]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:index) op:Equal rhs:{(0)} spids:[263])]
      spids: [263]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:pattern)
          op: Equal
          rhs: {(SQ <"^ *@test  *([^ ].*)  *\\{ *(.*)$">)}
          spids: [266]
        )
      ]
      spids: [266]
    )
    (While
      cond: [
        (Sentence
          child: 
            (SimpleCommand
              words: [{(read)} {(-r)} {(line)}]
              more_env: [(env_pair name:IFS val:{(SQ )} spids:[274])]
            )
          terminator: <Op_Semi ";">
        )
      ]
      body: 
        (DoGroup
          children: [
            (C {(let)} {(Lit_VarLike "index+=") (1)})
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (DBracket
                          expr: 
                            (BoolBinary
                              op_id: BoolBinary_EqualTilde
                              left: {(DQ ($ VSub_Name "$line"))}
                              right: {($ VSub_Name "$pattern")}
                            )
                        )
                      terminator: <Op_Semi ";">
                    )
                  ]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:quoted_name)
                          op: Equal
                          rhs: 
                            {
                              (DQ 
                                (BracedVarSub
                                  token: <VSub_Name BASH_REMATCH>
                                  bracket_op: (ArrayIndex expr:(ArithWord w:{(Lit_Digits 1)}))
                                  spids: [312 317]
                                )
                              )
                            }
                          spids: [310]
                        )
                      ]
                      spids: [310]
                    )
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:body)
                          op: Equal
                          rhs: 
                            {
                              (DQ 
                                (BracedVarSub
                                  token: <VSub_Name BASH_REMATCH>
                                  bracket_op: (ArrayIndex expr:(ArithWord w:{(Lit_Digits 2)}))
                                  spids: [323 328]
                                )
                              )
                            }
                          spids: [321]
                        )
                      ]
                      spids: [321]
                    )
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:name)
                          op: Equal
                          rhs: 
                            {
                              (DQ 
                                (CommandSubPart
                                  command_list: 
                                    (CommandList
                                      children: [
                                        (C {(eval)} {(echo)} {(DQ ($ VSub_Name "$quoted_name"))})
                                      ]
                                    )
                                  left_token: <Left_CommandSub "$(">
                                  spids: [334 342]
                                )
                              )
                            }
                          spids: [332]
                        )
                      ]
                      spids: [332]
                    )
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:encoded_name)
                          op: Equal
                          rhs: 
                            {
                              (DQ 
                                (CommandSubPart
                                  command_list: 
                                    (CommandList
                                      children: [(C {(encode_name)} {(DQ ($ VSub_Name "$name"))})]
                                    )
                                  left_token: <Left_CommandSub "$(">
                                  spids: [348 354]
                                )
                              )
                            }
                          spids: [346]
                        )
                      ]
                      spids: [346]
                    )
                    (C 
                      {(tests) (Lit_Other "[") 
                        (DQ 
                          (BracedVarSub
                            token: <VSub_Name tests>
                            prefix_op: VSub_Pound
                            bracket_op: (WholeArray op_id:Lit_At)
                            spids: [361 367]
                          )
                        ) (Lit_Other "]") (Lit_Other "=") (DQ ($ VSub_Name "$encoded_name"))
                      }
                    )
                    (C {(echo)} 
                      {
                        (DQ (${ VSub_Name encoded_name) ("() { bats_test_begin ") 
                          (${ VSub_Name quoted_name) (" ") (${ VSub_Name index) ("; ") (${ VSub_Name body)
                        )
                      }
                    )
                  ]
                  spids: [-1 307]
                )
              ]
              else_action: [
                (C {(printf)} {(DQ ("%s") (EscapedLiteralPart token:<Lit_EscapedChar "\\n">))} 
                  {(DQ ($ VSub_Name "$line"))}
                )
              ]
              spids: [397 412]
            )
          ]
          spids: [283 414]
        )
    )
    (ForEach
      iter_name: test_name
      iter_words: [
        {
          (DQ 
            (BracedVarSub
              token: <VSub_Name tests>
              bracket_op: (WholeArray op_id:Lit_At)
              spids: [424 429]
            )
          )
        }
      ]
      do_arg_iter: False
      body: 
        (DoGroup
          children: [(C {(echo)} {(DQ ("bats_test_function ") (${ VSub_Name test_name))})]
          spids: [433 445]
        )
      spids: [422 431]
    )
  ]
)