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, }
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()
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)