import pytest from core.builtin_concepts import BuiltinConcepts from evaluators.MultipleOutEvaluator import MultipleOutEvaluator from tests.TestUsingMemoryBasedSheerka import TestUsingMemoryBasedSheerka from tests.evaluators.EvaluatorTestsUtils import reduced_requested, e_ret_val_new, p_ret_val_false, p_ret_val_true, \ e_ret_val_false, e_ret_val class TestMultipleOutEvaluator(TestUsingMemoryBasedSheerka): @pytest.mark.parametrize("return_values, expected", [ ([reduced_requested, e_ret_val_new(BuiltinConcepts.TO_DICT, body={}), e_ret_val_new(BuiltinConcepts.TO_DICT, body={}), p_ret_val_false("value"), e_ret_val_false()], True), # only one to_dict ([reduced_requested, e_ret_val_new(BuiltinConcepts.TO_DICT, body={})], False), # reduce request missing ([e_ret_val_new(BuiltinConcepts.TO_DICT, body={}), e_ret_val_new(BuiltinConcepts.TO_DICT, body={})], False), # parser result not evaluated ([reduced_requested, e_ret_val_new(BuiltinConcepts.TO_DICT, body={}), e_ret_val_new(BuiltinConcepts.TO_DICT, body={}), p_ret_val_true("value")], False), ]) def test_i_can_match(self, return_values, expected): sheerka, context = self.init_concepts() evaluator = MultipleOutEvaluator() assert evaluator.matches(context, return_values) == expected def test_i_can_eval(self): sheerka, context = self.init_concepts() evaluator = MultipleOutEvaluator() first_out = sheerka.new(BuiltinConcepts.TO_DICT, body={"a": 1}) second_out = sheerka.new(BuiltinConcepts.TO_DICT, body={"b": 1}) return_values = [reduced_requested, e_ret_val(first_out), e_ret_val(second_out), p_ret_val_false("value"), e_ret_val_false()] evaluator.matches(context, return_values) res = evaluator.eval(context, return_values) assert sheerka.isinstance(res, BuiltinConcepts.RETURN_VALUE) assert res.body == sheerka.new(BuiltinConcepts.TO_MULTI, body=[first_out, second_out]) assert res.parents == return_values