Working on #48 : Working
This commit is contained in:
@@ -7,11 +7,11 @@ from core.concept import Concept, DoNotResolve
|
||||
from core.rule import Rule
|
||||
from core.sheerka.services.SheerkaExecute import ParserInput
|
||||
from core.tokenizer import TokenKind
|
||||
from parsers.BaseExpressionParser import TrueifyVisitor, IsAQuestionVisitor, AndNode, LeftPartNotFoundError, \
|
||||
ParenthesisMismatchError
|
||||
from parsers.BaseParser import UnexpectedEofParsingError, UnexpectedTokenParsingError
|
||||
from parsers.LogicalOperatorParser import LogicalOperatorParser
|
||||
from parsers.PythonParser import PythonNode
|
||||
from parsers.BaseExpressionParser import TrueifyVisitor, IsAQuestionVisitor, AndNode, LeftPartNotFoundError, \
|
||||
ParenthesisMismatchError
|
||||
from sheerkarete.network import ReteNetwork
|
||||
from tests.TestUsingMemoryBasedSheerka import TestUsingMemoryBasedSheerka
|
||||
from tests.parsers.parsers_utils import compute_expected_array, resolve_test_concept, EXPR, OR, AND, NOT, \
|
||||
@@ -90,64 +90,31 @@ class TestLogicalOperatorParser(TestUsingMemoryBasedSheerka):
|
||||
assert sheerka.isinstance(res.body, BuiltinConcepts.ERROR)
|
||||
assert isinstance(res.body.body[0], UnexpectedTokenParsingError)
|
||||
|
||||
def test_i_can_detect_unbalanced_parenthesis(self):
|
||||
@pytest.mark.parametrize("expression, expected_error, parenthesis_type, index", [
|
||||
("(", BuiltinConcepts.NOT_FOR_ME, TokenKind.LPAR, 0),
|
||||
(")", BuiltinConcepts.NOT_FOR_ME, TokenKind.RPAR, 0),
|
||||
("one and two(", BuiltinConcepts.ERROR, TokenKind.LPAR, 11),
|
||||
("one (", BuiltinConcepts.NOT_FOR_ME, TokenKind.LPAR, 4),
|
||||
("one (and", BuiltinConcepts.ERROR, TokenKind.LPAR, 4),
|
||||
("one and two)", BuiltinConcepts.ERROR, TokenKind.RPAR, 11),
|
||||
("one )", BuiltinConcepts.ERROR, TokenKind.RPAR, 4),
|
||||
("one ) and", BuiltinConcepts.ERROR, TokenKind.RPAR, 4),
|
||||
])
|
||||
def test_i_can_detect_unbalanced_parenthesis(self, expression, expected_error, parenthesis_type, index):
|
||||
sheerka, context, parser = self.init_parser()
|
||||
|
||||
res = parser.parse(context, ParserInput("("))
|
||||
res = parser.parse(context, ParserInput(expression))
|
||||
assert not res.status
|
||||
assert sheerka.isinstance(res.body, BuiltinConcepts.NOT_FOR_ME)
|
||||
assert isinstance(res.body.reason[0], UnexpectedTokenParsingError)
|
||||
assert res.body.reason[0].token.type == TokenKind.EOF
|
||||
assert res.body.reason[0].expected_tokens == [TokenKind.RPAR]
|
||||
|
||||
res = parser.parse(context, ParserInput(")"))
|
||||
assert not res.status
|
||||
assert sheerka.isinstance(res.body, BuiltinConcepts.NOT_FOR_ME)
|
||||
assert isinstance(res.body.reason[0], UnexpectedTokenParsingError)
|
||||
assert res.body.reason[0].token.type == TokenKind.RPAR
|
||||
assert res.body.reason[0].expected_tokens == []
|
||||
|
||||
res = parser.parse(context, ParserInput("one and two("))
|
||||
assert not res.status
|
||||
assert sheerka.isinstance(res.body, BuiltinConcepts.ERROR)
|
||||
assert isinstance(res.body.body[0], ParenthesisMismatchError)
|
||||
assert res.body.body[0].token.type == TokenKind.LPAR
|
||||
assert res.body.body[0].token.index == 11
|
||||
|
||||
res = parser.parse(context, ParserInput("one ("))
|
||||
assert not res.status
|
||||
assert sheerka.isinstance(res.body, BuiltinConcepts.NOT_FOR_ME)
|
||||
assert isinstance(res.body.reason[0], ParenthesisMismatchError)
|
||||
assert res.body.reason[0].token.type == TokenKind.LPAR
|
||||
assert res.body.reason[0].token.index == 4
|
||||
|
||||
res = parser.parse(context, ParserInput("one (and"))
|
||||
assert not res.status
|
||||
assert sheerka.isinstance(res.body, BuiltinConcepts.ERROR)
|
||||
assert isinstance(res.body.body[0], ParenthesisMismatchError)
|
||||
assert res.body.body[0].token.type == TokenKind.LPAR
|
||||
assert res.body.body[0].token.index == 4
|
||||
|
||||
res = parser.parse(context, ParserInput("one and two)"))
|
||||
assert not res.status
|
||||
assert sheerka.isinstance(res.body, BuiltinConcepts.ERROR)
|
||||
assert isinstance(res.body.body[0], UnexpectedTokenParsingError)
|
||||
assert res.body.body[0].token.type == TokenKind.RPAR
|
||||
assert res.body.body[0].expected_tokens == []
|
||||
|
||||
res = parser.parse(context, ParserInput("one )"))
|
||||
assert not res.status
|
||||
assert sheerka.isinstance(res.body, BuiltinConcepts.ERROR)
|
||||
assert isinstance(res.body.body[0], UnexpectedTokenParsingError)
|
||||
assert res.body.body[0].token.type == TokenKind.RPAR
|
||||
assert res.body.body[0].expected_tokens == []
|
||||
|
||||
res = parser.parse(context, ParserInput("one ) and"))
|
||||
assert not res.status
|
||||
assert sheerka.isinstance(res.body, BuiltinConcepts.ERROR)
|
||||
assert isinstance(res.body.body[0], UnexpectedTokenParsingError)
|
||||
assert res.body.body[0].token.type == TokenKind.RPAR
|
||||
assert res.body.body[0].expected_tokens == []
|
||||
if expected_error == BuiltinConcepts.NOT_FOR_ME:
|
||||
assert sheerka.isinstance(res.body, BuiltinConcepts.NOT_FOR_ME)
|
||||
assert isinstance(res.body.reason[0], ParenthesisMismatchError)
|
||||
assert res.body.reason[0].token.type == parenthesis_type
|
||||
assert res.body.reason[0].token.index == index
|
||||
else:
|
||||
assert sheerka.isinstance(res.body, BuiltinConcepts.ERROR)
|
||||
assert isinstance(res.body.body[0], ParenthesisMismatchError)
|
||||
assert res.body.body[0].token.type == parenthesis_type
|
||||
assert res.body.body[0].token.index == index
|
||||
|
||||
def test_i_can_detect_empty_expression(self):
|
||||
sheerka, context, parser = self.init_parser()
|
||||
@@ -444,6 +411,7 @@ class TestLogicalOperatorParser(TestUsingMemoryBasedSheerka):
|
||||
resolved_expected = PythonNode(python_source, ast_, trimmed_source)
|
||||
assert sheerka.objvalue(current_ret) == resolved_expected
|
||||
|
||||
@pytest.mark.skip
|
||||
@pytest.mark.parametrize("expression, expected_conditions, test_obj", [
|
||||
(
|
||||
"__ret",
|
||||
|
||||
Reference in New Issue
Block a user