garden: use 4-space indents
[git-cola.git] / test / textwrap_test.py
blob5ef6019c5f693b965a458815103eaee8ed4a40c3
1 """Test the textwrap module"""
2 import pytest
4 from cola import textwrap
7 class WordWrapDefaults:
8 def __init__(self):
9 self.tabwidth = 8
10 self.limit = None
12 def wrap(self, text, break_on_hyphens=True):
13 return textwrap.word_wrap(
14 text, self.tabwidth, self.limit, break_on_hyphens=break_on_hyphens
18 @pytest.fixture
19 def wordwrap():
20 """Provide default word wrap options for tests"""
21 return WordWrapDefaults()
24 def test_word_wrap(wordwrap):
25 wordwrap.limit = 16
26 text = """
27 12345678901 3 56 8 01 3 5 7
29 1 3 5"""
30 expect = """
31 12345678901 3 56
32 8 01 3 5 7
34 1 3 5"""
35 assert expect == wordwrap.wrap(text)
38 def test_word_wrap_dashes(wordwrap):
39 wordwrap.limit = 4
40 text = '123-5'
41 expect = '123-5'
42 assert expect == wordwrap.wrap(text)
45 def test_word_wrap_leading_spaces(wordwrap):
46 wordwrap.limit = 4
47 expect = '1234\n5'
49 assert expect == wordwrap.wrap('1234 5')
50 assert expect == wordwrap.wrap('1234 5')
51 assert expect == wordwrap.wrap('1234 5')
52 assert expect == wordwrap.wrap('1234 5')
53 assert expect == wordwrap.wrap('1234 5')
55 expect = '123\n4'
56 assert expect == wordwrap.wrap('123 4')
57 assert expect == wordwrap.wrap('123 4')
58 assert expect == wordwrap.wrap('123 4')
59 assert expect == wordwrap.wrap('123 4')
60 assert expect == wordwrap.wrap('123 4')
63 def test_word_wrap_double_dashes(wordwrap):
64 wordwrap.limit = 4
65 text = '12--5'
66 expect = '12--\n5'
67 actual = wordwrap.wrap(text, break_on_hyphens=True)
68 assert expect == actual
70 expect = '12--5'
71 actual = wordwrap.wrap(text, break_on_hyphens=False)
72 assert expect == actual
75 def test_word_wrap_many_lines(wordwrap):
76 wordwrap.limit = 2
77 text = """
81 bb cc dd"""
83 expect = """
89 dd"""
90 actual = wordwrap.wrap(text)
91 assert expect == actual
94 def test_word_python_code(wordwrap):
95 wordwrap.limit = 78
96 text = """
97 if True:
98 print "hello world"
99 else:
100 print "hello world"
103 expect = text
104 actual = wordwrap.wrap(text)
105 assert expect == actual
108 def test_word_wrap_spaces(wordwrap):
109 wordwrap.limit = 2
110 text = ' ' * 6
111 expect = ''
112 actual = wordwrap.wrap(text)
113 assert expect == actual
116 def test_word_wrap_special_tag(wordwrap):
117 wordwrap.limit = 2
118 text = """
119 This test is so meta, even this sentence
121 Cheered-on-by: Avoids word-wrap
122 C.f. This also avoids word-wrap
123 References: This also avoids word-wrap
124 See-also: This also avoids word-wrap
125 Related-to: This also avoids word-wrap
126 Link: This also avoids word-wrap
129 expect = """
130 This
131 test
134 meta,
135 even
136 this
137 sentence
139 Cheered-on-by: Avoids word-wrap
140 C.f. This also avoids word-wrap
141 References: This also avoids word-wrap
142 See-also: This also avoids word-wrap
143 Related-to: This also avoids word-wrap
144 Link: This also avoids word-wrap
146 actual = wordwrap.wrap(text)
147 assert expect == actual
150 def test_word_wrap_space_at_start_of_wrap(wordwrap):
151 inputs = """0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 """
152 expect = """0 1 2 3 4 5 6 7 8 9\n0 1 2 3 4 5 6 7 8"""
153 wordwrap.limit = 20
155 actual = wordwrap.wrap(inputs)
156 assert expect == actual
159 def test_word_wrap_keeps_tabs_at_start(wordwrap):
160 inputs = """\tfirst line\n\n\tsecond line"""
161 expect = """\tfirst line\n\n\tsecond line"""
162 wordwrap.limit = 20
164 actual = wordwrap.wrap(inputs)
165 assert expect == actual
168 def test_word_wrap_keeps_twospace_indents(wordwrap):
169 inputs = """first line\n\n* branch:\n line1\n line2\n"""
170 expect = """first line\n\n* branch:\n line1\n line2\n"""
171 wordwrap.limit = 20
173 actual = wordwrap.wrap(inputs)
174 assert expect == actual
177 def test_word_wrap_ranges():
178 text = 'a bb ccc dddd\neeeee'
179 expect = 'a\nbb\nccc\ndddd\neeeee'
180 actual = textwrap.word_wrap(text, 8, 2)
181 assert expect == actual
183 expect = 'a bb\nccc\ndddd\neeeee'
184 actual = textwrap.word_wrap(text, 8, 4)
185 assert expect == actual
187 text = 'a bb ccc dddd\n\teeeee'
188 expect = 'a bb\nccc\ndddd\n\t\neeeee'
189 actual = textwrap.word_wrap(text, 8, 4)
190 assert expect == actual
193 def test_triplets():
194 text = 'xx0 xx1 xx2 xx3 xx4 xx5 xx6 xx7 xx8 xx9 xxa xxb'
196 expect = 'xx0 xx1 xx2 xx3 xx4 xx5 xx6\nxx7 xx8 xx9 xxa xxb'
197 actual = textwrap.word_wrap(text, 8, 27)
198 assert expect == actual
200 expect = 'xx0 xx1 xx2 xx3 xx4 xx5\nxx6 xx7 xx8 xx9 xxa xxb'
201 actual = textwrap.word_wrap(text, 8, 26)
202 assert expect == actual
204 actual = textwrap.word_wrap(text, 8, 25)
205 assert expect == actual
207 actual = textwrap.word_wrap(text, 8, 24)
208 assert expect == actual
210 actual = textwrap.word_wrap(text, 8, 23)
211 assert expect == actual
213 expect = 'xx0 xx1 xx2 xx3 xx4\nxx5 xx6 xx7 xx8 xx9\nxxa xxb'
214 actual = textwrap.word_wrap(text, 8, 22)
215 assert expect == actual