151 lines
4.6 KiB
Python
151 lines
4.6 KiB
Python
import pytest
|
|
|
|
from core.builtin_concepts import ReturnValueConcept, ParserResultConcept, BuiltinConcepts
|
|
from core.sheerka import Sheerka, ExecutionContext
|
|
from core.concept import Concept
|
|
from evaluators.PythonEvaluator import PythonEvaluator
|
|
from parsers.PythonParser import PythonNode, PythonParser
|
|
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, ParserResultConcept(value=PythonNode("", None))), True),
|
|
(ReturnValueConcept("some_name", True, ParserResultConcept(value="other thing")), False),
|
|
(ReturnValueConcept("some_name", False, "not relevant"), False),
|
|
(ReturnValueConcept("some_name", True, Concept()), False)
|
|
])
|
|
def test_i_can_match(ret_val, expected):
|
|
context = get_context()
|
|
assert PythonEvaluator().matches(context, ret_val) == expected
|
|
|
|
|
|
@pytest.mark.parametrize("text, expected", [
|
|
("1 + 1", 2),
|
|
("sheerka.test()", "I have access to Sheerka !"),
|
|
("a=10\na", 10),
|
|
])
|
|
def test_i_can_eval(text, expected):
|
|
context = get_context()
|
|
parsed = PythonParser().parse(context, text)
|
|
|
|
evaluated = PythonEvaluator().eval(context, parsed)
|
|
|
|
assert evaluated.status
|
|
assert evaluated.value == expected
|
|
|
|
|
|
@pytest.mark.parametrize("concept", [
|
|
Concept("foo"),
|
|
Concept("foo", body="2"),
|
|
Concept("foo").set_prop("prop", "'a'"),
|
|
Concept("foo", body="bar")
|
|
])
|
|
def test_i_cannot_eval_simple_concept(concept):
|
|
context = get_context()
|
|
context.sheerka.add_in_cache(Concept("foo"))
|
|
|
|
parsed = PythonParser().parse(context, "foo")
|
|
evaluated = PythonEvaluator().eval(context, parsed)
|
|
|
|
assert not evaluated.status
|
|
assert context.sheerka.isinstance(evaluated.value, BuiltinConcepts.NOT_FOR_ME)
|
|
|
|
|
|
#
|
|
# def test_i_can_eval_expression_that_references_concepts():
|
|
# context = get_context()
|
|
# context.sheerka.add_in_cache(Concept("foo"))
|
|
#
|
|
# parsed = PythonParser().parse(context, "foo")
|
|
# evaluated = PythonEvaluator().eval(context, parsed)
|
|
#
|
|
# assert evaluated.status
|
|
# assert evaluated.value == Concept("foo").init_key()
|
|
#
|
|
#
|
|
# def test_i_can_eval_expression_that_references_concepts_with_body():
|
|
# """
|
|
# I can test expression with variables
|
|
# :return:
|
|
# """
|
|
# context = get_context()
|
|
# context.sheerka.add_in_cache(Concept("foo", body="2"))
|
|
#
|
|
# parsed = PythonParser().parse(context, "foo")
|
|
# evaluated = PythonEvaluator().eval(context, parsed)
|
|
#
|
|
# assert evaluated.status
|
|
# assert evaluated.value == 2
|
|
|
|
def test_i_can_eval_expression_with_that_references_concepts():
|
|
"""
|
|
I can test modules with variables
|
|
:return:
|
|
"""
|
|
context = get_context()
|
|
context.sheerka.add_in_cache(Concept("foo", body="1"))
|
|
|
|
parsed = PythonParser().parse(context, "foo + 2")
|
|
evaluated = PythonEvaluator().eval(context, parsed)
|
|
|
|
assert evaluated.status
|
|
assert evaluated.value == 3
|
|
|
|
|
|
def test_i_can_eval_module_with_that_references_concepts():
|
|
"""
|
|
I can test modules with variables
|
|
:return:
|
|
"""
|
|
context = get_context()
|
|
context.sheerka.add_in_cache(Concept("foo"))
|
|
|
|
parsed = PythonParser().parse(context, "def a(b):\n return b\na(foo)")
|
|
evaluated = PythonEvaluator().eval(context, parsed)
|
|
|
|
assert evaluated.status
|
|
assert evaluated.value == Concept("foo").init_key()
|
|
|
|
|
|
def test_i_can_eval_module_with_that_references_concepts_with_body():
|
|
"""
|
|
I can test modules with variables
|
|
:return:
|
|
"""
|
|
context = get_context()
|
|
context.sheerka.add_in_cache(Concept("foo", body="2"))
|
|
|
|
parsed = PythonParser().parse(context, "def a(b):\n return b\na(foo)")
|
|
evaluated = PythonEvaluator().eval(context, parsed)
|
|
|
|
assert evaluated.status
|
|
assert evaluated.value == 2
|
|
|
|
#
|
|
# def test_i_can_eval_concept_with_props():
|
|
# context = get_context()
|
|
# context.sheerka.add_in_cache(Concept("foo").set_prop("prop", "'a'"))
|
|
#
|
|
# parsed = PythonParser().parse(context, "foo")
|
|
# evaluated = PythonEvaluator().eval(context, parsed)
|
|
#
|
|
# assert evaluated.status
|
|
# assert evaluated.value == Concept("foo").set_prop("prop", "a").init_key() # evaluated version of foo
|
|
#
|
|
#
|
|
# def test_i_cannot_eval_when_body_references_unknown_concept():
|
|
# context = get_context()
|
|
# context.sheerka.add_in_cache(Concept("foo", body="bar"))
|
|
#
|
|
# parsed = PythonParser().parse(context, "foo")
|
|
# evaluated = PythonEvaluator().eval(context, parsed)
|
|
#
|
|
# assert not evaluated.status
|
|
# assert context.sheerka.isinstance(evaluated.value, BuiltinConcepts.ERROR)
|