93 lines
2.7 KiB
Python
93 lines
2.7 KiB
Python
import ast
|
|
|
|
import pytest
|
|
import os
|
|
from os import path
|
|
import shutil
|
|
|
|
from core.concept import Concept, ConceptParts
|
|
from core.sheerka import Sheerka
|
|
from parsers.DefaultParser import DefConceptNode, DefaultParser
|
|
from parsers.PythonParser import PythonParser
|
|
|
|
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 test_root_folder_is_created_after_initialization():
|
|
return_value = Sheerka().initialize(root_folder)
|
|
assert return_value.status, "initialisation should be successful"
|
|
assert Sheerka().concept_equals(return_value.value, Sheerka().get_concept("success"))
|
|
assert os.path.exists(root_folder), "init folder should be created"
|
|
|
|
|
|
def test_lists_of_concepts_is_initialized():
|
|
Sheerka().initialize(root_folder)
|
|
assert len(Sheerka().concepts) > 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
|
|
where isinstance(a, int) and isinstance(b, int)
|
|
pre isinstance(a, int) and isinstance(b, int)
|
|
post isinstance(res, int)
|
|
as:
|
|
def func(x,y):
|
|
return x+y
|
|
func(a,b)
|
|
"""
|
|
parser = DefaultParser(text, PythonParser)
|
|
return parser.parse()
|
|
|
|
|
|
def test_i_can_add_a_concept():
|
|
concept = get_concept()
|
|
sheerka = Sheerka()
|
|
sheerka.initialize(root_folder)
|
|
res = sheerka.add_concept(concept)
|
|
|
|
assert res.status
|
|
assert res.value == Concept(
|
|
name="a + b",
|
|
where="isinstance(a, int) and isinstance(b, int)",
|
|
pre="isinstance(a, int) and isinstance(b, int)",
|
|
post="isinstance(res, int)",
|
|
body="def func(x,y):\n return x+y\nfunc(a,b)")
|
|
assert isinstance(res.value.codes[ConceptParts.WHERE], ast.Expression)
|
|
assert isinstance(res.value.codes[ConceptParts.PRE], ast.Expression)
|
|
assert isinstance(res.value.codes[ConceptParts.POST], ast.Expression)
|
|
assert isinstance(res.value.codes[ConceptParts.BODY], ast.Module)
|
|
|
|
# def test_i_cannot_add_the_same_concept_twice():
|
|
# concept1 = DefConceptNode(name="concept")
|
|
# sheerka = Sheerka
|