~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/doc_generate/builders/test_texinfo.py

  • Committer: Vincent Ladeuil
  • Date: 2010-07-06 13:22:32 UTC
  • mto: (5355.1.1 integration)
  • mto: This revision was merged to the branch mainline in revision 5356.
  • Revision ID: v.ladeuil+lp@free.fr-20100706132232-d9byjdy2i882asgr
Separate builder and writer tests.

Show diffs side-by-side

added added

removed removed

Lines of Context:
16
16
 
17
17
"""sphinx texinfo builder tests."""
18
18
 
19
 
import os
20
 
from sphinx import application
21
 
 
22
19
from bzrlib import tests
23
20
from bzrlib.doc_generate import (
24
21
    # FIXME: doc/en/conf.py should be used here, or rather merged into
25
22
    # bzrlib/doc_generate/conf.py -- vila 20100429
26
23
    conf,
27
24
    )
28
 
from bzrlib.tests import features
 
25
from bzrlib.tests import (
 
26
    doc_generate as test_dg, # Avoid clash with from bzrlib import doc_generate
 
27
    )
29
28
 
30
29
 
31
30
class TestBuilderDefined(tests.TestCase):
34
33
        self.assertTrue('bzrlib.doc_generate.builders.texinfo'
35
34
                        in conf.extensions)
36
35
 
37
 
class TestSphinx(tests.TestCaseInTempDir):
38
 
 
39
 
    def make_sphinx(self):
40
 
        out = tests.StringIOWrapper()
41
 
        err = tests.StringIOWrapper()
42
 
        app = application.Sphinx(
43
 
            '.', confdir=os.path.dirname(conf.__file__), outdir='.',
44
 
            doctreedir='.',
45
 
            buildername='texinfo',
46
 
            confoverrides={},
47
 
            status=out, warning=err,
48
 
            freshenv=True)
49
 
        return app, out, err
50
 
 
51
 
    def build(self, app, all_files=True, file_names=None):
52
 
        if file_names is None:
53
 
            file_names = []
54
 
        app.build(all_files, file_names)
55
 
 
56
 
    # FIXME: something smells wrong here as we can't process a single file
57
 
    # alone. On top of that, it seems the doc tree must contain an index.txt
58
 
    # file. We may need a texinfo builder ? -- vila 20100505
59
 
 
60
 
    def create_content(self, content):
61
 
        """Put content into a single file.
62
 
 
63
 
        This is appropriate for simple tests about the content of a single file.
64
 
        """
65
 
        app, out, err = self.make_sphinx()
66
 
        self.build_tree_contents([('index.txt', content),])
67
 
        self.build(app)
68
 
 
69
 
    def assertContent(self, expected, end=None):
70
 
        """Check the content of the file created with creste_content().
71
 
 
72
 
        Most texinfo constructs can be tested this way without caring for any
73
 
        boilerplate that texinfo may require at the beginning or the end of the
74
 
        file.
75
 
        """
76
 
        if end is None:
77
 
            # By default we test constructs that are embedded into a paragraph
78
 
            # which always end with two \n (even if the input has none)
79
 
            end = '\n\n'
80
 
        self.assertFileEqual(expected + end, 'index.texi')
81
 
 
82
 
 
83
 
class TestBuilderLoaded(TestSphinx):
 
36
class TestBuilderLoaded(test_dg.TestSphinx):
84
37
 
85
38
    def test_builder_loaded(self):
86
39
        app, out, err = self.make_sphinx()
87
40
        self.assertTrue('texinfo' in app.builderclasses)
88
41
 
89
42
 
90
 
class TestTextGeneration(TestSphinx):
91
 
 
92
 
    def test_special_chars(self):
93
 
        self.create_content("A '@' a '{' and a '}'")
94
 
        self.assertContent("A '@@' a '@{' and a '@}'")
95
 
 
96
 
    def test_emphasis(self):
97
 
        self.create_content('*important*')
98
 
        self.assertContent('@emph{important}')
