Files
Sheerka-Old/tests/BaseTest.py
T

87 lines
2.8 KiB
Python

import ast
from core.builtin_concepts import ReturnValueConcept, ParserResultConcept
from core.concept import Concept
from core.sheerka.ExecutionContext import ExecutionContext
from parsers.BnfParser import BnfParser
from sdp.sheerkaDataProvider import Event
class BaseTest:
def get_sheerka(self, **kwargs):
pass
def get_context(self, sheerka=None):
return ExecutionContext("test", Event(), sheerka or self.get_sheerka())
def get_default_concept(self):
concept = 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)",
desc="specific description")
concept.def_prop("a", "value1")
concept.def_prop("b", "value2")
return concept
def dump_ast(self, node):
dump = ast.dump(node)
for to_remove in [", ctx=Load()", ", kind=None", ", type_ignores=[]"]:
dump = dump.replace(to_remove, "")
return dump
def init_concepts(self, *concepts, **kwargs):
sheerka = self.get_sheerka(**kwargs)
context = self.get_context(sheerka)
create_new = kwargs.get("create_new", False)
result = []
for c in concepts:
if isinstance(c, str):
c = Concept(c)
if c.metadata.definition:
bnf_parser = BnfParser()
res = bnf_parser.parse(context, c.metadata.definition)
if res.status:
c.bnf = res.value.value
sheerka.create_new_concept(context, c)
elif create_new:
sheerka.create_new_concept(context, c)
else:
c.init_key()
sheerka.set_id_if_needed(c, False)
sheerka.add_in_cache(c)
result.append(c)
return sheerka, context, *result
@staticmethod
def retval(obj, who="who", status=True):
"""ret_val"""
return ReturnValueConcept.ret(who, status, obj)
@staticmethod
def tretval(sheerka, obj, who="who"):
"""True ret_val + add concept in cache"""
if isinstance(obj, Concept):
obj.init_key()
if obj.key not in sheerka.cache_by_key:
sheerka.cache_by_key[obj.key] = obj
return sheerka.ret(who, True, obj)
@staticmethod
def pretval(concept, source=None, parser="parsers.name"):
"""ParserResult ret_val (p stands for ParserResult)"""
return ReturnValueConcept(
"some_name",
True,
ParserResultConcept(parser=parser,
source=source or concept.name,
value=concept,
try_parsed=concept))