(command.CommandList children: [ (C {<Id.KW_Set set>} {<-e>}) (C {<Id.KW_Set set>} {<-E>}) (C {<Id.KW_Set set>} {<-T>}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:BATS_COUNT_ONLY) op: assign_op.Equal rhs: {(DQ )} spids: [16] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_Number '$1'))} {<Id.Lit_Equals '='>} {(DQ <-c>)} {<Id.Lit_RBracket ']'>} ) terminator: <Id.Op_Semi _> ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:BATS_COUNT_ONLY) op: assign_op.Equal rhs: {<1>} spids: [40] ) ] ) (C {<shift>}) ] spids: [20 37] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:BATS_EXTENDED_SYNTAX) op: assign_op.Equal rhs: {(DQ )} spids: [49] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_Number '$1'))} {<Id.Lit_Equals '='>} {(DQ <-x>)} {<Id.Lit_RBracket ']'>} ) terminator: <Id.Op_Semi _> ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:BATS_EXTENDED_SYNTAX) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_Number '$1'))} spids: [73] ) ] ) (C {<shift>}) ] spids: [53 70] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:BATS_TEST_FILENAME) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_Number '$1'))} spids: [84] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {<Id.Lit_LBracket '['>} {<-z>} {(DQ ($ Id.VSub_DollarName '$BATS_TEST_FILENAME'))} {<Id.Lit_RBracket ']'>} ) terminator: <Id.Op_Semi _> ) ] action: [ (command.Simple words: [{<echo>} {(DQ <'usage: bats-exec <filename>'>)}] redirects: [(redir.Redir op:<Id.Redir_GreatAnd '>&'> fd:-1 arg_word:{<2>})] ) (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<1>}) ] spids: [89 102] ) (if_arm cond: [ (command.Sentence child: (C {<Id.Lit_LBracket '['>} {<Id.KW_Bang '!'>} {<-f>} {(DQ ($ Id.VSub_DollarName '$BATS_TEST_FILENAME'))} {<Id.Lit_RBracket ']'>} ) terminator: <Id.Op_Semi _> ) ] action: [ (command.Simple words: [ {<echo>} {(DQ <'bats: '> ($ Id.VSub_DollarName '$BATS_TEST_FILENAME') <' does not exist'>)} ] redirects: [(redir.Redir op:<Id.Redir_GreatAnd '>&'> fd:-1 arg_word:{<2>})] ) (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<1>}) ] spids: [119 134] ) ] else_action: [(C {<shift>})] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:BATS_TEST_DIRNAME) op: assign_op.Equal rhs: { (DQ (command_sub left_token: <Id.Left_DollarParen '$('> command_list: (command.CommandList children: [(C {<dirname>} {(DQ ($ Id.VSub_DollarName '$BATS_TEST_FILENAME'))})] ) ) ) } spids: [161] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:BATS_TEST_NAMES) op: assign_op.Equal rhs: {(sh_array_literal left:<Id.Op_LParen _>)} spids: [172] ) ] ) (command.ShFunction name: load body: (command.BraceGroup children: [ (C {<local>} {<Id.Lit_VarLike 'name='> (DQ ($ Id.VSub_Number '$1'))}) (C {<local>} {<filename>}) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {<Id.Lit_LBracket '['>} { (DQ (braced_var_sub token: <Id.VSub_Name name> suffix_op: (suffix_op.Slice begin: (arith_expr.ArithWord w:{<Id.Lit_Digits 0>}) length: (arith_expr.ArithWord w:{<Id.Lit_Digits 1>}) ) ) ) } {<Id.Lit_Equals '='>} {(DQ </>)} {<Id.Lit_RBracket ']'>} ) terminator: <Id.Op_Semi _> ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:filename) op: assign_op.Equal rhs: {(DQ (${ Id.VSub_Name name))} spids: [224] ) ] ) ] spids: [198 221] ) ] else_action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:filename) op: assign_op.Equal rhs: { (DQ ($ Id.VSub_DollarName '$BATS_TEST_DIRNAME') </> (${ Id.VSub_Name name) <.bash> ) } spids: [235] ) ] ) ] ) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {<Id.Lit_LBracket '['>} {<-f>} {(DQ ($ Id.VSub_DollarName '$filename'))} {<Id.Lit_RBracket ']'>} ) (command.BraceGroup children: [ (command.Simple words: [ {<echo>} {(DQ <'bats: '> ($ Id.VSub_DollarName '$filename') <' does not exist'>)} ] redirects: [(redir.Redir op:<Id.Redir_GreatAnd '>&'> fd:-1 arg_word:{<2>})] ) (command.ControlFlow token: <Id.ControlFlow_Exit exit> arg_word: {<1>} ) ] ) ] ) (C {<source>} {(DQ (${ Id.VSub_Name filename))}) ] ) ) (command.ShFunction name: run body: (command.BraceGroup children: [ (C {<local>} {<e>} {<E>} {<T>} {<oldIFS>}) (command.AndOr ops: [Id.Op_DPipe] children: [ (command.DBracket expr: (bool_expr.LogicalNot child: (bool_expr.Binary op_id: Id.BoolBinary_EqualTilde left: {(DQ ($ Id.VSub_Hyphen '$-'))} right: {<e>} ) ) ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:e) op: assign_op.Equal rhs: {<1>} spids: [331] ) ] ) ] ) (command.AndOr ops: [Id.Op_DPipe] children: [ (command.DBracket expr: (bool_expr.LogicalNot child: (bool_expr.Binary op_id: Id.BoolBinary_EqualTilde left: {(DQ ($ Id.VSub_Hyphen '$-'))} right: {<E>} ) ) ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:E) op: assign_op.Equal rhs: {<1>} spids: [351] ) ] ) ] ) (command.AndOr ops: [Id.Op_DPipe] children: [ (command.DBracket expr: (bool_expr.LogicalNot child: (bool_expr.Binary op_id: Id.BoolBinary_EqualTilde left: {(DQ ($ Id.VSub_Hyphen '$-'))} right: {<T>} ) ) ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:T) op: assign_op.Equal rhs: {<1>} spids: [371] ) ] ) ] ) (C {<Id.KW_Set set>} {<Id.Lit_Other '+'> <e>}) (C {<Id.KW_Set set>} {<Id.Lit_Other '+'> <E>}) (C {<Id.KW_Set set>} {<Id.Lit_Other '+'> <T>}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:output) op: assign_op.Equal rhs: { (DQ (command_sub left_token: <Id.Left_DollarParen '$('> command_list: (command.CommandList children: [ (command.Simple words: [{(DQ ($ Id.VSub_At '$@'))}] redirects: [ (redir.Redir op: <Id.Redir_GreatAnd '2>&'> fd: 2 arg_word: {<1>} ) ] ) ] ) ) ) } spids: [393] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:status) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_QMark '$?'))} spids: [406] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:oldIFS) op: assign_op.Equal rhs: {($ Id.VSub_DollarName '$IFS')} spids: [412] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:IFS) op: assign_op.Equal rhs: { (single_quoted left: <Id.Left_SingleQuoteC "$'"> tokens: [<Id.Char_OneChar '\\n'>] ) } spids: [416] ) (assign_pair lhs: (sh_lhs_expr.Name name:lines) op: assign_op.Equal rhs: { (sh_array_literal left: <Id.Op_LParen _> words: [{($ Id.VSub_DollarName '$output')}] ) } spids: [421] ) ] ) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {<Id.Lit_LBracket '['>} {<-z>} {(DQ ($ Id.VSub_DollarName '$e'))} {<Id.Lit_RBracket ']'>} ) (C {<Id.KW_Set set>} {<-e>}) ] ) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {<Id.Lit_LBracket '['>} {<-z>} {(DQ ($ Id.VSub_DollarName '$E'))} {<Id.Lit_RBracket ']'>} ) (C {<Id.KW_Set set>} {<-E>}) ] ) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {<Id.Lit_LBracket '['>} {<-z>} {(DQ ($ Id.VSub_DollarName '$T'))} {<Id.Lit_RBracket ']'>} ) (C {<Id.KW_Set set>} {<-T>}) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:IFS) op: assign_op.Equal rhs: {($ Id.VSub_DollarName '$oldIFS')} spids: [478] ) ] ) ] ) ) (command.ShFunction name:setup body:(command.BraceGroup children:[(C {<true>})])) (command.ShFunction name:teardown body:(command.BraceGroup children:[(C {<true>})])) (command.ShFunction name: skip body: (command.BraceGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:BATS_TEST_SKIPPED) op: assign_op.Equal rhs: { (braced_var_sub token: <Id.VSub_Number 1> suffix_op: (suffix_op.Unary op_id:Id.VTest_ColonHyphen arg_word:{<1>}) ) } spids: [515] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:BATS_TEST_COMPLETED) op: assign_op.Equal rhs: {<1>} spids: [523] ) ] ) (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<0>}) ] ) ) (command.ShFunction name: bats_test_begin body: (command.BraceGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:BATS_TEST_DESCRIPTION) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_Number '$1'))} spids: [541] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {<Id.Lit_LBracket '['>} {<-n>} {(DQ ($ Id.VSub_DollarName '$BATS_EXTENDED_SYNTAX'))} {<Id.Lit_RBracket ']'>} ) terminator: <Id.Op_Semi _> ) ] action: [ (command.Simple words: [ {<echo>} { (DQ <'begin '> ($ Id.VSub_DollarName '$BATS_TEST_NUMBER') <' '> ($ Id.VSub_DollarName '$BATS_TEST_DESCRIPTION') ) } ] redirects: [(redir.Redir op:<Id.Redir_GreatAnd '>&'> fd:-1 arg_word:{<3>})] ) ] spids: [547 560] ) ] ) (C {<setup>}) ] ) ) (command.ShFunction name: bats_test_function body: (command.BraceGroup children: [ (C {<local>} {<Id.Lit_VarLike 'test_name='> (DQ ($ Id.VSub_Number '$1'))}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.IndexedName name: BATS_TEST_NAMES index: (arith_expr.ArithWord w: { (DQ (braced_var_sub token: <Id.VSub_Name BATS_TEST_NAMES> prefix_op: (Id.VSub_Pound) bracket_op: (bracket_op.WholeArray op_id:Id.Lit_At) ) ) } ) ) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_DollarName '$test_name'))} spids: [599] ) ] ) ] ) ) (command.ShFunction name: bats_capture_stack_trace body: (command.BraceGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:BATS_PREVIOUS_STACK_TRACE) op: assign_op.Equal rhs: { (sh_array_literal left: <Id.Op_LParen _> words: [ { (DQ (braced_var_sub token: <Id.VSub_Name BATS_CURRENT_STACK_TRACE> bracket_op: (bracket_op.WholeArray op_id:Id.Lit_At) ) ) } ] ) } spids: [634] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:BATS_CURRENT_STACK_TRACE) op: assign_op.Equal rhs: {(sh_array_literal left:<Id.Op_LParen _>)} spids: [649] ) ] ) (C {<local>} {<Id.Lit_VarLike 'test_pattern='> (DQ <' '> ($ Id.VSub_DollarName '$BATS_TEST_NAME') <' '> ($ Id.VSub_DollarName '$BATS_TEST_SOURCE') ) } ) (C {<local>} {<Id.Lit_VarLike 'setup_pattern='> (DQ <' setup '> ($ Id.VSub_DollarName '$BATS_TEST_SOURCE')) } ) (C {<local>} {<Id.Lit_VarLike 'teardown_pattern='> (DQ <' teardown '> ($ Id.VSub_DollarName '$BATS_TEST_SOURCE')) } ) (C {<local>} {<frame>}) (C {<local>} {<Id.Lit_VarLike 'index='> <1>}) (command.WhileUntil keyword: <Id.KW_While while> cond: [ (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:frame) op: assign_op.Equal rhs: { (DQ (command_sub left_token: <Id.Left_DollarParen '$('> command_list: (command.CommandList children: [(C {<caller>} {(DQ ($ Id.VSub_DollarName '$index'))})] ) ) ) } spids: [699] ) ] ) terminator: <Id.Op_Semi _> ) ] body: (command.DoGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.IndexedName name: BATS_CURRENT_STACK_TRACE index: (arith_expr.ArithWord w: { (DQ (braced_var_sub token: <Id.VSub_Name BATS_CURRENT_STACK_TRACE> prefix_op: (Id.VSub_Pound) bracket_op: (bracket_op.WholeArray op_id:Id.Lit_At) ) ) } ) ) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_DollarName '$frame'))} spids: [714] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.LogicalOr left: (bool_expr.Binary op_id: Id.BoolBinary_GlobEqual left: {(DQ ($ Id.VSub_DollarName '$frame'))} right: {<Id.Lit_Other '*'> (DQ ($ Id.VSub_DollarName '$test_pattern')) } ) right: (bool_expr.LogicalOr left: (bool_expr.Binary op_id: Id.BoolBinary_GlobEqual left: {(DQ ($ Id.VSub_DollarName '$frame'))} right: {<Id.Lit_Other '*'> (DQ ($ Id.VSub_DollarName '$setup_pattern')) } ) right: (bool_expr.Binary op_id: Id.BoolBinary_GlobEqual left: {(DQ ($ Id.VSub_DollarName '$frame'))} right: {<Id.Lit_Other '*'> (DQ ($ Id.VSub_DollarName '$teardown_pattern')) } ) ) ) ) terminator: <Id.Op_Semi _> ) ] action: [(command.ControlFlow token:<Id.ControlFlow_Break break>)] spids: [740 788] ) ] else_action: [(C {<let>} {<Id.Lit_VarLike 'index+='> <1>})] ) ] ) ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:BATS_SOURCE) op: assign_op.Equal rhs: { (DQ (command_sub left_token: <Id.Left_DollarParen '$('> command_list: (command.CommandList children: [ (C {<bats_frame_filename>} { (DQ (braced_var_sub token: <Id.VSub_Name BATS_CURRENT_STACK_TRACE> bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w:{<Id.Lit_Digits 0>}) ) ) ) } ) ] ) ) ) } spids: [810] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:BATS_LINENO) op: assign_op.Equal rhs: { (DQ (command_sub left_token: <Id.Left_DollarParen '$('> command_list: (command.CommandList children: [ (C {<bats_frame_lineno>} { (DQ (braced_var_sub token: <Id.VSub_Name BATS_CURRENT_STACK_TRACE> bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w:{<Id.Lit_Digits 0>}) ) ) ) } ) ] ) ) ) } spids: [827] ) ] ) ] ) ) (command.ShFunction name: bats_print_stack_trace body: (command.BraceGroup children: [ (C {<local>} {<frame>}) (C {<local>} {<Id.Lit_VarLike 'index='> <1>}) (C {<local>} {<Id.Lit_VarLike 'count='> (DQ (braced_var_sub token:<Id.VSub_At '@'> prefix_op:(Id.VSub_Pound))) } ) (command.ForEach iter_name: frame iter_words: [{(DQ ($ Id.VSub_At '$@'))}] do_arg_iter: F body: (command.DoGroup children: [ (C {<local>} {<Id.Lit_VarLike 'filename='> (DQ (command_sub left_token: <Id.Left_DollarParen '$('> command_list: (command.CommandList children: [ (C {<bats_trim_filename>} { (DQ (command_sub left_token: <Id.Left_DollarParen '$('> command_list: (command.CommandList children: [ (C {<bats_frame_filename>} {(DQ ($ Id.VSub_DollarName '$frame'))} ) ] ) ) ) } ) ] ) ) ) } ) (C {<local>} {<Id.Lit_VarLike 'lineno='> (DQ (command_sub left_token: <Id.Left_DollarParen '$('> command_list: (command.CommandList children: [ (C {<bats_frame_lineno>} {(DQ ($ Id.VSub_DollarName '$frame'))}) ] ) ) ) } ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {<Id.Lit_LBracket '['>} {($ Id.VSub_DollarName '$index')} {<-eq>} {<1>} {<Id.Lit_RBracket ']'>} ) terminator: <Id.Op_Semi _> ) ] action: [(C {<echo>} {<-n>} {(DQ <'# ('>)})] spids: [925 938] ) ] else_action: [(C {<echo>} {<-n>} {(DQ <'# '>)})] ) (C {<local>} {<Id.Lit_VarLike 'fn='> (DQ (command_sub left_token: <Id.Left_DollarParen '$('> command_list: (command.CommandList children: [ (C {<bats_frame_function>} {(DQ ($ Id.VSub_DollarName '$frame'))}) ] ) ) ) } ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName '$fn'))} {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {(DQ ($ Id.VSub_DollarName '$BATS_TEST_NAME'))} {<Id.Lit_RBracket ']'>} ) terminator: <Id.Op_Semi _> ) ] action: [ (C {<echo>} {<-n>} { (DQ <'from function '> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\`'> ) ($ Id.VSub_DollarName '$fn') <"' "> ) } ) ] spids: [980 998] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {<Id.Lit_LBracket '['>} {($ Id.VSub_DollarName '$index')} {<-eq>} {($ Id.VSub_DollarName '$count')} {<Id.Lit_RBracket ']'>} ) terminator: <Id.Op_Semi _> ) ] action: [ (C {<echo>} { (DQ <'in test file '> ($ Id.VSub_DollarName '$filename') <', line '> ($ Id.VSub_DollarName '$lineno') <')'> ) } ) ] spids: [1017 1030] ) ] else_action: [ (C {<echo>} { (DQ <'in file '> ($ Id.VSub_DollarName '$filename') <', line '> ($ Id.VSub_DollarName '$lineno') <','> ) } ) ] ) (C {<let>} {<Id.Lit_VarLike 'index+='> <1>}) ] ) ) ] ) ) (command.ShFunction name: bats_print_failed_command body: (command.BraceGroup children: [ (C {<local>} {<Id.Lit_VarLike 'frame='> (DQ ($ Id.VSub_Number '$1'))}) (C {<local>} {<Id.Lit_VarLike 'status='> (DQ ($ Id.VSub_Number '$2'))}) (C {<local>} {<Id.Lit_VarLike 'filename='> (DQ (command_sub left_token: <Id.Left_DollarParen '$('> command_list: (command.CommandList children: [(C {<bats_frame_filename>} {(DQ ($ Id.VSub_DollarName '$frame'))})] ) ) ) } ) (C {<local>} {<Id.Lit_VarLike 'lineno='> (DQ (command_sub left_token: <Id.Left_DollarParen '$('> command_list: (command.CommandList children: [(C {<bats_frame_lineno>} {(DQ ($ Id.VSub_DollarName '$frame'))})] ) ) ) } ) (C {<local>} {<Id.Lit_VarLike 'failed_line='> (DQ (command_sub left_token: <Id.Left_DollarParen '$('> command_list: (command.CommandList children: [ (C {<bats_extract_line>} {(DQ ($ Id.VSub_DollarName '$filename'))} {(DQ ($ Id.VSub_DollarName '$lineno'))} ) ] ) ) ) } ) (C {<local>} {<Id.Lit_VarLike 'failed_command='> (DQ (command_sub left_token: <Id.Left_DollarParen '$('> command_list: (command.CommandList children: [ (C {<bats_strip_string>} {(DQ ($ Id.VSub_DollarName '$failed_line'))}) ] ) ) ) } ) (C {<echo>} {<-n>} { (DQ <'# '> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\`'>) (${ Id.VSub_Name failed_command) <"' "> ) } ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {<Id.Lit_LBracket '['>} {($ Id.VSub_DollarName '$status')} {<-eq>} {<1>} {<Id.Lit_RBracket ']'>} ) terminator: <Id.Op_Semi _> ) ] action: [(C {<echo>} {(DQ <failed>)})] spids: [1172 1185] ) ] else_action: [(C {<echo>} {(DQ <'failed with status '> ($ Id.VSub_DollarName '$status'))})] ) ] ) ) (command.ShFunction name: bats_frame_lineno body: (command.BraceGroup children: [ (C {<local>} {<Id.Lit_VarLike 'frame='> (DQ ($ Id.VSub_Number '$1'))}) (C {<local>} {<Id.Lit_VarLike 'lineno='> (DQ (braced_var_sub token: <Id.VSub_Name frame> suffix_op: (suffix_op.Unary op_id:Id.VOp1_DPercent arg_word:{<' *'>}) ) ) } ) (C {<echo>} {(DQ ($ Id.VSub_DollarName '$lineno'))}) ] ) ) (command.ShFunction name: bats_frame_function body: (command.BraceGroup children: [ (C {<local>} {<Id.Lit_VarLike 'frame='> (DQ ($ Id.VSub_Number '$1'))}) (C {<local>} {<Id.Lit_VarLike 'rest='> (DQ (braced_var_sub token: <Id.VSub_Name frame> suffix_op: (suffix_op.Unary op_id:Id.VOp1_Pound arg_word:{<'* '>}) ) ) } ) (C {<local>} {<Id.Lit_VarLike 'fn='> (DQ (braced_var_sub token: <Id.VSub_Name rest> suffix_op: (suffix_op.Unary op_id:Id.VOp1_DPercent arg_word:{<' *'>}) ) ) } ) (C {<echo>} {(DQ ($ Id.VSub_DollarName '$fn'))}) ] ) ) (command.ShFunction name: bats_frame_filename body: (command.BraceGroup children: [ (C {<local>} {<Id.Lit_VarLike 'frame='> (DQ ($ Id.VSub_Number '$1'))}) (C {<local>} {<Id.Lit_VarLike 'rest='> (DQ (braced_var_sub token: <Id.VSub_Name frame> suffix_op: (suffix_op.Unary op_id:Id.VOp1_Pound arg_word:{<'* '>}) ) ) } ) (C {<local>} {<Id.Lit_VarLike 'filename='> (DQ (braced_var_sub token: <Id.VSub_Name rest> suffix_op: (suffix_op.Unary op_id:Id.VOp1_Pound arg_word:{<'* '>}) ) ) } ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName '$filename'))} {<Id.Lit_Equals '='>} {(DQ ($ Id.VSub_DollarName '$BATS_TEST_SOURCE'))} {<Id.Lit_RBracket ']'>} ) terminator: <Id.Op_Semi _> ) ] action: [(C {<echo>} {(DQ ($ Id.VSub_DollarName '$BATS_TEST_FILENAME'))})] spids: [1335 1352] ) ] else_action: [(C {<echo>} {(DQ ($ Id.VSub_DollarName '$filename'))})] ) ] ) ) (command.ShFunction name: bats_extract_line body: (command.BraceGroup children: [ (C {<local>} {<Id.Lit_VarLike 'filename='> (DQ ($ Id.VSub_Number '$1'))}) (C {<local>} {<Id.Lit_VarLike 'lineno='> (DQ ($ Id.VSub_Number '$2'))}) (C {<sed>} {<-n>} {(DQ (${ Id.VSub_Name lineno) <p>)} {(DQ ($ Id.VSub_DollarName '$filename'))} ) ] ) ) (command.ShFunction name: bats_strip_string body: (command.BraceGroup children: [ (C {<local>} {<Id.Lit_VarLike 'string='> (DQ ($ Id.VSub_Number '$1'))}) (command.Pipeline children: [ (C {<printf>} {(DQ <'%s'>)} {(DQ ($ Id.VSub_DollarName '$string'))}) (C {<sed>} {<-e>} {(DQ <'s/^[ '>) (single_quoted left: <Id.Left_SingleQuoteC "$'"> tokens: [<Id.Char_OneChar '\\t'>] ) (DQ <']*//'>) } {<-e>} {(DQ <'s/[ '>) (single_quoted left: <Id.Left_SingleQuoteC "$'"> tokens: [<Id.Char_OneChar '\\t'>] ) (DQ <']*'> <Id.Lit_Other '$'> <//>) } ) ] negated: F ) ] ) ) (command.ShFunction name: bats_trim_filename body: (command.BraceGroup children: [ (C {<local>} {<Id.Lit_VarLike 'filename='> (DQ ($ Id.VSub_Number '$1'))}) (C {<local>} {<Id.Lit_VarLike 'length='> (DQ (braced_var_sub token:<Id.VSub_Name BATS_CWD> prefix_op:(Id.VSub_Pound))) } ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {<Id.Lit_LBracket '['>} { (DQ (braced_var_sub token: <Id.VSub_Name filename> suffix_op: (suffix_op.Slice begin: (arith_expr.ArithWord w:{<Id.Lit_Digits 0>}) length: (arith_expr.Binary op_id: Id.Arith_Plus left: (arith_expr.VarRef token:<Id.Lit_ArithVarLike length>) right: (arith_expr.ArithWord w:{<Id.Lit_Digits 1>}) ) ) ) ) } {<Id.Lit_Equals '='>} {(DQ (${ Id.VSub_Name BATS_CWD) </>)} {<Id.Lit_RBracket ']'>} ) terminator: <Id.Op_Semi _> ) ] action: [ (C {<echo>} { (DQ (braced_var_sub token: <Id.VSub_Name filename> suffix_op: (suffix_op.Slice begin: (arith_expr.Binary op_id: Id.Arith_Plus left: (arith_expr.VarRef token:<Id.Lit_ArithVarLike length>) right: (arith_expr.ArithWord w:{<Id.Lit_Digits 1>}) ) ) ) ) } ) ] spids: [1503 1531] ) ] else_action: [(C {<echo>} {(DQ ($ Id.VSub_DollarName '$filename'))})] ) ] ) ) (command.ShFunction name: bats_debug_trap body: (command.BraceGroup children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName '$BASH_SOURCE'))} {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {(DQ ($ Id.VSub_Number '$1'))} {<Id.Lit_RBracket ']'>} ) terminator: <Id.Op_Semi _> ) ] action: [(C {<bats_capture_stack_trace>})] spids: [1569 1587] ) ] ) ] ) ) (command.ShFunction name: bats_error_trap body: (command.BraceGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:BATS_ERROR_STATUS) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_QMark '$?'))} spids: [1605] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:BATS_ERROR_STACK_TRACE) op: assign_op.Equal rhs: { (sh_array_literal left: <Id.Op_LParen _> words: [ { (DQ (braced_var_sub token: <Id.VSub_Name BATS_PREVIOUS_STACK_TRACE> bracket_op: (bracket_op.WholeArray op_id:Id.Lit_At) ) ) } ] ) } spids: [1611] ) ] ) (C {<trap>} {<->} {<debug>}) ] ) ) (command.ShFunction name: bats_teardown_trap body: (command.BraceGroup children: [ (C {<trap>} {(DQ <bats_exit_trap>)} {<Id.ControlFlow_Exit exit>}) (C {<local>} {<Id.Lit_VarLike 'status='> <0>}) (command.AndOr ops: [Id.Op_DPipe] children: [ (command.Simple words: [{<teardown>}] redirects: [ (redir.Redir op: <Id.Redir_DGreat '>>'> fd: -1 arg_word: {(DQ ($ Id.VSub_DollarName '$BATS_OUT'))} ) (redir.Redir op:<Id.Redir_GreatAnd '2>&'> fd:2 arg_word:{<1>}) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:status) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_QMark '$?'))} spids: [1669] ) ] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {<Id.Lit_LBracket '['>} {($ Id.VSub_DollarName '$status')} {<-eq>} {<0>} {<Id.Lit_RBracket ']'>} ) terminator: <Id.Op_Semi _> ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:BATS_TEARDOWN_COMPLETED) op: assign_op.Equal rhs: {<1>} spids: [1692] ) ] ) ] spids: [1676 1689] ) (if_arm cond: [ (command.Sentence child: (C {<Id.Lit_LBracket '['>} {<-n>} {(DQ ($ Id.VSub_DollarName '$BATS_TEST_COMPLETED'))} {<Id.Lit_RBracket ']'>} ) terminator: <Id.Op_Semi _> ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:BATS_ERROR_STATUS) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_DollarName '$status'))} spids: [1712] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:BATS_ERROR_STACK_TRACE) op: assign_op.Equal rhs: { (sh_array_literal left: <Id.Op_LParen _> words: [ { (DQ (braced_var_sub token: <Id.VSub_Name BATS_CURRENT_STACK_TRACE> bracket_op: (bracket_op.WholeArray op_id:Id.Lit_At) ) ) } ] ) } spids: [1718] ) ] ) ] spids: [1696 1709] ) ] ) (C {<bats_exit_trap>}) ] ) ) (command.ShFunction name: bats_exit_trap body: (command.BraceGroup children: [ (C {<local>} {<status>}) (C {<local>} {<skipped>}) (C {<trap>} {<->} {<err>} {<Id.ControlFlow_Exit exit>}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:skipped) op: assign_op.Equal rhs: {(DQ )} spids: [1769] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {<Id.Lit_LBracket '['>} {<-n>} {(DQ ($ Id.VSub_DollarName '$BATS_TEST_SKIPPED'))} {<Id.Lit_RBracket ']'>} ) terminator: <Id.Op_Semi _> ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:skipped) op: assign_op.Equal rhs: {(DQ <' # skip'>)} spids: [1790] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {<Id.Lit_LBracket '['>} {(DQ <1>)} {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {(DQ ($ Id.VSub_DollarName '$BATS_TEST_SKIPPED'))} {<Id.Lit_RBracket ']'>} ) terminator: <Id.Op_Semi _> ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:skipped) op: assign_op.PlusEqual rhs: {(DQ <' ('> ($ Id.VSub_DollarName '$BATS_TEST_SKIPPED') <')'>)} spids: [1817] ) ] ) ] spids: [1796 1814] ) ] ) ] spids: [1774 1787] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.AndOr ops: [Id.Op_DPipe] children: [ (C {<Id.Lit_LBracket '['>} {<-z>} {(DQ ($ Id.VSub_DollarName '$BATS_TEST_COMPLETED'))} {<Id.Lit_RBracket ']'>} ) (C {<Id.Lit_LBracket '['>} {<-z>} {(DQ ($ Id.VSub_DollarName '$BATS_TEARDOWN_COMPLETED'))} {<Id.Lit_RBracket ']'>} ) ] ) terminator: <Id.Op_Semi _> ) ] action: [ (command.Simple words: [ {<echo>} { (DQ <'not ok '> ($ Id.VSub_DollarName '$BATS_TEST_NUMBER') <' '> ($ Id.VSub_DollarName '$BATS_TEST_DESCRIPTION') ) } ] redirects: [(redir.Redir op:<Id.Redir_GreatAnd '>&'> fd:-1 arg_word:{<3>})] ) (command.Simple words: [ {<bats_print_stack_trace>} { (DQ (braced_var_sub token: <Id.VSub_Name BATS_ERROR_STACK_TRACE> bracket_op: (bracket_op.WholeArray op_id:Id.Lit_At) ) ) } ] redirects: [(redir.Redir op:<Id.Redir_GreatAnd '>&'> fd:-1 arg_word:{<3>})] ) (command.Simple words: [ {<bats_print_failed_command>} { (DQ (braced_var_sub token: <Id.VSub_Name BATS_ERROR_STACK_TRACE> bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.Binary op_id: Id.Arith_Minus left: (arith_expr.ArithWord w: { (braced_var_sub token: <Id.VSub_Name BATS_ERROR_STACK_TRACE> prefix_op: (Id.VSub_Pound) bracket_op: (bracket_op.WholeArray op_id:Id.Lit_At) ) } ) right: (arith_expr.ArithWord w:{<Id.Lit_Digits 1>}) ) ) ) ) } {(DQ ($ Id.VSub_DollarName '$BATS_ERROR_STATUS'))} ] redirects: [(redir.Redir op:<Id.Redir_GreatAnd '>&'> fd:-1 arg_word:{<3>})] ) (command.Simple words: [{<sed>} {<-e>} {(DQ <'s/^/# /'>)}] redirects: [ (redir.Redir op: <Id.Redir_Less '<'> fd: -1 arg_word: {(DQ ($ Id.VSub_DollarName '$BATS_OUT'))} ) (redir.Redir op: <Id.Redir_GreatAnd '>&'> fd: -1 arg_word: {<3>} ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:status) op: assign_op.Equal rhs: {<1>} spids: [1933] ) ] ) ] spids: [1832 1857] ) ] else_action: [ (command.Simple words: [ {<echo>} { (DQ <'ok '> (${ Id.VSub_Name BATS_TEST_NUMBER) (${ Id.VSub_Name skipped) <' '> (${ Id.VSub_Name BATS_TEST_DESCRIPTION) ) } ] redirects: [(redir.Redir op:<Id.Redir_GreatAnd '>&'> fd:-1 arg_word:{<3>})] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:status) op: assign_op.Equal rhs: {<0>} spids: [1960] ) ] ) ] ) (C {<rm>} {<-f>} {(DQ ($ Id.VSub_DollarName '$BATS_OUT'))}) (command.ControlFlow token: <Id.ControlFlow_Exit exit> arg_word: {(DQ ($ Id.VSub_DollarName '$status'))} ) ] ) ) (command.ShFunction name: bats_perform_tests body: (command.BraceGroup children: [ (C {<echo>} {(DQ <1..> ($ Id.VSub_Pound '$#'))}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:test_number) op: assign_op.Equal rhs: {<1>} spids: [2001] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:status) op: assign_op.Equal rhs: {<0>} spids: [2005] ) ] ) (command.ForEach iter_name: test_name iter_words: [{(DQ ($ Id.VSub_At '$@'))}] do_arg_iter: F body: (command.DoGroup children: [ (command.AndOr ops: [Id.Op_DPipe] children: [ (C {(DQ ($ Id.VSub_Number '$0'))} {($ Id.VSub_DollarName '$BATS_EXTENDED_SYNTAX')} {(DQ ($ Id.VSub_DollarName '$BATS_TEST_FILENAME'))} {(DQ ($ Id.VSub_DollarName '$test_name'))} {(DQ ($ Id.VSub_DollarName '$test_number'))} ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:status) op: assign_op.Equal rhs: {<1>} spids: [2043] ) ] ) ] ) (C {<let>} {<Id.Lit_VarLike 'test_number+='> <1>}) ] ) ) (command.ControlFlow token: <Id.ControlFlow_Exit exit> arg_word: {(DQ ($ Id.VSub_DollarName '$status'))} ) ] ) ) (command.ShFunction name: bats_perform_test body: (command.BraceGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:BATS_TEST_NAME) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_Number '$1'))} spids: [2072] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {<Id.Lit_LBracket '['>} { (DQ (command_sub left_token: <Id.Left_DollarParen '$('> command_list: (command.CommandList children: [ (command.AndOr ops: [Id.Op_DPipe] children: [ (C {<type>} {<-t>} {(DQ ($ Id.VSub_DollarName '$BATS_TEST_NAME'))} ) (C {<true>}) ] ) ] ) ) ) } {<Id.Lit_Equals '='>} {(DQ <function>)} {<Id.Lit_RBracket ']'>} ) terminator: <Id.Op_Semi _> ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:BATS_TEST_NUMBER) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_Number '$2'))} spids: [2110] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {<Id.Lit_LBracket '['>} {<-z>} {(DQ ($ Id.VSub_DollarName '$BATS_TEST_NUMBER'))} {<Id.Lit_RBracket ']'>} ) terminator: <Id.Op_Semi _> ) ] action: [ (C {<echo>} {(DQ <1..1>)}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:BATS_TEST_NUMBER) op: assign_op.Equal rhs: {(DQ <1>)} spids: [2139] ) ] ) ] spids: [2116 2129] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:BATS_TEST_COMPLETED) op: assign_op.Equal rhs: {(DQ )} spids: [2149] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:BATS_TEARDOWN_COMPLETED) op: assign_op.Equal rhs: {(DQ )} spids: [2154] ) ] ) (C {<trap>} { (DQ <'bats_debug_trap '> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\"'> ) (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'>) <BASH_SOURCE> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\"'> ) ) } {<debug>} ) (C {<trap>} {(DQ <bats_error_trap>)} {<err>}) (C {<trap>} {(DQ <bats_teardown_trap>)} {<Id.ControlFlow_Exit exit>}) (command.Simple words: [{(DQ ($ Id.VSub_DollarName '$BATS_TEST_NAME'))}] redirects: [ (redir.Redir op: <Id.Redir_DGreat '>>'> fd: -1 arg_word: {(DQ ($ Id.VSub_DollarName '$BATS_OUT'))} ) (redir.Redir op: <Id.Redir_GreatAnd '2>&'> fd: 2 arg_word: {<1>} ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:BATS_TEST_COMPLETED) op: assign_op.Equal rhs: {<1>} spids: [2203] ) ] ) ] spids: [2078 2107] ) ] else_action: [ (command.Simple words: [ {<echo>} { (DQ <'bats: unknown test name '> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\`'> ) ($ Id.VSub_DollarName '$BATS_TEST_NAME') <"'"> ) } ] redirects: [(redir.Redir op:<Id.Redir_GreatAnd '>&'> fd:-1 arg_word:{<2>})] ) (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<1>}) ] ) ] ) ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {<Id.Lit_LBracket '['>} {<-z>} {(DQ ($ Id.VSub_DollarName '$TMPDIR'))} {<Id.Lit_RBracket ']'>} ) terminator: <Id.Op_Semi _> ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:BATS_TMPDIR) op: assign_op.Equal rhs: {(DQ </tmp>)} spids: [2250] ) ] ) ] spids: [2234 2247] ) ] else_action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:BATS_TMPDIR) op: assign_op.Equal rhs: { (DQ (braced_var_sub token: <Id.VSub_Name TMPDIR> suffix_op: (suffix_op.Unary op_id:Id.VOp1_Percent arg_word:{<Id.Lit_Slash />}) ) ) } spids: [2258] ) ] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:BATS_TMPNAME) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_DollarName '$BATS_TMPDIR') </bats.> ($ Id.VSub_Dollar '$$'))} spids: [2270] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:BATS_PARENT_TMPNAME) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_DollarName '$BATS_TMPDIR') </bats.> ($ Id.VSub_DollarName '$PPID'))} spids: [2277] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:BATS_OUT) op: assign_op.Equal rhs: {(DQ (${ Id.VSub_Name BATS_TMPNAME) <.out>)} spids: [2284] ) ] ) (command.ShFunction name: bats_preprocess_source body: (command.BraceGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:BATS_TEST_SOURCE) op: assign_op.Equal rhs: {(DQ (${ Id.VSub_Name BATS_TMPNAME) <.src>)} spids: [2300] ) ] ) (command.Pipeline children: [ (command.BraceGroup children: [ (command.Sentence child: (command.Simple words: [{<tr>} {<-d>} {(SQ <'\\r'>)}] redirects: [ (redir.Redir op: <Id.Redir_Less '<'> fd: -1 arg_word: {(DQ ($ Id.VSub_DollarName '$BATS_TEST_FILENAME'))} ) ] ) terminator: <Id.Op_Semi _> ) (command.Sentence child: (C {<echo>}) terminator: <Id.Op_Semi _> ) ] ) (command.Simple words: [{<bats-preprocess>}] redirects: [ (redir.Redir op: <Id.Redir_Great '>'> fd: -1 arg_word: {(DQ ($ Id.VSub_DollarName '$BATS_TEST_SOURCE'))} ) ] ) ] negated: F ) (C {<trap>} {(DQ <bats_cleanup_preprocessed_source>)} {<err>} {<Id.ControlFlow_Exit exit>}) (C {<trap>} {(DQ <'bats_cleanup_preprocessed_source; exit 1'>)} {<int>}) ] ) ) (command.ShFunction name: bats_cleanup_preprocessed_source body: (command.BraceGroup children: [(C {<rm>} {<-f>} {(DQ ($ Id.VSub_DollarName '$BATS_TEST_SOURCE'))})] ) ) (command.ShFunction name: bats_evaluate_preprocessed_source body: (command.BraceGroup children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {<Id.Lit_LBracket '['>} {<-z>} {(DQ ($ Id.VSub_DollarName '$BATS_TEST_SOURCE'))} {<Id.Lit_RBracket ']'>} ) terminator: <Id.Op_Semi _> ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:BATS_TEST_SOURCE) op: assign_op.Equal rhs: {(DQ (${ Id.VSub_Name BATS_PARENT_TMPNAME) <.src>)} spids: [2405] ) ] ) ] spids: [2389 2402] ) ] ) (C {<source>} {(DQ ($ Id.VSub_DollarName '$BATS_TEST_SOURCE'))}) ] ) ) (command.Simple words: [{<exec>}] redirects: [(redir.Redir op:<Id.Redir_LessAnd '3<&'> fd:3 arg_word:{<1>})] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_Pound '$#'))} {<-eq>} {<0>} {<Id.Lit_RBracket ']'>} ) terminator: <Id.Op_Semi _> ) ] action: [ (C {<bats_preprocess_source>}) (C {<bats_evaluate_preprocessed_source>}) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {<Id.Lit_LBracket '['>} {<-n>} {(DQ ($ Id.VSub_DollarName '$BATS_COUNT_ONLY'))} {<Id.Lit_RBracket ']'>} ) terminator: <Id.Op_Semi _> ) ] action: [ (C {<echo>} { (DQ (braced_var_sub token: <Id.VSub_Name BATS_TEST_NAMES> prefix_op: (Id.VSub_Pound) bracket_op: (bracket_op.WholeArray op_id:Id.Lit_At) ) ) } ) ] spids: [2457 2470] ) ] else_action: [ (C {<bats_perform_tests>} { (DQ (braced_var_sub token: <Id.VSub_Name BATS_TEST_NAMES> bracket_op: (bracket_op.WholeArray op_id:Id.Lit_At) ) ) } ) ] ) ] spids: [2432 2447] ) ] else_action: [ (C {<bats_evaluate_preprocessed_source>}) (C {<bats_perform_test>} {(DQ ($ Id.VSub_At '$@'))}) ] ) ] )