import pytest from base import BaseParserTest from conftest import NewOntology from core.BuiltinConcepts import BuiltinConcepts from evaluators.RecognizeSimpleConcept import RecognizeSimpleConcept from evaluators.base_evaluator import NotForMe from helpers import _rv, _rvf, get_concepts from parsers.ParserInput import ParserInput class TestRecognizeSimpleConcept(BaseParserTest): @pytest.fixture() def evaluator(self, sheerka): return sheerka.evaluators[RecognizeSimpleConcept.NAME] def test_i_can_match(self, sheerka, context, evaluator): ret_val = _rv(sheerka.newn(BuiltinConcepts.PARSER_INPUT, pi=ParserInput("some text"))) assert evaluator.matches(context, ret_val).status is True ret_val = _rv(sheerka.newn(BuiltinConcepts.UNKNOWN_CONCEPT)) # it responds to USER_INPUT only assert evaluator.matches(context, ret_val).status is False ret_val = _rvf(sheerka.newn(BuiltinConcepts.PARSER_INPUT, pi=ParserInput("some text"))) # status is false assert evaluator.matches(context, ret_val).status is False def test_i_can_recognize_a_concept(self, context, evaluator): with NewOntology(context, "test_i_can_recognize_a_def_concept"): concept, = get_concepts(context, "I am a new concept", use_sheerka=True) ret_val_input = self.get_parser_input(context, "I am a new concept") res = evaluator.eval(context, None, ret_val_input) assert len(res.new) == 1 assert res.new[0].status assert context.sheerka.isinstance(res.new[0].value, concept) assert res.eaten == [ret_val_input] def test_i_do_not_eat_when_not_for_me(self, context, evaluator): with NewOntology(context, "test_i_can_recognize_a_def_concept"): ret_val_input = self.get_parser_input(context, "unknown concept") res = evaluator.eval(context, None, ret_val_input) assert len(res.new) == 1 assert not res.new[0].status assert isinstance(res.new[0].value, NotForMe) assert len(res.eaten) == 0