Skip to content

Commit 0e889d6

Browse files
Ken KundertKen Kundert
authored andcommitted
fix bug in dedent
1 parent 465b65d commit 0e889d6

File tree

3 files changed

+115
-99
lines changed

3 files changed

+115
-99
lines changed

inform/inform.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -818,10 +818,10 @@ def dedent(text, strip_nl=None, *, bolm=None, wrap=False):
818818
819819
strip_nl = None:
820820
strip_nl is used to strip off a single leading or trailing newline.
821-
strip_nl may be None, 'l', 't', or 'b' representing neither,
822-
leading, trailing, or both. True may also be passed, which is equivalent to 'b'.
823-
Can also use 's' (start) as synonym for 'l' and 'e' (end) as
824-
synonym for 't'.
821+
strip_nl may be None, 'l', 't', or 'b' representing neither, leading,
822+
trailing, or both. True may also be passed, which is equivalent to 'b'.
823+
Can also use 's' (start) as synonym for 'l' and 'e' (end) or 'r' (right)
824+
as synonym for 't'.
825825
826826
wrap (bool or int):
827827
If true the string is wrapped using a width of 70. If an integer value
@@ -879,11 +879,11 @@ def dedent(text, strip_nl=None, *, bolm=None, wrap=False):
879879
dedented = '\n' + ' '*len(bolm) + dedented[l:]
880880

881881
# remove leading newline if desired
882-
if strip_nl in ['s', 'b', 'l', 'True'] and dedented[0] == '\n':
882+
if strip_nl in ['s', 'b', 'l', True] and dedented[:1] == '\n':
883883
dedented = dedented[1:]
884884

885885
# remove trailing newline if desired
886-
if strip_nl in ['e', 'b', 't', 'True'] and dedented[-1] == '\n':
886+
if strip_nl in ['e', 'b', 't', 'r', True] and dedented[-1:] == '\n':
887887
dedented = dedented[:-1]
888888

889889
# wrap text to desired width

tests/test_inform.py

Lines changed: 0 additions & 91 deletions
Original file line numberDiff line numberDiff line change
@@ -861,97 +861,6 @@ def test_stripy():
861861
{expected}
862862
''').strip().format(expected=expected)
863863

864-
def test_tree():
865-
with messenger() as (msg, stdout, stderr, logfile):
866-
data = data = dict(
867-
str = 'text',
868-
mlstr = dedent("""
869-
line 1
870-
line 2
871-
""").strip(),
872-
alist = [1, 2, 3],
873-
adict = {1: 'one', 2: 'two', 3: 'three', 'four': None}
874-
)
875-
result = tree(data, squeeze=True)
876-
expected = dedent('''
877-
str: text
878-
mlstr: line 1
879-
line 2
880-
alist
881-
├── 1
882-
├── 2
883-
└── 3
884-
adict
885-
├── 1: one
886-
├── 2: two
887-
├── 3: three
888-
└── four
889-
''').strip()
890-
assert result == expected
891-
892-
result = tree(data)
893-
expected = dedent('''
894-
str
895-
└── text
896-
mlstr
897-
└── line 1
898-
line 2
899-
alist
900-
├── 1
901-
├── 2
902-
└── 3
903-
adict
904-
├── 1
905-
│   └── one
906-
├── 2
907-
│   └── two
908-
├── 3
909-
│   └── three
910-
└── four
911-
''').strip()
912-
assert result == expected
913-
914-
result = tree(dict(root=data), squeeze=True)
915-
expected = dedent('''
916-
root
917-
├── str: text
918-
├── mlstr: line 1
919-
│    line 2
920-
├── alist
921-
│   ├── 1
922-
│   ├── 2
923-
│   └── 3
924-
└── adict
925-
    ├── 1: one
926-
    ├── 2: two
927-
    ├── 3: three
928-
    └── four
929-
''').strip()
930-
assert result == expected
931-
932-
result = tree(dict(root=data))
933-
expected = dedent('''
934-
root
935-
├── str
936-
│   └── text
937-
├── mlstr
938-
│   └── line 1
939-
│    line 2
940-
├── alist
941-
│   ├── 1
942-
│   ├── 2
943-
│   └── 3
944-
└── adict
945-
    ├── 1
946-
    │   └── one
947-
    ├── 2
948-
    │   └── two
949-
    ├── 3
950-
    │   └── three
951-
    └── four
