def test_eval_contextual_means_extra_arg(): script = "ctxaware foo" bindings = [ command_binding("ctxaware", lambda _context, arg: arg, contextual=True) ] result, command = interpret(new_context(bindings), script) assert result == "foo" assert command == "ctxaware"
def test_eval_nested(): script = "upper [reverse foo]" bindings = [ command_binding("upper", lambda s: s.upper()), command_binding("reverse", lambda s: s[::-1]), ] result, command = interpret(new_context(bindings), script) assert result == "OOF" assert command == "upper"
def test_eval_contextual_regex_command(): script = "grooooovy" bindings = [ command_binding(re.compile("^groo+vy$"), lambda context: context.command_name, contextual=True) ] result, command = interpret(new_context(bindings), script) assert result == "grooooovy" assert command == "/groo+vy/"
def test_eval_contextual_adds_command_name(): script = "ctxaware" bindings = [ command_binding("ctxaware", lambda context: context.command_name, contextual=True) ] result, command = interpret(new_context(bindings), script) assert result == "ctxaware" assert command == "ctxaware"
def test_eval_contextual_propagates_metadata(): script = "ctxaware" metadata = {"a": "foo"} bindings = [ command_binding("ctxaware", lambda context: context.metadata["a"], contextual=True) ] result, command = interpret(new_context(bindings, metadata), script) assert result == "foo" assert command == "ctxaware"
def trace(self, context, mode, script): if mode not in ["-brief", "-full"]: return "Mode must be one of: -brief, -full" subcontext = new_context(context.bindings, context.metadata) try: interpret(subcontext, script) except Exception: pass color_pairs = [ (color.LIGHT_RED, color.DARK_RED), (color.LIGHT_GREEN, color.DARK_GREEN), (color.LIGHT_BLUE, color.DARK_BLUE), (color.LIGHT_YELLOW, color.DARK_YELLOW), (color.LIGHT_MAGENTA, color.DARK_MAGENTA), (color.LIGHT_CYAN, color.DARK_CYAN), ] if mode == "-brief": return brief_trace(subcontext.trace, color_pairs) elif mode == "-full": return full_trace(subcontext.trace, color_pairs)
def RunCommand(self, timestamp, network, channel, nick, text): metadata = { 'datetime': datetime.fromtimestamp(timestamp, tz=timezone.utc), 'network': network, 'channel': channel, 'nick': nick, 'text': text } try: fuse_result = self.fuse.run(metadata['datetime'], network, channel) if fuse_result == FuseResult.JUST_BLOWN: return { 'text': f'{color.LIGHT_YELLOW}*daily fuse blown*{color.LIGHT_YELLOW}', 'command': 'error' } elif fuse_result == FuseResult.BLOWN: return {'text': '', 'command': 'error'} context = new_context(self.bindings, metadata) result, display_name = interpret(context, text) result = result[:10000] return {'text': result, 'command': display_name} except ApplyError as e: return { 'text': "Usage: {}".format(self.command_usage(e.command)), 'command': e.command.display_name } except ScriptError as e: return {'text': str(e), 'command': 'error'} except RecursionError: return { 'text': "RecursionError: Maximum recursion depth exceeded", 'command': 'error' } except Exception as e: print(str(e)) return {'text': "Internal error: " + str(e), 'command': 'error'}
def test_eval_text_varargs_with_no_args_and_default(): script = "echo" bindings = [command_binding("echo", lambda text="": text, varargs=True)] result, command = interpret(new_context(bindings), script) assert result == "" assert command == "echo"
def test_eval_text_varargs_with_no_args(): script = "echo" bindings = [command_binding("echo", lambda text: text, varargs=True)] with pytest.raises(ApplyError): interpret(new_context(bindings), script)
def test_eval_text_varargs_with_extra_whitespace(): script = "echo one two three " bindings = [command_binding("echo", lambda text: text, varargs=True)] result, command = interpret(new_context(bindings), script) assert result == "one two three" assert command == "echo"
def test_eval_simple(): script = "upper foo" bindings = [command_binding("upper", lambda s: s.upper())] result, command = interpret(new_context(bindings), script) assert result == "FOO" assert command == "upper"
def test_eval_optional_arg_filled(): script = "maybe foo" bindings = [command_binding("maybe", lambda x="bar": x)] result, command = interpret(new_context(bindings), script) assert result == "foo" assert command == "maybe"
def test_eval_too_many_args(): script = "cat3 one two three four" bindings = [command_binding("cat3", lambda x, y, z: x + y + z)] with pytest.raises(ApplyError): interpret(new_context(bindings), script)
def test_eval_python_varargs_with_no_args(): script = "list" bindings = [command_binding("list", lambda *words: ",".join(words))] result, command = interpret(new_context(bindings), script) assert result == "" assert command == "list"
def test_eval_missing_command(): script = "foo" bindings = [] with pytest.raises(EvalError): interpret(new_context(bindings), script)
def test_eval_multple_args(): script = "cat3 one two three" bindings = [command_binding("cat3", lambda x, y, z: x + y + z)] result, command = interpret(new_context(bindings), script) assert result == "onetwothree" assert command == "cat3"
def test_exec_alias(): context = new_context(mock_bot.bindings, command_name="testalias") result = alias_cmds.exec_alias(context) assert result == "testtest"