def test_core_parse(): parser = Parser() a = A() parser.register(a.pattern_d, a.render_digit) source = "123456789" assert parser.parse(source) == source
def test_split(): a = Renderer_A() parser = Parser() parser.register(a.pattern_ab, a.render_ab) parser.register(a.pattern_cd, a.render_cd) assert len(parser.patterns) == 2 assert len(parser.renders) == 2 assert len(parser.cell_classes) == 2 keys = list(parser.patterns.keys()) assert keys == ["renderer_a__ab", "renderer_a__cd"] source = "a ab ba cd dc a ab a ab a ab" splitter = parser.split(source) cell = next(splitter) assert repr(cell) == "Cell(source='a ', match=None, output='')" cell = next(splitter) assert cell.match is not None assert list(cell.render(splitter, parser)) == ["ba"] cell = next(splitter) cell = next(splitter) assert cell.match is not None assert cell.parse(splitter, parser) == "dc" assert splitter.send('a ab') is None cell = next(splitter) assert repr(cell) == "Cell(source='a ', match=None, output='')" cell = next(splitter) assert cell.match is not None assert list(cell.render(splitter, parser)) == ["ba"]
def test_core_parse_with_decorate(): parser = Parser() a = B() parser.register(a.pattern_a, a.render_a) parser.register(a.pattern_b, a.render_b) source = "a12aa345" assert parser.parse(source) == "{B}<12>[{B}<345>]"
def test_core_parse_complex(): parser = Parser() a = A() parser.register(a.pattern_d, a.render_digit) parser.register(a.pattern_w, a.render_word) source = "1a b2b abb 3bbacb5" assert parser.parse(source) == "1a [2] ba[ b]3[[a]][4][5]"
def configure_parser(self, parser: Parser) -> Parser: for render_name, pattern in self.patterns.items(): render = self.renders[render_name] parser.register(pattern, render, render_name) return parser