test-minirst.py
268 lines
| 5.4 KiB
| text/x-python
|
PythonLexer
/ tests / test-minirst.py
Robert Stanca
|
r28752 | from __future__ import absolute_import, print_function | ||
Robert Stanca
|
r28751 | from mercurial import ( | ||
minirst, | ||||
) | ||||
Augie Fackler
|
r37898 | from mercurial.utils import ( | ||
stringutil, | ||||
) | ||||
Martin Geisler
|
r9156 | |||
Matt Mackall
|
r15263 | def debugformat(text, form, **kwargs): | ||
Augie Fackler
|
r37899 | if form == b'html': | ||
Robert Stanca
|
r28752 | print("html format:") | ||
Matt Mackall
|
r15263 | out = minirst.format(text, style=form, **kwargs) | ||
else: | ||||
Robert Stanca
|
r28752 | print("%d column format:" % form) | ||
Matt Mackall
|
r15263 | out = minirst.format(text, width=form, **kwargs) | ||
Robert Stanca
|
r28752 | print("-" * 70) | ||
Matt Mackall
|
r15263 | if type(out) == tuple: | ||
Augie Fackler
|
r37899 | print(out[0][:-1].decode('utf8')) | ||
Robert Stanca
|
r28752 | print("-" * 70) | ||
Yuya Nishihara
|
r37961 | print(stringutil.pprint(out[1]).decode('utf8')) | ||
Martin Geisler
|
r10444 | else: | ||
Augie Fackler
|
r37899 | print(out[:-1].decode('utf8')) | ||
Robert Stanca
|
r28752 | print("-" * 70) | ||
print() | ||||
Martin Geisler
|
r9156 | |||
Matt Mackall
|
r15263 | def debugformats(title, text, **kwargs): | ||
Robert Stanca
|
r28752 | print("== %s ==" % title) | ||
Matt Mackall
|
r15263 | debugformat(text, 60, **kwargs) | ||
debugformat(text, 30, **kwargs) | ||||
Augie Fackler
|
r37899 | debugformat(text, b'html', **kwargs) | ||
Matt Mackall
|
r15263 | |||
Pulkit Goyal
|
r36722 | paragraphs = b""" | ||
Martin Geisler
|
r9156 | This is some text in the first paragraph. | ||
Martin Geisler
|
r9736 | A small indented paragraph. | ||
It is followed by some lines | ||||
containing random whitespace. | ||||
Matt Mackall
|
r10289 | \n \n \nThe third and final paragraph. | ||
Martin Geisler
|
r9156 | """ | ||
Augie Fackler
|
r37899 | debugformats('paragraphs', paragraphs) | ||
Martin Geisler
|
r9156 | |||
Pulkit Goyal
|
r36722 | definitions = b""" | ||
Martin Geisler
|
r9156 | A Term | ||
Definition. The indented | ||||
lines make up the definition. | ||||
Another Term | ||||
Another definition. The final line in the | ||||
definition determines the indentation, so | ||||
this will be indented with four spaces. | ||||
A Nested/Indented Term | ||||
Definition. | ||||
""" | ||||
Augie Fackler
|
r37899 | debugformats('definitions', definitions) | ||
Martin Geisler
|
r9156 | |||
Pulkit Goyal
|
r36722 | literals = br""" | ||
Martin Geisler
|
r9156 | The fully minimized form is the most | ||
convenient form:: | ||||
Hello | ||||
literal | ||||
world | ||||
In the partially minimized form a paragraph | ||||
simply ends with space-double-colon. :: | ||||
//////////////////////////////////////// | ||||
long un-wrapped line in a literal block | ||||
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ | ||||
:: | ||||
This literal block is started with '::', | ||||
the so-called expanded form. The paragraph | ||||
with '::' disappears in the final output. | ||||
""" | ||||
Augie Fackler
|
r37899 | debugformats('literals', literals) | ||
Martin Geisler
|
r9156 | |||
Pulkit Goyal
|
r36722 | lists = b""" | ||
Martin Geisler
|
r9156 | - This is the first list item. | ||
Second paragraph in the first list item. | ||||
- List items need not be separated | ||||
by a blank line. | ||||
- And will be rendered without | ||||
one in any case. | ||||
We can have indented lists: | ||||
- This is an indented list item | ||||
- Another indented list item:: | ||||
- A literal block in the middle | ||||
of an indented list. | ||||
(The above is not a list item since we are in the literal block.) | ||||
:: | ||||
Martin Geisler
|
r9291 | Literal block with no indentation (apart from | ||
the two spaces added to all literal blocks). | ||||
Martin Geisler
|
r9739 | |||
1. This is an enumerated list (first item). | ||||
2. Continuing with the second item. | ||||
(1) foo | ||||
(2) bar | ||||
1) Another | ||||
2) List | ||||
Martin Geisler
|
r10447 | |||
Line blocks are also a form of list: | ||||
| This is the first line. | ||||
The line continues here. | ||||
| This is the second line. | ||||
Gregory Szorc
|
r31130 | |||
Bullet lists are also detected: | ||||
* This is the first bullet | ||||
* This is the second bullet | ||||
It has 2 lines | ||||
* This is the third bullet | ||||
Martin Geisler
|
r9156 | """ | ||
Augie Fackler
|
r37899 | debugformats('lists', lists) | ||
Martin Geisler
|
r9156 | |||
Pulkit Goyal
|
r36722 | options = b""" | ||
Martin Geisler
|
r9156 | There is support for simple option lists, | ||
but only with long options: | ||||
Erik Zielke
|
r13011 | -X, --exclude filter an option with a short and long option with an argument | ||
-I, --include an option with both a short option and a long option | ||||
--all Output all. | ||||
--both Output both (this description is | ||||
quite long). | ||||
--long Output all day long. | ||||
Martin Geisler
|
r9156 | |||
Erik Zielke
|
r13011 | --par This option has two paragraphs in its description. | ||
This is the first. | ||||
Martin Geisler
|
r9156 | |||
Erik Zielke
|
r13011 | This is the second. Blank lines may be omitted between | ||
options (as above) or left in (as here). | ||||
Martin Geisler
|
r9156 | |||
The next paragraph looks like an option list, but lacks the two-space | ||||
marker after the option. It is treated as a normal paragraph: | ||||
--foo bar baz | ||||
""" | ||||
Augie Fackler
|
r37899 | debugformats('options', options) | ||
Martin Geisler
|
r9293 | |||
Pulkit Goyal
|
r36722 | fields = b""" | ||
Martin Geisler
|
r10065 | :a: First item. | ||
:ab: Second item. Indentation and wrapping | ||||
is handled automatically. | ||||
Martin Geisler
|
r9293 | |||
Martin Geisler
|
r10065 | Next list: | ||
:small: The larger key below triggers full indentation here. | ||||
:much too large: This key is big enough to get its own line. | ||||
Martin Geisler
|
r9293 | """ | ||
Augie Fackler
|
r37899 | debugformats('fields', fields) | ||
Martin Geisler
|
r10443 | |||
Pulkit Goyal
|
r36722 | containers = b""" | ||
Martin Geisler
|
r10443 | Normal output. | ||
.. container:: debug | ||||
Initial debug output. | ||||
.. container:: verbose | ||||
Verbose output. | ||||
.. container:: debug | ||||
Debug output. | ||||
""" | ||||
Augie Fackler
|
r37899 | debugformats('containers (normal)', containers) | ||
debugformats('containers (verbose)', containers, keep=[b'verbose']) | ||||
debugformats('containers (debug)', containers, keep=[b'debug']) | ||||
debugformats('containers (verbose debug)', containers, | ||||
keep=[b'verbose', b'debug']) | ||||
Martin Geisler
|
r10972 | |||
Pulkit Goyal
|
r36722 | roles = b"""Please see :hg:`add`.""" | ||
Augie Fackler
|
r37899 | debugformats('roles', roles) | ||
Martin Geisler
|
r10977 | |||
Pulkit Goyal
|
r36722 | sections = b""" | ||
Martin Geisler
|
r10984 | Title | ||
===== | ||||
Section | ||||
------- | ||||
Subsection | ||||
'''''''''' | ||||
Martin Geisler
|
r10983 | |||
Markup: ``foo`` and :hg:`help` | ||||
------------------------------ | ||||
Martin Geisler
|
r10977 | """ | ||
Augie Fackler
|
r37899 | debugformats('sections', sections) | ||
Erik Zielke
|
r12388 | |||
Pulkit Goyal
|
r36722 | admonitions = b""" | ||
Erik Zielke
|
r12388 | .. note:: | ||
Simon Heimberg
|
r19996 | |||
Erik Zielke
|
r12388 | This is a note | ||
- Bullet 1 | ||||
- Bullet 2 | ||||
.. warning:: This is a warning Second | ||||
input line of warning | ||||
.. danger:: | ||||
This is danger | ||||
""" | ||||
Augie Fackler
|
r37899 | debugformats('admonitions', admonitions) | ||
Martin Geisler
|
r12819 | |||
Pulkit Goyal
|
r36722 | comments = b""" | ||
Martin Geisler
|
r12819 | Some text. | ||
.. A comment | ||||
.. An indented comment | ||||
Some indented text. | ||||
Erik Zielke
|
r13009 | |||
.. | ||||
Empty comment above | ||||
Martin Geisler
|
r12819 | """ | ||
Augie Fackler
|
r37899 | debugformats('comments', comments) | ||
Matt Mackall
|
r15037 | |||
Matt Mackall
|
r15039 | |||
Pulkit Goyal
|
r36722 | data = [[b'a', b'b', b'c'], | ||
[b'1', b'2', b'3'], | ||||
[b'foo', b'bar', b'baz this list is very very very long man']] | ||||
Matt Mackall
|
r15039 | |||
Olav Reinert
|
r16815 | rst = minirst.maketable(data, 2, True) | ||
Pulkit Goyal
|
r36722 | table = b''.join(rst) | ||
Matt Mackall
|
r15039 | |||
Augie Fackler
|
r37899 | print(table.decode('utf8')) | ||
Matt Mackall
|
r15037 | |||
Augie Fackler
|
r37899 | debugformats('table', table) | ||
Simon Heimberg
|
r20654 | |||
Pulkit Goyal
|
r36722 | data = [[b's', b'long', b'line\ngoes on here'], | ||
[b'', b'xy', b'tried to fix here\n by indenting']] | ||||
Simon Heimberg
|
r20654 | |||
rst = minirst.maketable(data, 1, False) | ||||
Pulkit Goyal
|
r36722 | table = b''.join(rst) | ||
Simon Heimberg
|
r20654 | |||
Augie Fackler
|
r37899 | print(table.decode('utf8')) | ||
Simon Heimberg
|
r20654 | |||
Augie Fackler
|
r37899 | debugformats('table+nl', table) | ||