Fixed #101 : Implement PLURIAL

Fixed #103 : Implement PlurialNodeParser
Fixed #104 : Implement dynamic concept
Fixed #107 : PrepareEvalxxxEvaluator: context hints are lost on a second evaluation
This commit is contained in:
2021-08-05 19:07:21 +02:00
parent c798c2c570
commit 71d1b1d1ca
31 changed files with 600 additions and 105 deletions
+76
View File
@@ -0,0 +1,76 @@
from core.builtin_concepts_ids import BuiltinConcepts
from core.global_symbols import NotFound
from tests.TestUsingMemoryBasedSheerka import TestUsingMemoryBasedSheerka
class TestSheerkaPluralManager(TestUsingMemoryBasedSheerka):
def test_i_can_set_plural(self):
sheerka, context, man, men = self.init_concepts("man", "men")
men_instance = sheerka.new("men")
res = sheerka.set_plural(context, men_instance, man)
assert res.status
assert men_instance.get_prop(BuiltinConcepts.PLURAL) == man
assert sheerka.is_plural(men_instance)
assert sheerka.is_plural(men_instance, man)
# global truth is not set
another_instance = sheerka.new("men")
assert another_instance.get_prop(BuiltinConcepts.PLURAL) is None
def test_i_can_set_plural_when_global_truth_is_set(self):
sheerka, context, man, men = self.init_concepts("man", "men", global_truth=True)
assert sheerka.known_plural(man) == NotFound
res = sheerka.set_plural(context, men, man)
assert res.status
assert sheerka.is_plural(men)
another_instance = sheerka.new("men")
assert sheerka.is_plural(another_instance)
assert sheerka.known_plural(man) == men.id
def test_i_cannot_set_plural_twice(self):
sheerka, context, man, men = self.init_concepts("man", "men")
men_instance = sheerka.new("men")
sheerka.set_plural(context, men_instance, man)
res = sheerka.set_plural(context, men_instance, man)
assert not res.status
assert sheerka.isinstance(res.body, BuiltinConcepts.PROPERTY_ALREADY_DEFINED)
assert res.body.concept == men_instance
assert res.body.property_name == BuiltinConcepts.PLURAL
assert res.body.property_value == man
def test_i_cannot_set_plural_twice_when_global_truth(self):
sheerka, context, man, men = self.init_concepts("man", "men", global_truth=True)
sheerka.set_plural(context, men, man)
another_instance = sheerka.new("men")
res = sheerka.set_plural(context, another_instance, man)
assert not res.status
assert sheerka.isinstance(res.body, BuiltinConcepts.PROPERTY_ALREADY_DEFINED)
assert res.body.concept == another_instance
assert res.body.property_name == BuiltinConcepts.PLURAL
assert res.body.property_value == man
def test_i_can_set_plural_twice_when_global_truth_is_true_the_second_time(self):
sheerka, context, man, men = self.init_concepts("man", "men")
global_truth_context = self.get_context(sheerka, global_truth=True)
men_instance = sheerka.new("men")
sheerka.set_plural(context, men_instance, man)
# set it again with global_truth = True
res = sheerka.set_plural(global_truth_context, men_instance, man)
assert res.status
assert men_instance.get_prop(BuiltinConcepts.PLURAL) == man
# and it's now true for all newly created context
assert sheerka.is_plural(sheerka.new("men"), man)