99
 
 
100
 
    def test_strong(self):
101
 
        self.create_content('**very important**')
102
 
        self.assertContent('@strong{very important}')
103
 
 
104
 
    def test_literal(self):
105
 
        self.create_content('the command is ``foo``')
106
 
        self.assertContent('the command is @code{foo}')
107
 
 
108
 
    def test_paragraphs(self):
109
 
        self.create_content('''\
110
 
This is a paragraph.
111
 
 
112
 
This is another one.
113
 
''')
114
 
        self.assertContent('''\
115
 
This is a paragraph.
116
 
 
117
 
This is another one.''')
118
 
 
119
 
    def test_literal_block(self):
120
 
        self.create_content('''\
121
 
Do this::
122
 
 
123
 
   bzr xxx
124
 
   bzr yyy
125
 
''')
126
 
        self.assertContent('''\
127
 
Do this:
128
 
 
129
 
@samp{bzr xxx
130
 
bzr yyy}
131
 
 
132
 
''',
133
 
                           end='')
134
 
 
135
 
    def test_block_quote(self):
136
 
        self.create_content('''\
137
 
This is an ordinary paragraph, introducing a block quote.
138
 
 
139
 
    "It is my business to know things.  That is my trade."
140
 
 
141
 
This is another ordinary paragraph.
142
 
''')
143
 
        self.assertContent('''\
144
 
This is an ordinary paragraph, introducing a block quote.
145
 
 
146
 
@example
147
 
"It is my business to know things.  That is my trade."
148
 
 
149
 
@end example
150
 
 
151
 
This is another ordinary paragraph.
152
 
 
153
 
''',
154
 
                           # examples are not followed by an empty line
155
 
                           end='')
156
 
 
157
 
 
158
 
class TestDocumentAttributesGeneration(TestSphinx):
159
 
 
160
 
    def test_title(self):
161
 
        self.create_content('''\
162
 
####################
163
 
Bazaar Release Notes
164
 
####################
165
 
''')
166
 
        self.assertContent('@chapter Bazaar Release Notes\n', end='')
167
 
 
168
 
 
169
 
class TestListGeneration(TestSphinx):
170
 
 
171
 
    def test_bullet_list(self):
172
 
        self.create_content('''\
173
 
* This is a bulleted list.
174
 
* It has two items, the second
175
 
  item uses two lines.
176
 
''')
177
 
        self.assertContent('''\
178
 
@itemize @bullet
179
 
@item
180
 
This is a bulleted list.
181
 
 
182
 
@item
183
 
It has two items, the second
184
 
item uses two lines.
185
 
 
186
 
@end itemize
187
 
''',
188
 
                           end='')
189
 
 
190
 
    def test_enumerated_list(self):
191
 
        self.create_content('''\
192
 
#. This is a numbered list.
193
 
#. It has two items, the second
194
 
   item uses two lines.
195
 
''')
196
 
        self.assertContent('''\
197
 
@enumerate
198
 
@item
199
 
This is a numbered list.
200
 
 
201
 
@item
202
 
It has two items, the second
203
 
item uses two lines.
204
 
 
205
 
@end enumerate
206
 
''',
207
 
                           end='')
208
 
 
209
 
 
210
 
class TestTableGeneration(TestSphinx):
211
 
 
212
 
    def test_table(self):
213
 
        self.create_content('''\
214
 
  ===========         ================
215
 
  Prefix              Description
216
 
  ===========         ================
217
 
  first               The first
218
 
  second              The second
219
 
  last                The last
220
 
  ===========         ================
221
 
''')
222
 
        # FIXME: Sphinx bug ? Why are tables enclosed in a block_quote
223
 
        # (translated as an @example).
224
 
        self.assertContent('''\
225
 
@example
226
 
@multitable {xxxxxxxxxxx}{xxxxxxxxxxxxxxxx}
227
 
@headitem Prefix @tab Description
228
 
@item first
229
 
@tab The first
230
 
@item second
231
 
@tab The second
232
 
@item last
233
 
@tab The last
234
 
@end multitable
235
 
@end example''')
236
 
 
237
 
 
238
 
