import pytest from base import BaseParserTest from core.BuiltinConcepts import BuiltinConcepts from core.error import ErrorContext from evaluators.RecognizeDefConcept import RecognizeDefConcept from helpers import _rv, _rvf from parsers.ConceptDefinitionParser import ConceptDefinition from parsers.ParserInput import ParserInput class TestRecognizeDefConcept(BaseParserTest): @pytest.fixture() def evaluator(self, sheerka): return sheerka.evaluators[RecognizeDefConcept.NAME] def test_i_can_match(self, sheerka, context, evaluator): ret_val = _rv(sheerka.newn(BuiltinConcepts.PARSER_INPUT, pi=ParserInput("def concept"))) assert evaluator.matches(context, ret_val).status is True ret_val = _rv(sheerka.newn(BuiltinConcepts.PARSER_INPUT, pi=ParserInput("def"))) assert evaluator.matches(context, ret_val).status is False ret_val = _rv(sheerka.newn(BuiltinConcepts.PARSER_INPUT, pi=ParserInput("other text"))) assert evaluator.matches(context, ret_val).status is False 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("def concept"))) # status is false assert evaluator.matches(context, ret_val).status is False def test_i_can_recognize_a_def_concept(self, context, evaluator): ret_val_input = self.get_parser_input(context, "def concept one as 1") res = evaluator.eval(context, None, ret_val_input) assert len(res.new) == 1 assert res.new[0].status assert isinstance(res.new[0].value, ConceptDefinition) assert res.eaten == [ret_val_input] def test_i_can_manage_when_def_concept_fails(self, context, evaluator): ret_val_input = self.get_parser_input(context, "def 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, ErrorContext) assert res.eaten == []