tests/test-minirst.py
author Sune Foldager <cryo@cyanite.org>
Thu, 15 Apr 2010 21:59:21 +0200
branchstable
changeset 10925 a101a743c570
parent 10447 e957cc7cbd14
child 10972 0a2c6948f5f4
permissions -rw-r--r--
prepush: rewrite most of the code from scratch For servers with branchmap support, the algorithm now works as follows: 1. A list of branches in outgoing changesets is created. 2. Using the remote branchmap, a check for new branches is performed. 3. A map (from branch to head list) of locally known remote heads before the push is created, and one which, after step 4, will contain the locally known remote heads after the push. 4. The post-push head map is updated with the outgoing changesets, using the branch cache update mechanism. 5. A check for new heads is performed, by comparing the length of the head list before and after push, for each branch. If there are new heads, an error depending on whether or not there are incoming changes on the branch, is returned. 6. If the push is allowed, a warning is written if there are incoming changes on any branches involved in the push. For old servers, an algorithm similar to step 4-6 above is used to check for new topological heads only. Two bugs are also fixed: 1. Sometimes you would be allowed to push new branch heads without --force. A test for this case was added. 2. You would get the "note: unsynced remote changes!" warning if there were any incoming changesets, even if they were on unrelated branches.

#!/usr/bin/env python

from pprint import pprint
from mercurial import minirst

def debugformat(title, text, width, **kwargs):
    print "%s formatted to fit within %d characters:" % (title, width)
    print "-" * 70
    formatted = minirst.format(text, width, **kwargs)
    if type(formatted) == tuple:
        print formatted[0]
        print "-" * 70
        pprint(formatted[1])
    else:
        print formatted
    print "-" * 70
    print

paragraphs = """
This is some text in the first paragraph.

  A small indented paragraph.
  It is followed by some lines
  containing random whitespace.
 \n  \n   \nThe third and final paragraph.
"""

debugformat('paragraphs', paragraphs, 60)
debugformat('paragraphs', paragraphs, 30)


definitions = """
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.
"""

debugformat('definitions', definitions, 60)
debugformat('definitions', definitions, 30)


literals = r"""
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.
"""

debugformat('literals', literals, 60)
debugformat('literals', literals, 30)


lists = """
- 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.)

::

  Literal block with no indentation (apart from
  the two spaces added to all literal blocks).

1. This is an enumerated list (first item).
2. Continuing with the second item.

(1) foo
(2) bar

1) Another
2) List

Line blocks are also a form of list:

| This is the first line.
  The line continues here.
| This is the second line.
"""

debugformat('lists', lists, 60)
debugformat('lists', lists, 30)


options = """
There is support for simple option lists,
but only with long options:

--all      Output all.
--both     Output both (this description is
           quite long).
--long     Output all day long.

--par      This option has two paragraphs in its description.
           This is the first.

           This is the second.  Blank lines may be omitted between
           options (as above) or left in (as here).

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
"""

debugformat('options', options, 60)
debugformat('options', options, 30)


fields = """
:a: First item.
:ab: Second item. Indentation and wrapping
     is handled automatically.

Next list:

:small: The larger key below triggers full indentation here.
:much too large: This key is big enough to get its own line.
"""

debugformat('fields', fields, 60)
debugformat('fields', fields, 30)

containers = """
Normal output.

.. container:: debug

   Initial debug output.

.. container:: verbose

   Verbose output.

   .. container:: debug

      Debug output.
"""

debugformat('containers (normal)', containers, 60)
debugformat('containers (verbose)', containers, 60, keep=['verbose'])
debugformat('containers (debug)', containers, 60, keep=['debug'])
debugformat('containers (verbose debug)', containers, 60,
            keep=['verbose', 'debug'])