Added first version of DebugManager. Implemented draft of the rule engine
This commit is contained in:
@@ -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)]
|
||||
|
||||
Reference in New Issue
Block a user