diff --git a/src/core/sheerka/Sheerka.py b/src/core/sheerka/Sheerka.py index 8a08851..2ac6fa7 100644 --- a/src/core/sheerka/Sheerka.py +++ b/src/core/sheerka/Sheerka.py @@ -799,9 +799,6 @@ class Sheerka(Concept): :return: """ - if isinstance(a, BuiltinConcepts): # common KSI error ;-) - raise SyntaxError("Remember that the first parameter of isinstance MUST be a concept") - if not isinstance(a, Concept): return False diff --git a/src/core/sheerka/services/SheerkaSetsManager.py b/src/core/sheerka/services/SheerkaSetsManager.py index 17faa49..25e02fc 100644 --- a/src/core/sheerka/services/SheerkaSetsManager.py +++ b/src/core/sheerka/services/SheerkaSetsManager.py @@ -150,12 +150,7 @@ class SheerkaSetsManager(BaseService): :return: """ - if isinstance(a, BuiltinConcepts): # common KSI error ;-) - raise SyntaxError("Remember that the first parameter of isinstance MUST be a concept") - ensure_concept(a, b) - # if not (isinstance(a, Concept) and isinstance(b, Concept)): - # return False # TODO, first check the 'isa' property of a if not (a.id and b.id): diff --git a/src/core/utils.py b/src/core/utils.py index 0df61bb..01b496c 100644 --- a/src/core/utils.py +++ b/src/core/utils.py @@ -331,7 +331,10 @@ def unstr_concept(concept_repr): :param concept_repr: :return: """ - if not (concept_repr and isinstance(concept_repr, str) and concept_repr.startswith("c:")): + if not (concept_repr and + isinstance(concept_repr, str) and + concept_repr.startswith("c:") and + concept_repr.endswith(":")): return None, None i = 2 diff --git a/tests/core/test_sheerka.py b/tests/core/test_sheerka.py index 041135b..abd882f 100644 --- a/tests/core/test_sheerka.py +++ b/tests/core/test_sheerka.py @@ -4,7 +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 core.tokenizer import Token, TokenKind from tests.TestUsingFileBasedSheerka import TestUsingFileBasedSheerka from tests.TestUsingMemoryBasedSheerka import TestUsingMemoryBasedSheerka @@ -276,30 +276,35 @@ class TestSheerkaUsingMemoryBasedSheerka(TestUsingMemoryBasedSheerka): assert not sheerka.is_success(sheerka.new(BuiltinConcepts.TOO_MANY_SUCCESS)) @pytest.mark.parametrize("concept, expected", [ - (None, None), + # by name ("foo", ["foo", "foo2"]), ("bar", "bar"), ("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"]), # by concept token str ("c:foo:", ["foo", "foo2"]), + + # I cannot resolve + (None, None), + ("unknown", None), + ((None, None), None), + (("unknown", None), None), + ((None, "unknown"), None), + (Token(TokenKind.CONCEPT, (None, None), 0, 0, 0), None), ("c:unknown:", None), + ("c:foo:.id", None), + ("c:foo: + 1", None), ]) def test_i_can_resolve_concept(self, concept, expected): @@ -315,10 +320,8 @@ class TestSheerkaUsingMemoryBasedSheerka(TestUsingMemoryBasedSheerka): 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] + real_expected = [cmap[e] for e in expected] if isinstance(expected, list) else cmap[expected] + assert sheerka.resolve(concept) == real_expected def test_i_can_resolve_when_searching_by_definition(self): sheerka, context, plus = self.init_concepts( @@ -328,6 +331,7 @@ class TestSheerkaUsingMemoryBasedSheerka(TestUsingMemoryBasedSheerka): assert sheerka.resolve("a plus b") == plus + class TestSheerkaUsingFileBasedSheerka(TestUsingFileBasedSheerka): def test_root_folder_is_created_after_initialization(self): diff --git a/tests/core/test_utils.py b/tests/core/test_utils.py index 632b139..875846f 100644 --- a/tests/core/test_utils.py +++ b/tests/core/test_utils.py @@ -158,6 +158,7 @@ def test_i_can_escape(): ("c:key|id:", "key", "id"), ("c:|id:", None, "id"), ("c:key|:", "key", None), + ("c:key|id:x", None, None), ]) def test_i_can_unstr_concept(text, expected_key, expected_id): k, i = core.utils.unstr_concept(text)