def test_basic(self): # We assume there's at least one command self.assertTrue(len(self.cp.commands) > 0) self.assertTrue(len(self.cp.aliases) > 0) # In fact we assume there is a 'quit' command... self.assertEqual('quit', Mcmdproc.resolve_name(self.cp, 'quit')) # with alias 'q' self.assertEqual('quit', Mcmdproc.resolve_name(self.cp, 'q')) # processor.cmdproc.print_source_line(self.msg, 100, # 'source_line_test.py') self.cp.frame = sys._getframe() self.cp.setup() self.assertEqual(3, self.cp.eval('1+2')) return
def test_basic(self): # We assume there's at least one command self.assertTrue(len(self.cp.commands) > 0) self.assertTrue(len(self.cp.aliases) > 0) # In fact we assume there is a 'quit' command... self.assertEqual('quit', Mcmdproc.resolve_name(self.cp, 'quit')) # with alias 'q' self.assertEqual('quit', Mcmdproc.resolve_name(self.cp, 'q')) # processor.cmdproc.print_source_line(self.msg, 100, # 'source_line_test.py') self.cp.frame = sys._getframe() self.cp.setup() self.assertEqual(3, self.cp.eval('1+2')) return
def run(self, args): # It does not make much sense to repeat the last help # command. Also, given that 'help' uses PAGER, the you may # enter an extra CR which would rerun the (long) help command. self.proc.last_command = '' if len(args) > 1: cmd_name = args[1] if cmd_name == '*': self.section("List of all debugger commands:") m = self.columnize_commands(list(self.proc.commands.keys())) self.msg_nocr(m) return elif cmd_name == 'aliases': self.show_aliases() return elif cmd_name == 'macros': self.show_macros() return elif cmd_name == 'syntax': self.show_command_syntax(args) return elif cmd_name in list(categories.keys()): self.show_category(cmd_name, args[2:]) return command_name = Mcmdproc.resolve_name(self.proc, cmd_name) if command_name: instance = self.proc.commands[command_name] if hasattr(instance, 'help'): return instance.help(args) else: doc = instance.__doc__ or instance.run.__doc__ doc = doc.rstrip('\n') self.rst_msg(doc.rstrip("\n")) aliases = [ key for key in self.proc.aliases if command_name == self.proc.aliases[key] ] if len(aliases) > 0: self.msg('') msg = Mmisc.wrapped_lines('Aliases:', ', '.join(aliases) + '.', self.settings['width']) self.msg(msg) pass pass else: cmds = [ cmd for cmd in list(self.proc.commands.keys()) if re.match('^' + cmd_name, cmd) ] if cmds is None: self.errmsg("No commands found matching /^%s/. " "Try \"help\"." % cmd_name) elif len(cmds) == 1: self.msg("Pattern '%s' matches command %s..." % ( cmd_name, cmds[0], )) args[1] = cmds[0] self.run(args) else: self.section("Command names matching /^%s/:" % cmd_name) self.msg_nocr(self.columnize_commands(cmds)) pass return else: self.list_categories() pass return False
def run(self, args): # It does not make much sense to repeat the last help # command. Also, given that 'help' uses PAGER, the you may # enter an extra CR which would rerun the (long) help command. self.proc.last_command='' if len(args) > 1: cmd_name = args[1] if cmd_name == '*': self.section("List of all debugger commands:") m = self.columnize_commands(list(self.proc.commands.keys())) self.msg_nocr(m) return elif cmd_name == 'aliases': self.show_aliases() return elif cmd_name == 'macros': self.show_macros() return elif cmd_name == 'syntax': self.show_command_syntax(args) return elif cmd_name in list(categories.keys()): self.show_category(cmd_name, args[2:]) return command_name = Mcmdproc.resolve_name(self.proc, cmd_name) if command_name: instance = self.proc.commands[command_name] if hasattr(instance, 'help'): return instance.help(args) else: doc = instance.__doc__ or instance.run.__doc__ doc = doc.rstrip('\n') self.rst_msg(doc.rstrip("\n")) aliases = [key for key in self.proc.aliases if command_name == self.proc.aliases[key]] if len(aliases) > 0: self.msg('') msg = Mmisc.wrapped_lines('Aliases:', ', '.join(aliases) + '.', self.settings['width']) self.msg(msg) pass pass else: cmds = [cmd for cmd in list(self.proc.commands.keys()) if re.match('^' + cmd_name, cmd) ] if cmds is None: self.errmsg("No commands found matching /^%s/. " "Try \"help\"." % cmd_name) elif len(cmds) == 1: self.msg("Pattern '%s' matches command %s..." % (cmd_name, cmds[0],)) args[1] = cmds[0] self.run(args) else: self.section("Command names matching /^%s/:" % cmd_name) self.msg_nocr(self.columnize_commands(cmds)) pass return else: self.list_categories() pass return False
# Demo it if __name__ == "__main__": from trepan.processor.command import mock as Mmock d = Mmock.MockDebugger() cmdproc = CommandProcessor(d.core) print("commands:") commands = list(cmdproc.commands.keys()) commands.sort() print(commands) print("aliases:") aliases = list(cmdproc.aliases.keys()) aliases.sort() print(aliases) print(resolve_name(cmdproc, "quit")) print(resolve_name(cmdproc, "q")) print(resolve_name(cmdproc, "info")) print(resolve_name(cmdproc, "i")) # print '-' * 10 # print_source_line(sys.stdout.write, 100, 'source_line_test.py') # print '-' * 10 cmdproc.frame = sys._getframe() cmdproc.setup() print() print("-" * 10) cmdproc.location() print("-" * 10) print(cmdproc.eval("1+2")) print(cmdproc.eval("len(aliases)")) import pprint
def test_resolve_name(self): "Test that the command processor finds a command, alias, and method" self.assertTrue(Mcmdproc.resolve_name(self.cp, 'quit')) self.assertTrue(Mcmdproc.resolve_name(self.cp, 'q')) return
def test_resolve_name(self): "Test that the command processor finds a command, alias, and method" self.assertTrue(Mcmdproc.resolve_name(self.cp, 'quit')) self.assertTrue(Mcmdproc.resolve_name(self.cp, 'q')) return