952-
''').strip()
953-
assert result == expected
954-
955864
def test_capsys_out(capsys):
956865
output('hello world')
957866
cap = capsys.readouterr()

tests/test_utilities.py

Lines changed: 109 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
cull, dedent, display, done, error, fatal, fmt, full_stop, indent, Inform,
66
is_collection, is_iterable, is_mapping, is_str, join, get_prog_name,
77
get_informer, narrate, os_error, output, plural, render, terminate,
8-
title_case, truth, warn, ddd, ppp, sss, vvv, ProgressBar, parse_range,
8+
title_case, tree, truth, warn, ddd, ppp, sss, vvv, ProgressBar, parse_range,
99
format_range
1010
)
1111
from textwrap import dedent as tw_dedent
@@ -1810,9 +1810,26 @@ def test_oblong():
18101810
assert render_bar(0.66, 25) == '████████████████▌'
18111811

18121812

1813-
@parametrize('given', ['a', '\na', 'a\n', '\na\n', '\na\nb\n'])
1813+
@parametrize('given', ['', 'a', '\na', 'a\n', '\na\n', '\na\nb\n'])
18141814
def test_dedent_compatibility(given):
18151815
assert dedent(given) == tw_dedent(given)
1816+
assert dedent(given, strip_nl='b') == tw_dedent(given).strip()
1817+
assert dedent(given, strip_nl='l') == tw_dedent(given).lstrip()
1818+
assert dedent(given, strip_nl='t') == tw_dedent(given).rstrip()
1819+
assert dedent(given, strip_nl='s') == tw_dedent(given).lstrip()
1820+
assert dedent(given, strip_nl='e') == tw_dedent(given).rstrip()
1821+
assert dedent(given, strip_nl='r') == tw_dedent(given).rstrip()
1822+
assert dedent(given, strip_nl=True) == tw_dedent(given).strip()
1823+
assert dedent(given, strip_nl=False) == tw_dedent(given)
1824+
1825+
given = '''
1826+
◊ Diaspar
1827+
Lys
1828+
'''
1829+
assert dedent(given, bolm='◊', strip_nl='b') == " Diaspar\n Lys"
1830+
1831+
given = '\nDiaspar\nLys\n'
1832+
assert dedent(given, strip_nl='b', wrap=True) == "Diaspar Lys"
18161833

18171834

18181835
def test_render_tuples():
@@ -1821,6 +1838,96 @@ def test_render_tuples():
18211838
assert render((0,1)) == '(0, 1)'
18221839
assert render((0,1,2)) == '(0, 1, 2)'
18231840

1841+
def test_tree():
1842+
data = data = dict(
1843+
str = 'text',
1844+
mlstr = dedent("""
1845+
line 1
1846+
line 2
1847+
""").strip(),
1848+
alist = [1, 2, 3],
1849+
adict = {1: 'one', 2: 'two', 3: 'three', 'four': None}
1850+
)
1851+
result = tree(data, squeeze=True)
1852+
expected = dedent('''
1853+
str: text
1854+
mlstr: line 1
1855+
line 2
1856+
alist
1857+
├── 1
1858+
├── 2
1859+
└── 3
1860+
adict
1861+
├── 1: one
1862+
├── 2: two
1863+
├── 3: three
1864+
└── four
1865+
''').strip()
1866+
assert result == expected
1867+
1868+
result = tree(data)
1869+
expected = dedent('''
1870+
str
1871+
└── text
1872+
mlstr
1873+
└── line 1
1874+
line 2
1875+
alist
1876+
├── 1
1877+
├── 2
1878+
└── 3
1879+
adict
1880+
├── 1
1881+
│   └── one
1882+
├── 2
1883+
│   └── two
1884+
├── 3
1885+
│   └── three
1886+
└── four
1887+
''').strip()
1888+
assert result == expected
1889+
1890+
result = tree(dict(root=data), squeeze=True)
1891+
expected = dedent('''
1892+
root
1893+
├── str: text
1894+
├── mlstr: line 1
1895+
│    line 2
1896+
├── alist
1897+
│   ├── 1
1898+
│   ├── 2
1899+
│   └── 3
1900+
└── adict
1901+
    ├── 1: one
1902+
    ├── 2: two
1903+
    ├── 3: three
1904+
    └── four
1905+
''').strip()
1906+
assert result == expected
1907+
1908+
result = tree(dict(root=data))
1909+
expected = dedent('''
1910+
root
1911+
├── str
1912+
│   └── text
1913+
├── mlstr
1914+
│   └── line 1
1915+
│    line 2
1916+
├── alist
1917+
│   ├── 1
1918+
│   ├── 2
1919+
│   └── 3
1920+
└── adict
1921+
    ├── 1
1922+
    │   └── one
1923+
    ├── 2
1924+
    │   └── two
1925+
    ├── 3
1926+
    │   └── three
1927+
    └── four
1928+
''').strip()
1929+
assert result == expected
1930+
18241931

18251932
if __name__ == '__main__':
18261933
# As a debugging aid allow the tests to be run on their own, outside pytest.

0 commit comments

Comments
 (0)