Improved PythonEvaluator when dealing with concept class
This commit is contained in:
@@ -4,6 +4,7 @@ import pytest
|
||||
from core.builtin_concepts import BuiltinConcepts, ReturnValueConcept, UserInputConcept
|
||||
from core.concept import Concept, PROPERTIES_TO_SERIALIZE, ConceptParts
|
||||
from core.sheerka.Sheerka import Sheerka, BASE_NODE_PARSER_CLASS
|
||||
from core.tokenizer import Token, TokenKind, Tokenizer
|
||||
|
||||
from tests.TestUsingFileBasedSheerka import TestUsingFileBasedSheerka
|
||||
from tests.TestUsingMemoryBasedSheerka import TestUsingMemoryBasedSheerka
|
||||
@@ -274,6 +275,55 @@ class TestSheerkaUsingMemoryBasedSheerka(TestUsingMemoryBasedSheerka):
|
||||
sheerka = self.get_sheerka()
|
||||
assert not sheerka.is_success(sheerka.new(BuiltinConcepts.TOO_MANY_SUCCESS))
|
||||
|
||||
@pytest.mark.parametrize("concept, expected", [
|
||||
(None, None),
|
||||
("foo", ["foo", "foo2"]),
|
||||
("bar", "bar"),
|
||||
("1001", "foo"), # by id take precedence over by name
|
||||
("plus", "plus"),
|
||||
("a mult b", "mult"),
|
||||
("unknown", None),
|
||||
|
||||
# by tuple
|
||||
((None, None), None),
|
||||
(("foo", None), ["foo", "foo2"]),
|
||||
(("foo", "1002"), "foo2"),
|
||||
((None, "1001"), "foo"),
|
||||
(("plus", None), "plus"),
|
||||
(("1001", None), "1001"),
|
||||
(("unknown", None), None),
|
||||
((None, "unknown"), None),
|
||||
#
|
||||
# by token
|
||||
(Token(TokenKind.CONCEPT, (None, None), 0, 0, 0), None),
|
||||
(Token(TokenKind.CONCEPT, ("foo", None), 0, 0, 0), ["foo", "foo2"]),
|
||||
|
||||
])
|
||||
def test_i_can_resolve_concept(self, concept, expected):
|
||||
sheerka, context, *concepts = self.init_concepts(
|
||||
"foo",
|
||||
Concept("foo", body="another one"),
|
||||
"bar",
|
||||
self.def_concept("plus", "a plus b", ["a", "b"]),
|
||||
Concept("a mult b").def_var("a").def_var("b"),
|
||||
Concept("1001"),
|
||||
)
|
||||
|
||||
cmap = {k: concepts[i] for i, k in enumerate(["foo", "foo2", "bar", "plus", "mult", "1001"])}
|
||||
cmap[None] = None
|
||||
|
||||
if isinstance(expected, list):
|
||||
assert sheerka.resolve(concept) == [cmap[e] for e in expected]
|
||||
else:
|
||||
assert sheerka.resolve(concept) == cmap[expected]
|
||||
|
||||
def test_i_can_resolve_when_searching_by_definition(self):
|
||||
sheerka, context, plus = self.init_concepts(
|
||||
self.def_concept("plus", "a plus b", ["a", "b"]),
|
||||
create_new=True
|
||||
)
|
||||
|
||||
assert sheerka.resolve("a plus b") == plus
|
||||
|
||||
class TestSheerkaUsingFileBasedSheerka(TestUsingFileBasedSheerka):
|
||||
|
||||
|
||||
Reference in New Issue
Block a user