import ast import pytest import os from os import path import shutil from core.concept import Concept, ConceptParts from core.sheerka import Sheerka, ExecutionContext 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 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_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 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(ExecutionContext("xxx"), concept) concept_found = res.value assert res.status assert concept_found == 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(concept_found.codes[ConceptParts.WHERE], ast.Expression) assert isinstance(concept_found.codes[ConceptParts.PRE], ast.Expression) assert isinstance(concept_found.codes[ConceptParts.POST], ast.Expression) assert isinstance(concept_found.codes[ConceptParts.BODY], ast.Module) all_props = [p.name for p in concept_found.props] assert all_props == ["a", "b"] 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