(CommandList
  children: [
    (C {(cd)} 
      {
        (BracedVarSub
          token: <VSub_Number 0>
          suffix_op: (StringUnary op_id:VOp1_Percent arg_word:{(Lit_Slash /) ('*')})
          spids: [6 11]
        )
      }
    )
    (SimpleCommand
      words: [{(.)} {(../JSON.sh)}]
      redirects: [(Redir op:<Redir_Less '<'> fd:16777215 arg_word:{(/dev/null)})]
    )
    (FuncDef
      name: ptest
      body: 
        (BraceGroup
          children: [
            (Pipeline
              children: [
                (C {(tokenize)})
                (SimpleCommand
                  words: [{(parse)}]
                  redirects: [(Redir op:<Redir_Great '>'> fd:16777215 arg_word:{(/dev/null)})]
                )
              ]
              negated: F
            )
          ]
          spids: [30]
        )
      spids: [25 29]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:fails) op:Equal rhs:{(0)} spids:[45])]
      spids: [45]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:i) op:Equal rhs:{(0)} spids:[48])]
      spids: [48]
    )
    (C {(echo)} {(DQ (1..4))})
    (ForEach
      iter_name: input
      iter_words: [{(SQ <'"oooo"  '>)} {(SQ <'[true, 1, [0, {}]]  '>)} {(SQ <'{"true": 1}'>)}]
      do_arg_iter: F
      body: 
        (DoGroup
          children: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:i)
                  op: Equal
                  rhs: 
                    {
                      (ArithSubPart
                        anode: 
                          (ArithBinary
                            op_id: Arith_Plus
                            left: (ArithVarRef name:i)
                            right: (ArithWord w:{(Lit_Digits 1)})
                          )
                        spids: [79 84]
                      )
                    }
                  spids: [78]
                )
              ]
              spids: [78]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Pipeline
                      children: [(C {(echo)} {(DQ ($ VSub_Name '$input'))}) (C {(ptest)})]
                      negated: F
                    )
                  ]
                  action: [(C {(echo)} {(DQ ('ok ') ($ VSub_Name '$i') (' - ') ($ VSub_Name '$input'))})]
                  spids: [16777215 101]
                )
              ]
              else_action: [
                (C {(echo)} {(DQ ('not ok ') ($ VSub_Name '$i') (' - ') ($ VSub_Name '$input'))})
                (Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (LhsName name:fails)
                      op: Equal
                      rhs: 
                        {
                          (ArithSubPart
                            anode: 
                              (ArithBinary
                                op_id: Arith_Plus
                                left: (ArithVarRef name:fails)
                                right: (ArithWord w:{(Lit_Digits 1)})
                              )
                            spids: [128 133]
                          )
                        }
                      spids: [127]
                    )
                  ]
                  spids: [127]
                )
              ]
              spids: [114 136]
            )
          ]
          spids: [75 138]
        )
      spids: [62 16777215]
    )
    (If
      arms: [
        (if_arm
          cond: [
            (Pipeline
              children: [
                (SimpleCommand
                  words: [{(ptest)}]
                  redirects: [(Redir op:<Redir_Less '<'> fd:16777215 arg_word:{(../package.json)})]
                )
              ]
              negated: T
            )
          ]
          action: [
            (C {(echo)} {(DQ ('not ok 4 - Parsing package.json failed!'))})
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:fails)
                  op: Equal
                  rhs: 
                    {
                      (ArithSubPart
                        anode: 
                          (ArithBinary
                            op_id: Arith_Plus
                            left: (ArithVarRef name:fails)
                            right: (ArithWord w:{(Lit_Digits 1)})
                          )
                        spids: [162 167]
                      )
                    }
                  spids: [161]
                )
              ]
              spids: [161]
            )
          ]
          spids: [16777215 151]
        )
      ]
      else_action: [(C {(echo)} {(DQ ('ok ') ($ VSub_Name '$i') (' - package.json'))})]
      spids: [169 181]
    )
    (C {(echo)} {(DQ ($ VSub_Name '$fails') (' test(s) failed'))})
    (ControlFlow token:<ControlFlow_Exit exit> arg_word:{($ VSub_Name '$fails')})
  ]
)