Added DefaultParser

This commit is contained in:
2019-10-29 18:39:51 +01:00
parent 101319b8b6
commit 8107e149b9
18 changed files with 1581 additions and 376 deletions
+52 -15
View File
@@ -1,12 +1,17 @@
import ast
import pytest
import os
from os import path
import shutil
from core.concept import Concept
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)
@@ -25,8 +30,6 @@ def init_test():
def test_root_folder_is_created_after_initialization():
root_folder = "init_folder"
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"))
@@ -34,22 +37,56 @@ def test_root_folder_is_created_after_initialization():
def test_lists_of_concepts_is_initialized():
root_folder = "init_folder"
Sheerka().initialize(root_folder)
assert len(Sheerka().concepts) > 1
def test_null_concept_are_equals():
concept1 = Concept("test1")
concept2 = Concept("test2")
concept3 = Concept("test3")
# 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)
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)
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()
assert Sheerka.concept_equals(None, None)
assert Sheerka.concept_equals(concept1, concept1)
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