Added first version of DebugManager. Implemented draft of the rule engine
This commit is contained in:
@@ -0,0 +1,70 @@
|
||||
import pytest
|
||||
from core.builtin_concepts import ReturnValueConcept, ParserResultConcept, BuiltinConcepts
|
||||
from core.rule import Rule, ACTION_TYPE_DEFERRED
|
||||
from evaluators.RuleEvaluator import RuleEvaluator
|
||||
|
||||
from tests.TestUsingMemoryBasedSheerka import TestUsingMemoryBasedSheerka
|
||||
|
||||
|
||||
class TestRuleEvaluator(TestUsingMemoryBasedSheerka):
|
||||
|
||||
@pytest.mark.parametrize("ret_val, expected", [
|
||||
(ReturnValueConcept("some_name", True, ParserResultConcept(value=[Rule()])), True),
|
||||
(ReturnValueConcept("some_name", True, ParserResultConcept(value="Not a concept")), False),
|
||||
(ReturnValueConcept("some_name", True, ParserResultConcept(value=[])), False),
|
||||
(ReturnValueConcept("some_name", True, Rule), False),
|
||||
(ReturnValueConcept("some_name", False, ParserResultConcept(value=Rule())), False),
|
||||
(ReturnValueConcept("some_name", False, ParserResultConcept(value=[Rule()])), False),
|
||||
])
|
||||
def test_i_can_match(self, ret_val, expected):
|
||||
context = self.get_context()
|
||||
assert RuleEvaluator().matches(context, ret_val) == expected
|
||||
|
||||
@pytest.mark.parametrize("body, expected", [
|
||||
([Rule("exec", "rule1")], Rule("exec", "rule1")),
|
||||
([Rule("exec", "rule1"), Rule("exec", "rule2")], [Rule("exec", "rule1"), Rule("exec", "rule2")]),
|
||||
|
||||
])
|
||||
def test_i_can_evaluate(self, body, expected):
|
||||
context = self.get_context()
|
||||
ret_val = ReturnValueConcept("some_name", True, ParserResultConcept(value=body), True)
|
||||
evaluator = RuleEvaluator()
|
||||
|
||||
result = evaluator.eval(context, ret_val)
|
||||
|
||||
assert result.who == evaluator.name
|
||||
assert result.status
|
||||
assert result.value == expected
|
||||
assert result.parents == [ret_val]
|
||||
|
||||
def test_i_can_evaluate_deferred_rules(self):
|
||||
context = self.get_context()
|
||||
|
||||
rule = Rule().set_id("i")
|
||||
rule.metadata.action_type = ACTION_TYPE_DEFERRED
|
||||
ret_val = ReturnValueConcept("some_name", True, ParserResultConcept(value=[rule]), True)
|
||||
context.add_to_short_term_memory("i", 1)
|
||||
evaluator = RuleEvaluator()
|
||||
|
||||
result = evaluator.eval(context, ret_val)
|
||||
|
||||
assert result.who == evaluator.name
|
||||
assert result.status
|
||||
assert result.value == context.sheerka.get_rule_by_id("1")
|
||||
assert result.parents == [ret_val]
|
||||
|
||||
def test_i_cannot_evaluate_deferred_rule_if_the_rule_is_unknown(self):
|
||||
sheerka, context = self.init_concepts()
|
||||
|
||||
rule = Rule().set_id("unknown variable")
|
||||
rule.metadata.action_type = ACTION_TYPE_DEFERRED
|
||||
ret_val = ReturnValueConcept("some_name", True, ParserResultConcept(value=[rule]), True)
|
||||
evaluator = RuleEvaluator()
|
||||
|
||||
result = evaluator.eval(context, ret_val)
|
||||
|
||||
assert result.who == evaluator.name
|
||||
assert not result.status
|
||||
assert sheerka.isinstance(result.value, BuiltinConcepts.UNKNOWN_RULE)
|
||||
assert result.value.body == [('id', 'unknown variable')]
|
||||
assert result.parents == [ret_val]
|
||||
Reference in New Issue
Block a user