(command.CommandList children: [ (command.AndOr children: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} { (BracedVarSub left: <Id.Left_DollarBrace '${'> token: <Id.VSub_Name TESTS_TEST_SH> var_name: TESTS_TEST_SH suffix_op: (suffix_op.Unary op:<Id.VTest_Plus _> arg_word:{<true>}) right: <Id.Right_DollarBrace '}'> ) } {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) (command.ControlFlow keyword:<Id.ControlFlow_Return return>) ] ops: [<Id.Op_DAmp _>] ) (command.Simple blame_tok: <declare> more_env: [] words: [{<declare>} {<-g>} {<Id.Lit_VarLike 'TESTS_TEST_SH='> <true>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <declare> more_env: [] words: [ {<declare>} {<-g>} {<-A>} {<Id.Lit_VarLike 'ASSERT_RESULTS='> (word_part.AssocArrayLiteral left: <Id.Op_LParen _> pairs: [ (AssocPair key:{<total>} value:{<0>}) (AssocPair key:{<passed>} value:{<0>}) (AssocPair key:{<failed>} value:{<0>}) ] right: <Id.Right_ShArrayLiteral _> ) } ] redirects: [] do_fork: T ) (command.ShFunction keyword: <Id.KW_Function function> name_tok: <assert> name: 'assert::equals' body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <declare> more_env: [] words: [{<declare>} {<Id.Lit_VarLike 'expect='> ($ Id.VSub_Number 1)}] redirects: [] do_fork: T ) (command.Simple blame_tok: <declare> more_env: [] words: [{<declare>} {<Id.Lit_VarLike 'actual='> ($ Id.VSub_Number 2)}] redirects: [] do_fork: T ) (command.Simple blame_tok: <declare> more_env: [] words: [ {<declare>} {<Id.Lit_VarLike 'message='> (BracedVarSub left: <Id.Left_DollarBrace '${'> token: <Id.VSub_At '@'> var_name: '@' suffix_op: (suffix_op.Slice begin:{<Id.Lit_Digits 3>}) right: <Id.Arith_RBrace _> ) } ] redirects: [] do_fork: T ) (command.DParen left: <Id.Op_DLeftParen _> child: (arith_expr.BinaryAssign op_id: Id.Arith_PlusEqual left: (arith_expr.Binary op_id: Id.Arith_LBracket left: ($ Id.Lit_ArithVarLike ASSERT_RESULTS) right: ($ Id.Lit_ArithVarLike total) ) right: {<Id.Lit_Digits 1>} ) right: <Id.Op_DRightParen _> redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName expect))} {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {(DQ ($ Id.VSub_DollarName actual))} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <echo> more_env: [] words: [ {<echo>} { (DQ <'FAILED ('> ($ Id.VSub_DollarName message) <')\n'> <'\tExpected: '> ($ Id.VSub_DollarName expect) <'\n'> <' Actual: '> ($ Id.VSub_DollarName actual) ) } ] redirects: [] do_fork: T ) (command.DParen left: <Id.Op_DLeftParen _> child: (arith_expr.BinaryAssign op_id: Id.Arith_PlusEqual left: (arith_expr.Binary op_id: Id.Arith_LBracket left: ($ Id.Lit_ArithVarLike ASSERT_RESULTS) right: ($ Id.Lit_ArithVarLike failed) ) right: {<Id.Lit_Digits 1>} ) right: <Id.Op_DRightParen _> redirects: [] ) (command.ControlFlow keyword: <Id.ControlFlow_Return return> arg_word: {<1>} ) ] spids: [101 119] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ <'PASSED '> ($ Id.VSub_DollarName message))}] redirects: [] do_fork: T ) (command.DParen left: <Id.Op_DLeftParen _> child: (arith_expr.BinaryAssign op_id: Id.Arith_PlusEqual left: (arith_expr.Binary op_id: Id.Arith_LBracket left: ($ Id.Lit_ArithVarLike ASSERT_RESULTS) right: ($ Id.Lit_ArithVarLike passed) ) right: {<Id.Lit_Digits 1>} ) right: <Id.Op_DRightParen _> redirects: [] ) (command.ControlFlow keyword:<Id.ControlFlow_Return return> arg_word:{<0>}) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction keyword: <Id.KW_Function function> name_tok: <assert> name: 'assert::report' body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <echo> more_env: [] words: [ {<echo>} { (DQ <'TESTS [total='> (BracedVarSub left: <Id.Left_DollarBrace '${'> token: <Id.VSub_Name ASSERT_RESULTS> var_name: ASSERT_RESULTS bracket_op: (bracket_op.ArrayIndex expr:($ Id.Lit_ArithVarLike total)) right: <Id.Right_DollarBrace '}'> ) <'] [passed='> (BracedVarSub left: <Id.Left_DollarBrace '${'> token: <Id.VSub_Name ASSERT_RESULTS> var_name: ASSERT_RESULTS bracket_op: (bracket_op.ArrayIndex expr:($ Id.Lit_ArithVarLike passed)) right: <Id.Right_DollarBrace '}'> ) <'] [failed='> (BracedVarSub left: <Id.Left_DollarBrace '${'> token: <Id.VSub_Name ASSERT_RESULTS> var_name: ASSERT_RESULTS bracket_op: (bracket_op.ArrayIndex expr:($ Id.Lit_ArithVarLike failed)) right: <Id.Right_DollarBrace '}'> ) <']'> ) } ] redirects: [] do_fork: T ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) ] )