예제 #1
0
def test_parser_parser_unexpected_input(capsys, patch, magic, parser):
    patch.init(StoryError)
    patch.object(StoryError, 'message')
    patch.many(Parser, ['lark', 'transformer'])
    Parser.lark().parse.side_effect = UnexpectedInput(magic(), 0, 0, 0)
    with raises(SystemExit):
        parser.parse('source', debug=False)
    out, err = capsys.readouterr()
    assert out == '{}\n'.format(StoryError.message())
def unexpected_input_error(error: UnexpectedInput, line: str,
                           line_number: int):
    description = "Invalid line: "
    context = error.get_context(line, 6).split("\n", 1)
    return {
        "description": (description + context[0] + "\n" +
                        len(description) * " " + context[1]),
        "lineNumber":
        line_number + 1,
    }
예제 #3
0
def test_story_parse_debug(patch, story, parser):
    story.parse(parser=parser)
    parser.parse.assert_called_with(story.story)


def test_story_parse_lower(patch, story, parser):
    patch.object(Lowering, 'process')
    story.parse(parser=parser, lower=True)
    parser.parse.assert_called_with(story.story)
    Lowering.process.assert_called_with(Parser.parse())
    assert story.tree == Lowering.process(Lowering.process())


@mark.parametrize('error', [
    UnexpectedToken('token', 'expected'),
    UnexpectedInput('token', 'expected'),
    StorySyntaxError('test'),
])
def test_story_parse_error(patch, story, parser, error):
    """
    Ensures Story.parse uses Story.error for UnexpectedToken errors.
    """
    parser.parse.side_effect = error
    patch.object(Story, 'error')
    with raises(Exception):
        story.parse(parser=parser)
    Story.error.assert_called_with(error)


def test_story_modules(magic, story):
    import_tree = magic()
예제 #4
0
def test_parser_parser_unexpected_input_debug(patch, magic, parser):
    patch.many(Parser, ['lark', 'transformer'])
    Parser.lark().parse.side_effect = UnexpectedInput(magic(), 0, 0, 0)
    with raises(UnexpectedInput):
        parser.parse('source', debug=True)