Fixed #20: I can parse simple concepts
This commit is contained in:
@@ -1,3 +1,5 @@
|
||||
import ast
|
||||
|
||||
import pytest
|
||||
|
||||
from base import BaseTest, DummyObj
|
||||
@@ -7,11 +9,13 @@ from core.BuiltinConcepts import BuiltinConcepts
|
||||
from core.ExecutionContext import ContextActions
|
||||
from core.concept import ConceptDefaultProps
|
||||
from core.error import MethodAccessError
|
||||
from core.python_fragment import PythonFragment
|
||||
from evaluators.PythonParser import PythonParser
|
||||
from helpers import _rv, define_new_concept, get_concepts, get_evaluated_concept, get_metadata
|
||||
from helpers import _rv, define_new_concept, get_concepts, get_evaluated_concept, get_evaluated_concepts, get_metadata
|
||||
from parsers.ParserInput import ParserInput
|
||||
from parsers.tokenizer import Token, TokenKind
|
||||
from services.SheerkaPython import EvalMethod, EvaluationContext, EvaluationRef, Expando, MultipleResults, SheerkaPython
|
||||
from services.SheerkaConceptManager import ConceptRef
|
||||
from services.SheerkaPython import EvalMethod, EvaluationContext, Expando, MultipleResults, ObjectRef, SheerkaPython
|
||||
|
||||
|
||||
def get_python_fragment(sheerka, context, command):
|
||||
@@ -70,7 +74,7 @@ class TestSheerkaPython(BaseTest):
|
||||
|
||||
def test_i_can_eval_using_eval_ref(self, sheerka, context, service):
|
||||
python_fragment = get_python_fragment(sheerka, context, "a")
|
||||
python_fragment.namespace = {"a": EvaluationRef("self", "a")}
|
||||
python_fragment.namespace = {"a": ObjectRef("self", "a")}
|
||||
|
||||
ret = service.evaluate_python(context, EvaluationContext(), python_fragment,
|
||||
{"self": DummyObj("my dummy value")})
|
||||
@@ -95,6 +99,38 @@ class TestSheerkaPython(BaseTest):
|
||||
ret = service.evaluate_python(context, EvaluationContext(), python_fragment)
|
||||
assert ret == 3
|
||||
|
||||
def test_i_can_eval_when_multiple_concepts(self, sheerka, context, service):
|
||||
with NewOntology(context, "test_i_can_eval_when_multiple_concepts"):
|
||||
get_concepts(context,
|
||||
get_metadata("one", body="'one'"),
|
||||
get_metadata("one", body="1"),
|
||||
use_sheerka=True)
|
||||
python_fragment = get_python_fragment(sheerka, context, "one + 1")
|
||||
|
||||
ret = service.evaluate_python(context, EvaluationContext(), python_fragment)
|
||||
|
||||
assert ret == 2
|
||||
|
||||
def test_i_can_eval_when_multiple_result_in_local_namespace(self, sheerka, context, service):
|
||||
# In the test, the PythonFragment contains a MultipleResult in its namespace
|
||||
# (normally, the MultipleResult is created inside the evaluate_python)
|
||||
# We need to make sure that multiple results are created in the same way
|
||||
with NewOntology(context, "test_i_can_eval_when_multiple_result_in_local_namespace"):
|
||||
one1, one2 = get_concepts(context,
|
||||
get_metadata("one", body="'one'"),
|
||||
get_metadata("one", body="1"),
|
||||
use_sheerka=True)
|
||||
|
||||
concept_ref = "__concept_id__"
|
||||
ast_tree = ast.parse(concept_ref, "<user input>", 'eval')
|
||||
ref = MultipleResults(ConceptRef(one1), ConceptRef(one2))
|
||||
python_fragment = PythonFragment(concept_ref, ast_tree=ast_tree, namespace={concept_ref: ref})
|
||||
|
||||
ret = service.evaluate_python(context, EvaluationContext(eval_method=EvalMethod.All), python_fragment)
|
||||
|
||||
evaluated_one1, evaluated_one2 = get_evaluated_concepts(context, one1, one2, use_sheerka=True)
|
||||
assert ret == MultipleResults(evaluated_one1, "one", evaluated_one2, 1)
|
||||
|
||||
def test_i_can_remember_previous_results(self, sheerka, context, service):
|
||||
python_fragment = get_python_fragment(sheerka, context, "a=10")
|
||||
ret = service.evaluate_python(context, EvaluationContext(), python_fragment)
|
||||
@@ -151,18 +187,6 @@ class TestSheerkaPython(BaseTest):
|
||||
get_evaluated_concept(foo_3, body='bar'),
|
||||
"bar")
|
||||
|
||||
def test_i_can_eval_when_multiple_concepts(self, sheerka, context, service):
|
||||
with NewOntology(context, "test_i_can_eval_when_multiple_concepts"):
|
||||
get_concepts(context,
|
||||
get_metadata("one", body="'one'"),
|
||||
get_metadata("one", body="1"),
|
||||
use_sheerka=True)
|
||||
python_fragment = get_python_fragment(sheerka, context, "one + 1")
|
||||
|
||||
ret = service.evaluate_python(context, EvaluationContext(), python_fragment)
|
||||
|
||||
assert ret == 2
|
||||
|
||||
def test_i_can_eval_until_a_successful_result_is_found(self, sheerka, context, service):
|
||||
with NewOntology(context, "test_i_can_eval_when_multiple_concepts"):
|
||||
get_concepts(context,
|
||||
@@ -338,3 +362,10 @@ class TestSheerkaPython(BaseTest):
|
||||
foo, bar = get_concepts(context, "foo", "bar")
|
||||
assert MultipleResults(foo, "one", bar, 1).concepts_only() == MultipleResults(foo, bar)
|
||||
assert MultipleResults("one", 1).concepts_only() == MultipleResults()
|
||||
|
||||
def test_i_can_add_multiple_results_of_multiple_results(self, context):
|
||||
foo, bar, baz, qux = get_concepts(context, "foo", "bar", "baz", "qux")
|
||||
m1 = MultipleResults(foo, bar)
|
||||
m2 = MultipleResults(bar, baz, m1)
|
||||
|
||||
assert m2.items == [bar, baz, foo, bar]
|
||||
|
||||
Reference in New Issue
Block a user