Exemplo n.º 1
0
def test_FencedCodeBlockReader():
    text = ("Lorem ipsum dolor sit amet, \n"
            "   consectetur adipiscing elit, \n"
            "    sed do eiusmod tempor incididunt \n"
            "    ```\n"
            "        ut labore et dolore magna aliqua.\n"
            "   ```\n"
            "Ut enim ad minim veniam, quis nostrud")

    reader = LineReader(text.splitlines(True), source='dummy.md')
    codeblock_reader = FencedCodeBlockReader(reader, 0, '```')
    assert codeblock_reader.readline() == "Lorem ipsum dolor sit amet, \n"
    assert codeblock_reader.readline() == "   consectetur adipiscing elit, \n"
    assert codeblock_reader.readline(
    ) == "    sed do eiusmod tempor incididunt \n"
    assert codeblock_reader.readline() == "    ```\n"
    assert codeblock_reader.readline(
    ) == "        ut labore et dolore magna aliqua.\n"
    assert codeblock_reader.eof()

    reader = LineReader(text.splitlines(True), source='dummy.md')
    codeblock_reader = FencedCodeBlockReader(reader, 3, '```')
    assert codeblock_reader.readline() == "Lorem ipsum dolor sit amet, \n"
    assert codeblock_reader.readline() == "consectetur adipiscing elit, \n"
    assert codeblock_reader.readline(
    ) == " sed do eiusmod tempor incididunt \n"
    assert codeblock_reader.readline() == " ```\n"
    assert codeblock_reader.readline(
    ) == "     ut labore et dolore magna aliqua.\n"
    assert codeblock_reader.eof()
Exemplo n.º 2
0
def test_ListItemReader():
    text = ("- Lorem ipsum dolor sit amet, \n"
            "- consectetur adipiscing elit, \n"
            "\n"
            "  sed do eiusmod tempor incididunt \n"
            "ut labore et dolore magna aliqua.")
    reader = LineReader(text.splitlines(True))
    list_reader = ListItemReader(reader, '-', BlockProcessor(None))
    assert list_reader.readline() == "Lorem ipsum dolor sit amet, \n"

    # reached next item
    try:
        list_reader.readline()
        assert False
    except IOError:
        pass

    list_reader = ListItemReader(reader, '-', BlockProcessor(None))
    assert list_reader.readline() == "consectetur adipiscing elit, \n"
    assert list_reader.readline() == "\n"
    assert list_reader.readline() == "sed do eiusmod tempor incididunt \n"

    # reached the end of list
    try:
        list_reader.readline()
        assert False
    except IOError:
        pass

    # can read the next line with laziness
    assert list_reader.readline(
        lazy=True) == "ut labore et dolore magna aliqua."
Exemplo n.º 3
0
def test_LazyLineReader():
    reader = LineReader(quoted_text.splitlines(True), source='dummy.md')
    lazy_reader = LazyLineReader(BlockQuoteReader(reader))
    assert lazy_reader.eof() is False
    assert lazy_reader.get_source_and_line() == ('dummy.md', 0)

    # read first line
    assert lazy_reader.readline() == "Lorem ipsum dolor sit amet, \n"
    assert lazy_reader.current_line == "Lorem ipsum dolor sit amet, \n"
    assert lazy_reader.fetch() == "Lorem ipsum dolor sit amet, \n"
    assert lazy_reader.get_source_and_line() == ('dummy.md', 1)

    # read second line
    assert lazy_reader.readline() == " consectetur adipiscing elit, \n"

    # empty line causes IOError
    try:
        lazy_reader.readline()
        assert False
    except IOError:
        pass

    assert reader.readline() == '\n'
    assert reader.readline() == "sed do eiusmod tempor incididunt \n"
    assert reader.readline() == "ut labore et dolore magna aliqua."
Exemplo n.º 4
0
def test_WalledBlockReader():
    text = ("===wall\n"
            "Lorem ipsum dolor sit amet, \n"
            "consectetur adipiscing elit, \n"
            "\n"
            "=====nested_wall\n"
            "    sed do eiusmod tempor incididunt \n"
            "    ut labore et dolore magna aliqua.\n"
            "===\n"
            "\n"
            "===\n"
            "Ut enim ad minim veniam, quis nostrud")

    reader = LineReader(text.splitlines(True), source='dummy.md')
    assert reader.readline() == "===wall\n"

    walled_block_reader = WalledBlockReader(reader)
    assert walled_block_reader.eof() is False
    assert walled_block_reader.get_source_and_line() == ('dummy.md', 1)

    # read first line
    assert walled_block_reader.readline() == "Lorem ipsum dolor sit amet, \n"
    assert walled_block_reader.current_line == "Lorem ipsum dolor sit amet, \n"
    assert walled_block_reader.fetch() == "Lorem ipsum dolor sit amet, \n"
    assert walled_block_reader.get_source_and_line() == ('dummy.md', 2)

    # read consequence lines
    assert walled_block_reader.readline() == "consectetur adipiscing elit, \n"
    assert walled_block_reader.readline() == "\n"
    assert walled_block_reader.readline() == "=====nested_wall\n"

    # nested WalledBlockReader
    nested_wbreader = WalledBlockReader(walled_block_reader)
    assert nested_wbreader.readline(
    ) == "    sed do eiusmod tempor incididunt \n"
    assert nested_wbreader.readline(
    ) == "    ut labore et dolore magna aliqua.\n"

    # reach the end of the nested block
    assert nested_wbreader.eof() is True
    try:
        nested_wbreader.readline()
        assert False
    except IOError:
        pass

    # read consequence lines by parent reader
    nested_wbreader.consume_endmarker()
    assert walled_block_reader.readline() == "\n"

    # reach the end of the parent block
    assert walled_block_reader.eof() is True
    try:
        walled_block_reader.readline()
        assert False
    except IOError:
        pass

    walled_block_reader.consume_endmarker()
    assert reader.readline() == "Ut enim ad minim veniam, quis nostrud"
