Added first version of DebugManager. Implemented draft of the rule engine

This commit is contained in:
2020-11-20 13:41:45 +01:00
parent cd066881b4
commit 315f8ea09b
156 changed files with 8388 additions and 2852 deletions
+52 -6
View File
@@ -2,10 +2,10 @@ import ast
import core.utils
import pytest
from core.builtin_concepts import ParserResultConcept, NotForMeConcept
from core.builtin_concepts import ParserResultConcept, NotForMeConcept, BuiltinConcepts
from core.sheerka.services.SheerkaExecute import ParserInput
from core.tokenizer import LexerError
from parsers.PythonParser import PythonNode, PythonParser, PythonErrorNode
from core.tokenizer import LexerError, TokenKind
from parsers.PythonParser import PythonNode, PythonParser, PythonErrorNode, ConceptDetected
from tests.TestUsingMemoryBasedSheerka import TestUsingMemoryBasedSheerka
@@ -70,6 +70,52 @@ class TestPythonParser(TestUsingMemoryBasedSheerka):
assert res.value.value == PythonNode(
"__C__KEY_name__ID_id__C__ + 1",
ast.parse(encoded + "+1", mode="eval"))
assert res.value.value.concepts == {
encoded: ("name", "id")
}
assert len(res.value.value.objects) == 1
assert res.value.value.objects[encoded].type == TokenKind.CONCEPT
assert res.value.value.objects[encoded].value == ("name", "id")
def test_i_can_parse_a_rule(self):
text = "r:name|id: + 1"
parser = PythonParser()
res = parser.parse(self.get_context(), ParserInput(text))
encoded = core.utils.encode_concept(("name", "id"), "R")
assert res
assert res.value.source == "r:name|id: + 1"
assert res.value.value == PythonNode(
"__R__KEY_name__ID_id__R__ + 1",
ast.parse(encoded + "+1", mode="eval"))
assert len(res.value.value.objects) == 1
assert res.value.value.objects[encoded].type == TokenKind.RULE
assert res.value.value.objects[encoded].value == ("name", "id")
def test_i_can_parse_a_rule_2(self):
text = "r:name|id:.name"
parser = PythonParser()
res = parser.parse(self.get_context(), ParserInput(text))
encoded = core.utils.encode_concept(("name", "id"), "R")
assert res
assert res.value.source == "r:name|id:.name"
assert res.value.value == PythonNode(
"__R__KEY_name__ID_id__R__.name",
ast.parse(encoded + ".name", mode="eval"))
assert len(res.value.value.objects) == 1
assert res.value.value.objects[encoded].type == TokenKind.RULE
assert res.value.value.objects[encoded].value == ("name", "id")
@pytest.mark.parametrize("text, expected_id", [
("foo", "foo"),
("c:foo:", "__C__KEY_foo__ID_00None00__C__")
])
def test_i_cannot_parse_simple_concepts(self, text, expected_id):
sheerka, context, foo = self.init_concepts("foo")
parser = PythonParser()
res = parser.parse(context, ParserInput(text))
assert not res.status
assert sheerka.isinstance(res.value, BuiltinConcepts.NOT_FOR_ME)
assert res.value.reason == [ConceptDetected(expected_id)]