Files
Sheerka/tests/evaluators/test_RecognizeDefConcept.py

52 lines
2.1 KiB
Python

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 == []