Exemplo n.º 5
0
def test_nested_line_readers():
    text = ("> 1. > Blockquote\n" "continued here.\n")
    reader = LineReader(text.splitlines(True))
    reader = BlockQuoteReader(reader)
    reader = ListItemReader(reader, r'1\.', BlockProcessor(None))
    reader = BlockQuoteReader(reader)
    reader = LazyLineReader(reader)
    assert reader.readline() == 'Blockquote\n'
    assert reader.eof() is False
    assert reader.next_line == 'continued here.\n'
    assert reader.readline() == 'continued here.\n'
Exemplo n.º 6
0
def test_IndentedCodeBlockReader():
    text = ("    Lorem ipsum dolor sit amet, \n"
            "       consectetur adipiscing elit, \n"
            "\n"
            "  sed do eiusmod tempor incididunt \n")

    reader = LineReader(text.splitlines(True), source='dummy.md')
    codeblock_reader = IndentedCodeBlockReader(reader)
    assert codeblock_reader.readline() == "Lorem ipsum dolor sit amet, \n"
    assert codeblock_reader.readline() == "   consectetur adipiscing elit, \n"
    assert codeblock_reader.readline() == "\n"
    assert codeblock_reader.eof()
Exemplo n.º 7
0
def test_LineReader():
    reader = LineReader(text.splitlines(), source='dummy.md')
    assert reader.eof() is False
    assert reader.get_source_and_line() == ('dummy.md', 0)

    # read first line
    assert reader.readline() == "Lorem ipsum dolor sit amet, "
    assert reader.current_line == "Lorem ipsum dolor sit amet, "
    assert reader.fetch() == "Lorem ipsum dolor sit amet, "
    assert reader.fetch(1) == "consectetur adipiscing elit, "
    assert reader.next_line == "consectetur adipiscing elit, "
    assert reader.fetch(2) == ""
    assert reader.get_source_and_line() == ('dummy.md', 1)

    # read second line
    assert reader.readline() == "consectetur adipiscing elit, "
    assert reader.current_line == "consectetur adipiscing elit, "
    assert reader.fetch() == "consectetur adipiscing elit, "
    assert reader.fetch(1) == ""
    assert reader.get_source_and_line() == ('dummy.md', 2)

    # rollback a line
    reader.step(-1)
    assert reader.current_line == "Lorem ipsum dolor sit amet, "
    assert reader.get_source_and_line() == ('dummy.md', 1)

    # step a line again
    reader.step()
    assert reader.current_line == "consectetur adipiscing elit, "

    # read until the end
    assert reader.readline() == ""
    assert reader.readline() == "    sed do eiusmod tempor incididunt "
    assert reader.readline() == "    ut labore et dolore magna aliqua."
    assert reader.readline() == ""
    assert reader.readline() == "Ut enim ad minim veniam, quis nostrud"
    assert reader.eof() is True

    try:
        assert reader.readline()
        assert False, "reader does not raise IOError on EOF"
    except IOError:
        pass
Exemplo n.º 8
0
def test_BlockQuoteReader():
    reader = LineReader(quoted_text.splitlines(True), source='dummy.md')
    quoted_reader = BlockQuoteReader(reader)
    assert quoted_reader.eof() is False
    assert quoted_reader.get_source_and_line() == ('dummy.md', 0)

    # read first line
    assert quoted_reader.readline() == "Lorem ipsum dolor sit amet, \n"
    assert quoted_reader.current_line == "Lorem ipsum dolor sit amet, \n"
    assert quoted_reader.fetch() == "Lorem ipsum dolor sit amet, \n"
    assert quoted_reader.get_source_and_line() == ('dummy.md', 1)

    # laziness: off
    try:
        quoted_reader.readline()
        assert False
    except IOError:
        pass

    # lazyness allows texts hanging on quoted block
    assert quoted_reader.readline(
        lazy=True) == " consectetur adipiscing elit, \n"

    # empty line causes IOError
    try:
        quoted_reader.readline()
        assert False
    except IOError:
        pass

    # empty line causes IOError even if lazy
    try:
        quoted_reader.readline(lazy=True)
        assert False
    except IOError:
        pass

    assert reader.readline() == '\n'
    assert reader.readline() == "sed do eiusmod tempor incididunt \n"
    assert reader.readline() == "ut labore et dolore magna aliqua."
Exemplo n.º 9
0
 def parse(self, inputtext: str, document: nodes.document) -> None:
     """Parses a text and build document."""
     document.settings.inline_processors = self.get_inline_processors()
     reader = LineReader(inputtext.splitlines(True), source=document['source'])
     block_parser = self.create_block_parser()
     block_parser.parse(reader, document)