(command.CommandList children: [ (C {(cd)} { (braced_var_sub token: (Token id:Id.VSub_Number val:0 span_id:7) suffix_op: (suffix_op.Unary op_id:Id.VOp1_Percent arg_word:{(Id.Lit_Slash /) ('*')}) ) } ) (command.Simple words: [{(.)} {(../JSON.sh)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Less val:'<' span_id:21) fd: -1 arg_word: {(/dev/null)} ) ] ) (command.ShAssignment pairs: [(assign_pair lhs:(sh_lhs_expr.Name name:i) op:assign_op.Equal rhs:{(0)} spids:[25])] ) (command.ShAssignment pairs: [(assign_pair lhs:(sh_lhs_expr.Name name:fails) op:assign_op.Equal rhs:{(0)} spids:[28])] ) (command.ShFunction name: ttest body: (command.BraceGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:i) op: assign_op.Equal rhs: { (word_part.ArithSub anode: (arith_expr.Binary op_id: Id.Arith_Plus left: (arith_expr.VarRef token: (Token id:Id.Lit_ArithVarLike val:i span_id:41) ) right: (arith_expr.ArithWord w:{(Id.Lit_Digits 1)}) ) ) } spids: [39] ) ] ) (command.Sentence child: (C {(local)} {(Id.Lit_VarLike 'input=') (DQ ($ Id.VSub_Number '$1'))}) terminator: (Token id:Id.Op_Semi val:';' span_id:54) ) (C {(shift)}) (C {(local)} {(Id.Lit_VarLike 'expected=') (DQ (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:63) command_list: (command.CommandList children: [ (C {(printf)} {(SQ (Token id:Id.Lit_Chars val:'%s\\n' span_id:67))} {(DQ ($ Id.VSub_At '$@'))} ) ] ) ) ) } ) (command.Simple words: [{(echo)} {(DQ ($ Id.VSub_DollarName '$expected'))}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:83) fd: -1 arg_word: {(/tmp/json_ttest_expected)} ) ] ) (command.If arms: [ (if_arm cond: [ (command.Pipeline children: [ (C {(echo)} {(DQ ($ Id.VSub_DollarName '$input'))}) (C {(tokenize)}) (C {(diff)} {(-u)} {(-)} {(/tmp/json_ttest_expected)}) ] negated: F ) ] action: [ (C {(echo)} { (DQ ('ok ') ($ Id.VSub_DollarName '$i') (' - ') ($ Id.VSub_DollarName '$input')) } ) ] spids: [88 111] ) ] else_action: [ (C {(echo)} { (DQ ('not ok ') ($ Id.VSub_DollarName '$i') (' - ') ($ Id.VSub_DollarName '$input')) } ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:fails) op: assign_op.Equal rhs: { (word_part.ArithSub anode: (arith_expr.Binary op_id: Id.Arith_Plus left: (arith_expr.VarRef token: (Token id:Id.Lit_ArithVarLike val:fails span_id:141) ) right: (arith_expr.ArithWord w:{(Id.Lit_Digits 1)}) ) ) } spids: [139] ) ] ) ] ) ] ) ) (C {(ttest)} {(SQ (Token id:Id.Lit_Chars val:'"dah"' span_id:156))} {(SQ (Token id:Id.Lit_Chars val:'"dah"' span_id:160))} ) (C {(ttest)} {(SQ (Token id:Id.Lit_Chars val:'""' span_id:166))} {(SQ (Token id:Id.Lit_Chars val:'""' span_id:170))} ) (C {(ttest)} {(SQ (Token id:Id.Lit_Chars val:'["dah"]' span_id:176))} {(SQ (Token id:Id.Lit_Chars val:'[' span_id:180))} {(SQ (Token id:Id.Lit_Chars val:'"dah"' span_id:184))} {(SQ (Token id:Id.Lit_Chars val:']' span_id:188))} ) (C {(ttest)} {(SQ (Token id:Id.Lit_Chars val:'" "' span_id:194))} {(SQ (Token id:Id.Lit_Chars val:'" "' span_id:198))} ) (C {(ttest)} {(SQ (Token id:Id.Lit_Chars val:'" \\" "' span_id:204))} {(SQ (Token id:Id.Lit_Chars val:'" \\" "' span_id:208))} ) (C {(ttest)} {(SQ (Token id:Id.Lit_Chars val:'["dah"]' span_id:215))} {(SQ (Token id:Id.Lit_Chars val:'[' span_id:219))} {(SQ (Token id:Id.Lit_Chars val:'"dah"' span_id:223))} {(SQ (Token id:Id.Lit_Chars val:']' span_id:227))} ) (C {(ttest)} {(SQ (Token id:Id.Lit_Chars val:123 span_id:234))} {(SQ (Token id:Id.Lit_Chars val:123 span_id:238))} ) (C {(ttest)} {(SQ (Token id:Id.Lit_Chars val:123.142 span_id:244))} {(SQ (Token id:Id.Lit_Chars val:123.142 span_id:248))} ) (C {(ttest)} {(SQ (Token id:Id.Lit_Chars val:-123 span_id:254))} {(SQ (Token id:Id.Lit_Chars val:-123 span_id:258))} ) (C {(ttest)} {(SQ (Token id:Id.Lit_Chars val:1e23 span_id:265))} {(SQ (Token id:Id.Lit_Chars val:1e23 span_id:269))} ) (C {(ttest)} {(SQ (Token id:Id.Lit_Chars val:0.1 span_id:275))} {(SQ (Token id:Id.Lit_Chars val:0.1 span_id:279))} ) (C {(ttest)} {(SQ (Token id:Id.Lit_Chars val:-110 span_id:285))} {(SQ (Token id:Id.Lit_Chars val:-110 span_id:289))} ) (C {(ttest)} {(SQ (Token id:Id.Lit_Chars val:-110.10 span_id:295))} {(SQ (Token id:Id.Lit_Chars val:-110.10 span_id:299))} ) (C {(ttest)} {(SQ (Token id:Id.Lit_Chars val:-110e10 span_id:305))} {(SQ (Token id:Id.Lit_Chars val:-110e10 span_id:309))} ) (C {(ttest)} {(SQ (Token id:Id.Lit_Chars val:null span_id:315))} {(SQ (Token id:Id.Lit_Chars val:null span_id:319))} ) (C {(ttest)} {(SQ (Token id:Id.Lit_Chars val:true span_id:325))} {(SQ (Token id:Id.Lit_Chars val:true span_id:329))} ) (C {(ttest)} {(SQ (Token id:Id.Lit_Chars val:false span_id:335))} {(SQ (Token id:Id.Lit_Chars val:false span_id:339))} ) (C {(ttest)} {(SQ (Token id:Id.Lit_Chars val:'[ null , -110e10, "null" ]' span_id:345))} {(SQ (Token id:Id.Lit_Chars val:'[' span_id:351))} {(SQ (Token id:Id.Lit_Chars val:null span_id:355))} {(SQ (Token id:Id.Lit_Chars val:',' span_id:359))} {(SQ (Token id:Id.Lit_Chars val:-110e10 span_id:363))} {(SQ (Token id:Id.Lit_Chars val:',' span_id:367))} {(SQ (Token id:Id.Lit_Chars val:'"null"' span_id:371))} {(SQ (Token id:Id.Lit_Chars val:']' span_id:375))} ) (C {(ttest)} {(SQ (Token id:Id.Lit_Chars val:'{"e": false}' span_id:381))} {(SQ (Token id:Id.Lit_Chars val:'{' span_id:385))} {(SQ (Token id:Id.Lit_Chars val:'"e"' span_id:389))} {(SQ (Token id:Id.Lit_Chars val:':' span_id:393))} {(SQ (Token id:Id.Lit_Chars val:false span_id:397))} {(SQ (Token id:Id.Lit_Chars val:'}' span_id:401))} ) (C {(ttest)} {(SQ (Token id:Id.Lit_Chars val:'{"e": "string"}' span_id:407))} {(SQ (Token id:Id.Lit_Chars val:'{' span_id:411))} {(SQ (Token id:Id.Lit_Chars val:'"e"' span_id:415))} {(SQ (Token id:Id.Lit_Chars val:':' span_id:419))} {(SQ (Token id:Id.Lit_Chars val:'"string"' span_id:423))} {(SQ (Token id:Id.Lit_Chars val:'}' span_id:427))} ) (command.If arms: [ (if_arm cond: [ (command.Pipeline children: [ (C {(cat)} {(../package.json)}) (command.Simple words: [{(tokenize)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:443) fd: -1 arg_word: {(/dev/null)} ) ] ) ] negated: T ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:fails) op: assign_op.Equal rhs: { (word_part.ArithSub anode: (arith_expr.Binary op_id: Id.Arith_Plus left: (arith_expr.VarRef token: (Token id:Id.Lit_ArithVarLike val:fails span_id:451) ) right: (arith_expr.ArithWord w:{(Id.Lit_Digits 1)}) ) ) } spids: [449] ) ] ) (C {(echo)} {(DQ ('Tokenizing package.json failed!'))}) ] spids: [431 446] ) ] ) (C {(echo)} {(DQ ($ Id.VSub_DollarName '$fails') (' test(s) failed'))}) (command.ControlFlow token: (Token id:Id.ControlFlow_Exit val:exit span_id:474) arg_word: {($ Id.VSub_DollarName '$fails')} ) ] )