def testShellFuncExecution(self): ex = cmd_exec_test.InitExecutor() func_node = ast.FuncDef() c1 = ast.CompoundWord() t1 = ast.token(Id.Lit_Chars, 'f1') c1.parts.append(ast.LiteralPart(t1)) c2 = ast.CompoundWord() t2 = ast.token(Id.Lit_Chars, 'f2') c2.parts.append(ast.LiteralPart(t2)) a = ast.ArrayLiteralPart() a.words = [c1, c2] w = ast.CompoundWord() w.parts.append(a) # Set global COMPREPLY=(f1 f2) pair = ast.assign_pair(ast.LhsName('COMPREPLY'), assign_op_e.Equal, w) pair.spids.append(0) # dummy pairs = [pair] body_node = ast.Assignment(Id.Assign_None, [], pairs) func_node.name = 'myfunc' func_node.body = body_node a = completion.ShellFuncAction(ex, func_node) matches = list(a.Matches([], 0, 'f')) self.assertEqual(['f1 ', 'f2 '], matches)
def ParseAndExecute(code_str): line_reader, lexer = parse_lib.InitLexer(code_str) w_parser = WordParser(lexer, line_reader) c_parser = CommandParser(w_parser, lexer, line_reader) node = c_parser.ParseWholeFile() if not node: raise AssertionError() print(node) ex = cmd_exec_test.InitExecutor() status = ex.Execute(node) # TODO: Can we capture output here? return status
def testShellFuncExecution(self): arena, c_parser = cmd_parse_test.InitCommandParser("""\ f() { COMPREPLY=(f1 f2) } """) func_node = c_parser.ParseLogicalLine() print(func_node) ex = cmd_exec_test.InitExecutor(arena=arena) a = completion.ShellFuncAction(ex, func_node) comp = self._MakeComp(['f'], 0, 'f') matches = list(a.Matches(comp)) self.assertEqual(['f1', 'f2'], matches)