(command.CommandList children: [ (command.ShAssignment pairs: [(assign_pair lhs:(sh_lhs_expr.Name name:RM) op:Equal rhs:{(DQ ('rm -f'))})] ) (command.ShAssignment pairs: [(assign_pair lhs:(sh_lhs_expr.Name name:MP_PY) op:Equal rhs:{(micropython)})] ) (command.ShAssignment pairs: [(assign_pair lhs:(sh_lhs_expr.Name name:numtests) op:Equal rhs:{(0)})] ) (command.ShAssignment pairs: [(assign_pair lhs:(sh_lhs_expr.Name name:numtestcases) op:Equal rhs:{(0)})] ) (command.ShAssignment pairs: [(assign_pair lhs:(sh_lhs_expr.Name name:numpassed) op:Equal rhs:{(0)})] ) (command.ShAssignment pairs: [(assign_pair lhs:(sh_lhs_expr.Name name:numskipped) op:Equal rhs:{(0)})] ) (command.ShAssignment pairs: [(assign_pair lhs:(sh_lhs_expr.Name name:numfailed) op:Equal rhs:{(0)})] ) (command.ShAssignment pairs: [(assign_pair lhs:(sh_lhs_expr.Name name:nameskipped) op:Equal rhs:(word.Empty))] ) (command.ShAssignment pairs: [(assign_pair lhs:(sh_lhs_expr.Name name:namefailed) op:Equal rhs:(word.Empty))] ) (command.If arms: [ (if_arm cond: [(C {(Lit_LBracket '[')} {($ VSub_Pound '$#')} {(-eq)} {(0)} {(Lit_RBracket ']')})] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:tests) op: Equal rhs: { (DQ ( 'basics/*.py micropython/*.py float/*.py import/*.py io/*.py misc/*.py unicode/*.py extmod/*.py unix/*.py' ) ) } ) ] ) ] ) ] else_action: [ (command.ShAssignment pairs: [(assign_pair lhs:(sh_lhs_expr.Name name:tests) op:Equal rhs:{(DQ ($ VSub_At '$@'))})] ) ] ) (command.ForEach iter_name: infile iter_words: [{($ VSub_DollarName '$tests')}] do_arg_iter: F body: (command.DoGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:basename) op: Equal rhs: { (command_sub left_token: <Left_Backtick '`'> command_list: (command.CommandList children: [(C {(basename)} {($ VSub_DollarName '$infile')} {(.py)})] ) ) } ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:outfile) op: Equal rhs: {(${ VSub_Name basename) (.py.out)} ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:expfile) op: Equal rhs: {($ VSub_DollarName '$infile') (.exp)} ) ] ) (command.Simple words: [{($ VSub_DollarName '$MP_PY')} {($ VSub_DollarName '$infile')}] redirects: [ (redir.Redir op: <Redir_Great '>'> fd: 16777215 arg_word: {($ VSub_DollarName '$outfile')} ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:numtestcases) op: Equal rhs: { (command_sub left_token: <Left_DollarParen '$('> command_list: (command.CommandList children: [ (C {(expr)} {($ VSub_DollarName '$numtestcases')} {(Lit_Other '+')} { (command_sub left_token: <Left_DollarParen '$('> command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {(cat)} {($ VSub_DollarName '$expfile')}) (C {(wc)} {(-l)}) ] negated: F ) ] ) ) } ) ] ) ) } ) ] ) (command.If arms: [ (if_arm cond: [ (C {(grep)} {(-q)} {(DQ (SKIP) (Lit_Other '\\') ('|SyntaxError: invalid micropython decorator'))} {($ VSub_DollarName '$outfile')} ) ] action: [ (C {(echo)} {(DQ ('skip ') ($ VSub_DollarName '$infile'))}) (C {($ VSub_DollarName '$RM')} {($ VSub_DollarName '$outfile')}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:numskipped) op: Equal rhs: { (command_sub left_token: <Left_DollarParen '$('> command_list: (command.CommandList children: [ (C {(expr)} {($ VSub_DollarName '$numskipped')} {(Lit_Other '+')} {(1)} ) ] ) ) } ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:nameskipped) op: Equal rhs: { (DQ ($ VSub_DollarName '$nameskipped') (' ') ($ VSub_DollarName '$basename') ) } ) ] ) ] ) ] else_action: [ (command.Simple words: [ {(diff)} {(--brief)} {($ VSub_DollarName '$expfile')} {($ VSub_DollarName '$outfile')} ] redirects: [(redir.Redir op:<Redir_Great '>'> fd:16777215 arg_word:{(/dev/null)})] ) (command.If arms: [ (if_arm cond: [ (C {(Lit_LBracket '[')} {($ VSub_QMark '$?')} {(-eq)} {(0)} {(Lit_RBracket ']')}) ] action: [ (C {(echo)} {(DQ ('pass ') ($ VSub_DollarName '$infile'))}) (C {($ VSub_DollarName '$RM')} {($ VSub_DollarName '$outfile')}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:numpassed) op: Equal rhs: { (command_sub left_token: <Left_DollarParen '$('> command_list: (command.CommandList children: [ (C {(expr)} {($ VSub_DollarName '$numpassed')} {(Lit_Other '+')} {(1)} ) ] ) ) } ) ] ) ] ) ] else_action: [ (C {(echo)} {(DQ ('FAIL ') ($ VSub_DollarName '$infile'))}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:numfailed) op: Equal rhs: { (command_sub left_token: <Left_DollarParen '$('> command_list: (command.CommandList children: [ (C {(expr)} {($ VSub_DollarName '$numfailed')} {(Lit_Other '+')} {(1)} ) ] ) ) } ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:namefailed) op: Equal rhs: { (DQ ($ VSub_DollarName '$namefailed') (' ') ($ VSub_DollarName '$basename') ) } ) ] ) ] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:numtests) op: Equal rhs: { (command_sub left_token: <Left_DollarParen '$('> command_list: (command.CommandList children: [ (C {(expr)} {($ VSub_DollarName '$numtests')} {(Lit_Other '+')} {(1)}) ] ) ) } ) ] ) ] ) ) (C {(echo)} { (DQ ($ VSub_DollarName '$numtests') (' tests performed (') ($ VSub_DollarName '$numtestcases') (' individual testcases)') ) } ) (C {(echo)} {(DQ ($ VSub_DollarName '$numpassed') (' tests passed'))}) (command.If arms: [ (if_arm cond: [ (C {(Lit_LBracket '[')} {($ VSub_DollarName '$numskipped')} {(KW_Bang '!') (Lit_Equals '=')} {(0)} {(Lit_RBracket ']')} ) ] action: [ (C {(echo)} { (DQ ($ VSub_DollarName '$numskipped') (' tests skipped -') ($ VSub_DollarName '$nameskipped') ) } ) ] ) ] ) (command.If arms: [ (if_arm cond: [ (C {(Lit_LBracket '[')} {($ VSub_DollarName '$numfailed')} {(KW_Bang '!') (Lit_Equals '=')} {(0)} {(Lit_RBracket ']')} ) ] action: [ (C {(echo)} { (DQ ($ VSub_DollarName '$numfailed') (' tests failed -') ($ VSub_DollarName '$namefailed') ) } ) (command.ControlFlow token:<ControlFlow_Exit exit> arg_word:{(1)}) ] ) ] else_action: [(command.ControlFlow token:<ControlFlow_Exit exit> arg_word:{(0)})] ) ] )