Fixed #30 : Add variable support in BNF concept definition
Fixed #31 : Add regex support in BNF Concept Fixed #33 : Do not memorize object during restore
This commit is contained in:
@@ -0,0 +1,109 @@
|
||||
from core.concept import Concept, ConceptParts, CC
|
||||
from core.sheerka.services.SheerkaExecute import ParserInput
|
||||
from parsers.BaseNodeParser import CNC
|
||||
from parsers.BnfNodeParser import BnfNodeParser
|
||||
from parsers.SyaNodeParser import SyaNodeParser
|
||||
from tests.TestUsingMemoryBasedSheerka import TestUsingMemoryBasedSheerka
|
||||
from tests.parsers.parsers_utils import get_test_obj
|
||||
|
||||
|
||||
class TestParsersUtils(TestUsingMemoryBasedSheerka):
|
||||
|
||||
def test_i_can_get_test_obj_when_CNC_from_sya(self):
|
||||
sheerka, context, one, two, plus = self.init_concepts(
|
||||
"one",
|
||||
"two",
|
||||
Concept("a plus b").def_var("a").def_var("b")
|
||||
)
|
||||
|
||||
parser = SyaNodeParser().init_from_concepts(context, [one, two, plus])
|
||||
cnode = parser.parse(context, ParserInput("one plus two")).body.body[0]
|
||||
|
||||
# compare all attributes
|
||||
cnc_res = get_test_obj(CNC(concept_key="key", start=0, end=1, source="", exclude_body=False), cnode)
|
||||
assert isinstance(cnc_res, CNC)
|
||||
assert cnc_res == CNC("__var__0 plus __var__1", 0, 4, "one plus two", False, **cnode.concept.get_compiled())
|
||||
|
||||
# I can discard start, end and source
|
||||
cnc_res = get_test_obj(CNC(concept_key="key"), cnode)
|
||||
assert isinstance(cnc_res, CNC)
|
||||
assert cnc_res == CNC("__var__0 plus __var__1", None, None, None, False, **cnode.concept.get_compiled())
|
||||
|
||||
def test_i_can_get_test_obj_when_CNC_from_bnf(self):
|
||||
sheerka, context, one, two, plus = self.init_concepts(
|
||||
"one",
|
||||
"two",
|
||||
Concept("twenties", definition="'twenty' (one | two)=unit").def_var("unit").def_var("one").def_var("two")
|
||||
)
|
||||
|
||||
parser = BnfNodeParser().init_from_concepts(context, [one, two, plus])
|
||||
cnode = parser.parse(context, ParserInput("twenty one")).body.body[0]
|
||||
|
||||
# compare all attributes
|
||||
cnc_res = get_test_obj(CNC(concept_key="key", start=0, end=1, source="", exclude_body=False), cnode)
|
||||
assert isinstance(cnc_res, CNC)
|
||||
assert cnc_res == CNC("twenties", 0, 2, "twenty one", False, **cnode.concept.get_compiled())
|
||||
|
||||
# I can exclude body
|
||||
cnc_res = get_test_obj(CNC(concept_key="key", exclude_body=True), cnode)
|
||||
expected_compiled = {k: v for k, v in cnode.concept.get_compiled().items()}
|
||||
del expected_compiled[ConceptParts.BODY]
|
||||
assert isinstance(cnc_res, CNC)
|
||||
assert cnc_res == CNC("twenties", None, None, None, False, **expected_compiled)
|
||||
|
||||
def test_i_can_get_test_obj_when_list(self):
|
||||
sheerka, context, one, two, plus = self.init_concepts(
|
||||
"one",
|
||||
"two",
|
||||
Concept("a plus b").def_var("a").def_var("b")
|
||||
)
|
||||
|
||||
parser = SyaNodeParser().init_from_concepts(context, [one, two, plus])
|
||||
cnode = parser.parse(context, ParserInput("one plus two")).body.body[0]
|
||||
|
||||
res = get_test_obj([CNC("key1"), CNC("key", 0, 1, "")], [cnode, cnode])
|
||||
|
||||
assert len(res) == 2
|
||||
assert isinstance(res[0], CNC)
|
||||
assert res[0] == CNC("__var__0 plus __var__1", None, None, None, False, **cnode.concept.get_compiled())
|
||||
assert isinstance(res[1], CNC)
|
||||
assert res[1] == CNC("__var__0 plus __var__1", 0, 4, "one plus two", False, **cnode.concept.get_compiled())
|
||||
|
||||
def test_i_can_get_test_obj_when_dict(self):
|
||||
sheerka, context, one, two, plus = self.init_concepts(
|
||||
"one",
|
||||
"two",
|
||||
Concept("a plus b").def_var("a").def_var("b")
|
||||
)
|
||||
|
||||
parser = SyaNodeParser().init_from_concepts(context, [one, two, plus])
|
||||
cnode = parser.parse(context, ParserInput("one plus two")).body.body[0]
|
||||
|
||||
res = get_test_obj({"key1": CNC("key1"), "key2": CNC("key", 0, 1, "")}, {"key1": cnode, "key2": cnode})
|
||||
assert len(res) == 2
|
||||
assert isinstance(res["key1"], CNC)
|
||||
assert res["key1"] == CNC("__var__0 plus __var__1", None, None, None, False, **cnode.concept.get_compiled())
|
||||
assert isinstance(res["key2"], CNC)
|
||||
assert res["key2"] == CNC("__var__0 plus __var__1", 0, 4, "one plus two", False, **cnode.concept.get_compiled())
|
||||
|
||||
def test_i_can_get_test_obj_when_CC(self):
|
||||
sheerka, context, one, two, plus = self.init_concepts(
|
||||
"one",
|
||||
"two",
|
||||
Concept("twenties", definition="'twenty' (one | two)=unit").def_var("unit").def_var("one").def_var("two")
|
||||
)
|
||||
|
||||
parser = BnfNodeParser().init_from_concepts(context, [one, two, plus])
|
||||
cc = parser.parse(context, ParserInput("twenty one")).body.body[0].concept
|
||||
|
||||
# compare all attributes
|
||||
cc_res = get_test_obj(CC(concept="key", source="", exclude_body=False), cc)
|
||||
assert isinstance(cc_res, CC)
|
||||
assert cc_res == CC("twenties", "twenty one", False, **cc.get_compiled())
|
||||
|
||||
# I can exclude body
|
||||
cnc_res = get_test_obj(CC(concept="key", exclude_body=True), cc)
|
||||
expected_compiled = {k: v for k, v in cc.get_compiled().items()}
|
||||
del expected_compiled[ConceptParts.BODY]
|
||||
assert isinstance(cnc_res, CC)
|
||||
assert cnc_res == CC("twenties", "twenty one", True, **expected_compiled)
|
||||
Reference in New Issue
Block a user