import pytest from core.builtin_concepts import BuiltinConcepts, ReturnValueConcept from core.concept import Concept from core.sheerka import Sheerka, ExecutionContext from evaluators.PrepareEvalEvaluator import PrepareEvalEvaluator from sdp.sheerkaDataProvider import Event def get_context(): sheerka = Sheerka(skip_builtins_in_db=True) sheerka.initialize("mem://") return ExecutionContext("test", Event(), sheerka) @pytest.mark.parametrize("ret_val, expected", [ (ReturnValueConcept("some_name", True, Concept(key=BuiltinConcepts.USER_INPUT, body="eval 1 + 1")), True), (ReturnValueConcept("some_name", True, Concept(key=BuiltinConcepts.USER_INPUT, body=" eval 1 + 1")), True), (ReturnValueConcept("some_name", True, Concept(key=BuiltinConcepts.USER_INPUT, body="eval")), False), (ReturnValueConcept("some_name", True, Concept(key=BuiltinConcepts.USER_INPUT, body="1+1")), False), (ReturnValueConcept("some_name", True, Concept(key=BuiltinConcepts.USER_INPUT, body="")), False), (ReturnValueConcept("some_name", True, Concept(key=BuiltinConcepts.USER_INPUT, body="eval ")), False), (ReturnValueConcept("some_name", True, Concept(key=BuiltinConcepts.USER_INPUT, body=[])), False), (ReturnValueConcept("some_name", True, Concept("foo")), False), (ReturnValueConcept("some_name", True, "not a concept"), False), (ReturnValueConcept("some_name", False, Concept(key=BuiltinConcepts.USER_INPUT, body="eval 1 + 1")), False), (ReturnValueConcept("some_name", False, Concept(key=BuiltinConcepts.USER_INPUT, body=" eval 1 + 1")), False), ]) def test_i_can_match(ret_val, expected): context = get_context() assert PrepareEvalEvaluator().matches(context, ret_val) == expected @pytest.mark.parametrize("ret_val, expected", [ (ReturnValueConcept("some_name", True, Concept(key=BuiltinConcepts.USER_INPUT, body="eval 1 + 1")), "1 + 1"), (ReturnValueConcept("some_name", True, Concept(key=BuiltinConcepts.USER_INPUT, body=" eval 1 + 1")), "1 + 1"), ]) def test_i_can_eval(ret_val, expected): context = get_context() sheerka = context.sheerka prepare_evaluator = PrepareEvalEvaluator() prepare_evaluator.matches(context, ret_val) res = prepare_evaluator.eval(context, ret_val) assert len(res) == 2 assert res[0].status assert sheerka.isinstance(res[0].body, BuiltinConcepts.USER_INPUT) assert res[0].body.body == expected assert res[1].status assert sheerka.isinstance(res[1].body, BuiltinConcepts.CONCEPT_EVAL_REQUESTED)