class TestTocTreeGeneration(TestSphinx):
239
 
 
240
 
    def test_toctree(self):
241
 
        self.build_tree_contents(
242
 
            [('index.txt', """
243
 
Table of Contents
244
 
=================
245
 
 
246
 
.. toctree::
247
 
   :maxdepth: 1
248
 
 
249
 
   bzr 0.0.8 <bzr-0.0.8>
250
 
"""),
251
 
             ('bzr-0.0.8.txt', """
252
 
 
253
 
bzr 0.0.8
254
 
*********
255
 
 
256
 
Improvements
257
 
============
258
 
 
259
 
* Adding a file whose parent directory is not versioned will
260
 
  implicitly add the parent, and so on up to the root.
261
 
"""),
262
 
             ])
263
 
        app, out, err = self.make_sphinx()
264
 
        self.build(app)
265
 
        self.assertFileEqual("""\
266
 
@chapter Table of Contents
267
 
@menu
268
 
* bzr 0.0.8: (bzr-0.0.8.info)bzr 0.0.8. 
269
 
@end menu
270
 
""",
271
 
                             'index.texi')
272
 
        self.assertFileEqual("""\
273
 
@chapter bzr 0.0.8
274
 
@section Improvements
275
 
@itemize @bullet
276
 
@item
277
 
Adding a file whose parent directory is not versioned will
278
 
implicitly add the parent, and so on up to the root.
279
 
 
280
 
@end itemize
281
 
""",
282
 
                             'bzr-0.0.8.texi')
283
 
 
284
 
class TestSections(TestSphinx):
285
 
 
286
 
    def test_sections(self):
287
 
        self.create_content('''\
288
 
###########
289
 
Chapter one
290
 
###########
291
 
 
292
 
Chapter introduction.
293
 
 
294
 
***********
295
 
section one
296
 
***********
297
 
 
298
 
The first section.
299
 
 
300
 
 
301
 
subsection one
302
 
==============
303
 
 
304
 
The first subsection.
305
 
 
306
 
subsection two
307
 
==============
308
 
 
309
 
The second subsection.
310
 
 
311
 
subsubsection one
312
 
-----------------
313
 
 
314
 
Here is sus sub section one.
315
 
 
316
 
blob one
317
 
^^^^^^^^
318
 
 
319
 
Far tooo deep to get a name
320
 
 
321
 
thing one
322
 
"""""""""
323
 
 
324
 
No idea how to call that, but sphinx says it's a paragraph.
325
 
''')
326
 
        self.assertContent('''\
327
 
@chapter Chapter one
328
 
Chapter introduction.
329
 
 
330
 
@section section one
331
 
The first section.
332
 
 
333
 
@subsection subsection one
334
 
The first subsection.
335
 
 
336
 
@subsection subsection two
337
 
The second subsection.
338
 
 
339
 
@subsubsection subsubsection one
340
 
Here is sus sub section one.
341
 
 
342
 
@heading blob one
343
 
Far tooo deep to get a name
344
 
 
345
 
@heading thing one
346
 
No idea how to call that, but sphinx says it's a paragraph.''')
347
 
 
348
 
 
349
 
class TestFileProduction(TestSphinx):
 
43
class TestFileProduction(test_dg.TestSphinx):
350
44
 
351
45
    def test_files_generated(self):
352
46
        self.build_tree_contents(
375
69
        self.build(app)
376
70
        self.failUnlessExists('index.texi')
377
71
        self.failUnlessExists('content.texi')
378
 
        # FIXME: When the content of the files becomes clearer replace the
379
 
        # assertion above by the ones below -- vila 20100504
380
 
#         self.assertFileEqual("""\
381
 
# """,
382
 
#                               'content.texi')
383
 
#         self.assertFileEqual("""\
384
 
# """,
385
 
#                               'index.texi')
386
 
387