Added basic implementation for Python code evaluation
This commit is contained in:
+51
-20
@@ -5,10 +5,11 @@ import os
|
||||
from os import path
|
||||
import shutil
|
||||
|
||||
from core.concept import Concept, ConceptParts
|
||||
from core.concept import Concept, ConceptParts, ReturnValueConcept
|
||||
from core.sheerka import Sheerka, ExecutionContext
|
||||
from parsers.DefaultParser import DefConceptNode, DefaultParser
|
||||
from parsers.PythonParser import PythonParser
|
||||
from sdp.sheerkaDataProvider import SheerkaDataProvider
|
||||
|
||||
tests_root = path.abspath("../build/tests")
|
||||
root_folder = "init_folder"
|
||||
@@ -36,23 +37,11 @@ def test_root_folder_is_created_after_initialization():
|
||||
|
||||
|
||||
def test_lists_of_concepts_is_initialized():
|
||||
Sheerka().initialize(root_folder)
|
||||
assert len(Sheerka().concepts_cache) > 1
|
||||
sheerka = Sheerka()
|
||||
sheerka.initialize(root_folder)
|
||||
assert len(sheerka.concepts_cache) > 1
|
||||
|
||||
|
||||
# def test_null_concept_are_equals():
|
||||
# concept1 = Concept("test1")
|
||||
# concept2 = Concept("test2")
|
||||
# concept3 = Concept("test3")
|
||||
#
|
||||
# assert not Sheerka.concept_equals(concept1, None)
|
||||
# assert not Sheerka.concept_equals(None, concept1)
|
||||
# assert not Sheerka.concept_equals(concept1, concept2)
|
||||
# assert not Sheerka.concept_equals(concept1, concept3)
|
||||
#
|
||||
# assert Sheerka.concept_equals(None, None)
|
||||
# assert Sheerka.concept_equals(concept1, concept1)
|
||||
|
||||
def get_concept():
|
||||
text = """
|
||||
def concept a+b
|
||||
@@ -72,7 +61,7 @@ def test_i_can_add_a_concept():
|
||||
concept = get_concept()
|
||||
sheerka = Sheerka()
|
||||
sheerka.initialize(root_folder)
|
||||
res = sheerka.add_concept(ExecutionContext("xxx"), concept)
|
||||
res = sheerka.add_concept(ExecutionContext(sheerka, "xxx"), concept)
|
||||
concept_found = res.value
|
||||
|
||||
assert res.status
|
||||
@@ -93,6 +82,48 @@ def test_i_can_add_a_concept():
|
||||
assert concept_found.key == "__var__0 + __var__1"
|
||||
assert concept_found.id == "1001"
|
||||
|
||||
# def test_i_cannot_add_the_same_concept_twice():
|
||||
# concept1 = DefConceptNode(name="concept")
|
||||
# sheerka = Sheerka
|
||||
assert path.exists(sheerka.sdp.get_obj_path(SheerkaDataProvider.ObjectsFolder,
|
||||
"4f249487410db35d8bcbcf4521acb3dd8354978804cd99bbc4de17a323b2f237"))
|
||||
|
||||
|
||||
@pytest.mark.parametrize("text, expected", [
|
||||
("1 + 1", 2),
|
||||
("sheerka.test()", 'I have access to Sheerka !')
|
||||
])
|
||||
def test_i_can_eval_simple_python_expressions(text, expected):
|
||||
sheerka = Sheerka(debug=True)
|
||||
sheerka.initialize(root_folder)
|
||||
|
||||
res = sheerka.eval(text)
|
||||
|
||||
assert len(res) == 1
|
||||
assert res[0].status
|
||||
assert res[0].value.body == expected
|
||||
assert sheerka.isinstance(res[0].value, ReturnValueConcept())
|
||||
|
||||
|
||||
def test_i_cannot_add_the_same_concept_twice():
|
||||
"""
|
||||
Checks that duplicated concepts are managed by sheerka, not by sheerka.sdp
|
||||
:return:
|
||||
"""
|
||||
pass
|
||||
|
||||
|
||||
def test_i_can_get_a_concept():
|
||||
"""
|
||||
Checks that a concept can be found its name
|
||||
even when there are variables in the name (ex 'hello + a' or 'a + b' )
|
||||
:return:
|
||||
"""
|
||||
pass
|
||||
|
||||
|
||||
def test_i_can_instanciate_a_concept():
|
||||
"""
|
||||
Test the new() functionnality
|
||||
make sure that some Concept are singleton (ex Sheerka, True, False)
|
||||
but some other need a new instance everytime
|
||||
:return:
|
||||
"""
|
||||
pass
|
||||
|
||||
Reference in New Issue
Block a user