224 lines
8.9 KiB
Python
224 lines
8.9 KiB
Python
import os
|
|
import shutil
|
|
from os import path
|
|
|
|
import pytest
|
|
|
|
from core.builtin_concepts import ReturnValueConcept, BuiltinConcepts
|
|
from core.concept import Concept
|
|
from core.sheerka import Sheerka, ExecutionContext
|
|
from evaluators.BaseEvaluator import BaseEvaluator
|
|
from evaluators.MutipleSameSuccessEvaluator import MultipleSameSuccessEvaluator
|
|
from parsers.BaseParser import BaseParser
|
|
|
|
tests_root = path.abspath("../build/tests")
|
|
root_folder = "init_folder"
|
|
|
|
|
|
@pytest.fixture(autouse=True)
|
|
def init_test():
|
|
if path.exists(tests_root):
|
|
shutil.rmtree(tests_root)
|
|
|
|
if not path.exists(tests_root):
|
|
os.makedirs(tests_root)
|
|
current_pwd = os.getcwd()
|
|
os.chdir(tests_root)
|
|
|
|
yield None
|
|
os.chdir(current_pwd)
|
|
|
|
|
|
def get_context():
|
|
sheerka = Sheerka()
|
|
sheerka.initialize(root_folder)
|
|
return ExecutionContext("test", "xxx", sheerka)
|
|
|
|
|
|
def test_i_can_match_and_eval():
|
|
context = get_context()
|
|
sheerka = context.sheerka
|
|
|
|
return_values = [
|
|
ReturnValueConcept(BaseParser.PREFIX + "some_name", False, "Not relevant"),
|
|
ReturnValueConcept(BaseParser.PREFIX + "some_name2", False, "Not relevant"),
|
|
ReturnValueConcept(BaseEvaluator.PREFIX + "some_name", True, Concept(name="1", body="value")),
|
|
ReturnValueConcept(BaseEvaluator.PREFIX + "some_name", True, Concept(name="2", body="value")),
|
|
ReturnValueConcept("some_name", True, sheerka.new(BuiltinConcepts.AFTER_EVALUATION))
|
|
]
|
|
|
|
evaluator = MultipleSameSuccessEvaluator()
|
|
assert evaluator.matches(context, return_values)
|
|
|
|
evaluated = evaluator.eval(context, return_values)
|
|
assert evaluated.status
|
|
assert evaluated.value == "value"
|
|
|
|
|
|
def test_i_can_match_and_eval_when_no_body():
|
|
context = get_context()
|
|
sheerka = context.sheerka
|
|
|
|
return_values = [
|
|
ReturnValueConcept(BaseParser.PREFIX + "some_name", False, "Not relevant"),
|
|
ReturnValueConcept(BaseParser.PREFIX + "some_name2", False, "Not relevant"),
|
|
ReturnValueConcept(BaseEvaluator.PREFIX + "some_name", True, Concept(name="1")),
|
|
ReturnValueConcept(BaseEvaluator.PREFIX + "some_name", True, Concept(name="1")),
|
|
ReturnValueConcept("some_name", True, sheerka.new(BuiltinConcepts.AFTER_EVALUATION))
|
|
]
|
|
|
|
evaluator = MultipleSameSuccessEvaluator()
|
|
assert evaluator.matches(context, return_values)
|
|
|
|
evaluated = evaluator.eval(context, return_values)
|
|
assert evaluated.status
|
|
assert evaluated.value == Concept(name="1")
|
|
|
|
|
|
def test_i_can_match_and_eval_when_value_is_not_a_concept():
|
|
context = get_context()
|
|
sheerka = context.sheerka
|
|
|
|
return_values = [
|
|
ReturnValueConcept(BaseParser.PREFIX + "some_name", False, "Not relevant"),
|
|
ReturnValueConcept(BaseParser.PREFIX + "some_name2", False, "Not relevant"),
|
|
ReturnValueConcept(BaseEvaluator.PREFIX + "some_name", True, "value"),
|
|
ReturnValueConcept(BaseEvaluator.PREFIX + "some_name", True, "value"),
|
|
ReturnValueConcept("some_name", True, sheerka.new(BuiltinConcepts.AFTER_EVALUATION))
|
|
]
|
|
|
|
evaluator = MultipleSameSuccessEvaluator()
|
|
assert evaluator.matches(context, return_values)
|
|
|
|
evaluated = evaluator.eval(context, return_values)
|
|
assert evaluated.status
|
|
assert evaluated.value == "value"
|
|
|
|
|
|
def test_i_can_match_even_if_the_value_are_not_the_same_but_eval_will_fail():
|
|
context = get_context()
|
|
sheerka = context.sheerka
|
|
|
|
return_values = [
|
|
ReturnValueConcept(BaseParser.PREFIX + "some_name", False, "Not relevant"),
|
|
ReturnValueConcept(BaseParser.PREFIX + "some_name2", False, "Not relevant"),
|
|
ReturnValueConcept(BaseEvaluator.PREFIX + "some_name", True, Concept(name="1", body="value")),
|
|
ReturnValueConcept(BaseEvaluator.PREFIX + "some_name", True, Concept(name="2", body="value2")),
|
|
ReturnValueConcept("some_name", True, sheerka.new(BuiltinConcepts.AFTER_EVALUATION))
|
|
]
|
|
|
|
evaluator = MultipleSameSuccessEvaluator()
|
|
assert evaluator.matches(context, return_values)
|
|
assert evaluator.eval(context, return_values) is None
|
|
|
|
|
|
def test_i_can_match_even_if_the_value_are_not_the_same_but_eval_will_fail_when_no_body():
|
|
context = get_context()
|
|
sheerka = context.sheerka
|
|
|
|
return_values = [
|
|
ReturnValueConcept(BaseParser.PREFIX + "some_name", False, "Not relevant"),
|
|
ReturnValueConcept(BaseParser.PREFIX + "some_name2", False, "Not relevant"),
|
|
ReturnValueConcept(BaseEvaluator.PREFIX + "some_name", True, Concept(name="1")),
|
|
ReturnValueConcept(BaseEvaluator.PREFIX + "some_name", True, Concept(name="2")),
|
|
ReturnValueConcept("some_name", True, sheerka.new(BuiltinConcepts.AFTER_EVALUATION))
|
|
]
|
|
|
|
evaluator = MultipleSameSuccessEvaluator()
|
|
assert evaluator.matches(context, return_values)
|
|
assert evaluator.eval(context, return_values) is None
|
|
|
|
|
|
def test_i_can_match_if_no_parser():
|
|
context = get_context()
|
|
sheerka = context.sheerka
|
|
|
|
return_values = [
|
|
ReturnValueConcept(BaseEvaluator.PREFIX + "some_name", True, Concept(name="1", body="value")),
|
|
ReturnValueConcept(BaseEvaluator.PREFIX + "some_name", True, Concept(name="2", body="value")),
|
|
ReturnValueConcept("some_name", True, sheerka.new(BuiltinConcepts.AFTER_EVALUATION))
|
|
]
|
|
|
|
assert MultipleSameSuccessEvaluator().matches(context, return_values)
|
|
|
|
|
|
def test_i_cannot_match_if_not_after_evaluation():
|
|
context = get_context()
|
|
sheerka = context.sheerka
|
|
|
|
return_values = [
|
|
ReturnValueConcept(BaseParser.PREFIX + "some_name", False, "Not relevant"),
|
|
ReturnValueConcept(BaseParser.PREFIX + "some_name2", False, "Not relevant"),
|
|
ReturnValueConcept(BaseEvaluator.PREFIX + "some_name", True, Concept(name="1", body="value")),
|
|
ReturnValueConcept(BaseEvaluator.PREFIX + "some_name", True, Concept(name="2", body="value")),
|
|
ReturnValueConcept("some_name", True, Concept(name="2", body="value")),
|
|
# ReturnValueConcept("some_name", True, sheerka.new(BuiltinConcepts.AFTER_EVALUATION))
|
|
]
|
|
|
|
assert not MultipleSameSuccessEvaluator().matches(context, return_values)
|
|
|
|
|
|
def test_i_cannot_match_if_only_one_successful_evaluator():
|
|
context = get_context()
|
|
sheerka = context.sheerka
|
|
|
|
return_values = [
|
|
ReturnValueConcept(BaseParser.PREFIX + "some_name", False, "Not relevant"),
|
|
ReturnValueConcept(BaseParser.PREFIX + "some_name2", False, "Not relevant"),
|
|
# ReturnValueConcept(BaseEvaluator.PREFIX + "some_name", True, Concept(name="1", body="value")),
|
|
ReturnValueConcept(BaseEvaluator.PREFIX + "some_name", True, Concept(name="2", body="value")),
|
|
ReturnValueConcept("some_name", True, Concept(name="2", body="value")),
|
|
ReturnValueConcept("some_name", True, sheerka.new(BuiltinConcepts.AFTER_EVALUATION))
|
|
]
|
|
|
|
assert not MultipleSameSuccessEvaluator().matches(context, return_values)
|
|
|
|
|
|
def test_i_cannot_match_if_at_least_one_parser_is_successful():
|
|
context = get_context()
|
|
sheerka = context.sheerka
|
|
|
|
return_values = [
|
|
ReturnValueConcept(BaseParser.PREFIX + "some_name", False, "Not relevant"),
|
|
ReturnValueConcept(BaseParser.PREFIX + "some_name2", True, "Not relevant"),
|
|
ReturnValueConcept(BaseEvaluator.PREFIX + "some_name", True, Concept(name="1", body="value")),
|
|
ReturnValueConcept(BaseEvaluator.PREFIX + "some_name", True, Concept(name="2", body="value")),
|
|
ReturnValueConcept("some_name", True, sheerka.new(BuiltinConcepts.AFTER_EVALUATION))
|
|
]
|
|
|
|
assert not MultipleSameSuccessEvaluator().matches(context, return_values)
|
|
|
|
|
|
def test_i_cannot_match_if_i_have_unlisted_return_value_in_success():
|
|
context = get_context()
|
|
sheerka = context.sheerka
|
|
|
|
return_values = [
|
|
ReturnValueConcept(BaseParser.PREFIX + "some_name", False, "Not relevant"),
|
|
ReturnValueConcept(BaseParser.PREFIX + "some_name2", False, "Not relevant"),
|
|
ReturnValueConcept(BaseEvaluator.PREFIX + "some_name", True, Concept(name="1", body="value")),
|
|
ReturnValueConcept(BaseEvaluator.PREFIX + "some_name", True, Concept(name="2", body="value")),
|
|
ReturnValueConcept("some_name", True, sheerka.new(BuiltinConcepts.AFTER_EVALUATION)),
|
|
ReturnValueConcept("some_name", True, "not relevant"),
|
|
|
|
]
|
|
|
|
assert not MultipleSameSuccessEvaluator().matches(context, return_values)
|
|
|
|
|
|
def test_i_cannot_match_if_i_have_unlisted_return_value_in_error():
|
|
context = get_context()
|
|
sheerka = context.sheerka
|
|
|
|
return_values = [
|
|
ReturnValueConcept(BaseParser.PREFIX + "some_name", False, "Not relevant"),
|
|
ReturnValueConcept(BaseParser.PREFIX + "some_name2", False, "Not relevant"),
|
|
ReturnValueConcept(BaseEvaluator.PREFIX + "some_name", True, Concept(name="1", body="value")),
|
|
ReturnValueConcept(BaseEvaluator.PREFIX + "some_name", True, Concept(name="2", body="value")),
|
|
ReturnValueConcept("some_name", True, sheerka.new(BuiltinConcepts.AFTER_EVALUATION)),
|
|
ReturnValueConcept("some_name", False, "not relevant"),
|
|
|
|
]
|
|
|
|
assert not MultipleSameSuccessEvaluator().matches(context, return_values)
|