[PATCH 2 of 3] drawdag: add a couple of doctests to help with python3 porting

Augie Fackler raf at durin42.com
Wed Aug 23 10:57:57 EDT 2017


# HG changeset patch
# User Augie Fackler <raf at durin42.com>
# Date 1503499886 14400
#      Wed Aug 23 10:51:26 2017 -0400
# Node ID de96681ea4cc716967307ccfdb7c4a1684c14f50
# Parent  9445a48c8752fafbfdbd5a5c51378119e1f3ea23
drawdag: add a couple of doctests to help with python3 porting

diff --git a/tests/drawdag.py b/tests/drawdag.py
--- a/tests/drawdag.py
+++ b/tests/drawdag.py
@@ -110,7 +110,52 @@ def _isname(ch):
     return ch in _nonpipechars
 
 def _parseasciigraph(text):
-    """str -> {str : [str]}. convert the ASCII graph to edges"""
+    r"""str -> {str : [str]}. convert the ASCII graph to edges
+
+    >>> import pprint
+    >>> pprint.pprint({pycompat.sysstr(k): [pycompat.sysstr(vv) for vv in v]
+    ...  for k, v in _parseasciigraph(b'''
+    ...        G
+    ...        |
+    ...  I D C F   # split: B -> E, F, G
+    ...   \ \| |   # replace: C -> D -> H
+    ...    H B E   # prune: F, I
+    ...     \|/
+    ...      A
+    ... ''').items()})
+    {'A': [],
+     'B': ['A'],
+     'C': ['B'],
+     'D': ['B'],
+     'E': ['A'],
+     'F': ['E'],
+     'G': ['F'],
+     'H': ['A'],
+     'I': ['H']}
+    >>> pprint.pprint({pycompat.sysstr(k): [pycompat.sysstr(vv) for vv in v]
+    ...  for k, v in _parseasciigraph(b'''
+    ...  o    foo
+    ...  |\
+    ...  +---o  bar
+    ...  | | |
+    ...  | o |  baz
+    ...  |  /
+    ...  +---o  d
+    ...  | |
+    ...  +---o  c
+    ...  | |
+    ...  o |  b
+    ...  |/
+    ...  o  a
+    ... ''').items()})
+    {'a': [],
+     'b': ['a'],
+     'bar': ['baz'],
+     'baz': [],
+     'c': ['b'],
+     'd': ['b'],
+     'foo': ['b']}
+    """
     lines = text.splitlines()
     edges = collections.defaultdict(list)  # {node: []}
 
@@ -277,6 +322,18 @@ def _walkgraph(edges):
                     v.remove(leaf)
 
 def _getcomments(text):
+    """
+    >>> [pycompat.sysstr(s) for s in _getcomments(b'''
+    ...        G
+    ...        |
+    ...  I D C F   # split: B -> E, F, G
+    ...   \ \| |   # replace: C -> D -> H
+    ...    H B E   # prune: F, I
+    ...     \|/
+    ...      A
+    ... ''')]
+    ['split: B -> E, F, G', 'replace: C -> D -> H', 'prune: F, I']
+    """
     for line in text.splitlines():
         if ' # ' not in line:
             continue
diff --git a/tests/test-doctest.py b/tests/test-doctest.py
--- a/tests/test-doctest.py
+++ b/tests/test-doctest.py
@@ -55,3 +55,5 @@ testmod('hgext.convert.filemap')
 testmod('hgext.convert.p4')
 testmod('hgext.convert.subversion')
 testmod('hgext.mq')
+# Helper scripts in tests/ that have doctests:
+testmod('drawdag')


More information about the Mercurial-devel mailing list