Fix [3541369] Relative __import__ also with Python 3.3.
[docutils.git] / test / test_traversals.py
blobb0a65107d80a81407bedf58e28c803ee566e0857
1 #! /usr/bin/env python
3 # $Id$
4 # Author: Martin Blais <blais@furius.ca>
5 # Copyright: This module has been placed in the public domain.
7 """
8 Test module for traversals.
9 """
11 import unittest
12 import DocutilsTestSupport # must be imported before docutils
13 from docutils import nodes, core, io, utils, writers
14 from docutils.writers.null import Writer as NullWriter
15 import docutils
19 stop_traversal_input = '''
20 ==================
21 Train Travel
22 ==================
24 Happily, happily going by train.
26 .. attention:: Attention, attention. This is a public annoucement.
27 You must get off the train now.
29 KaZoom! Train crashes.
31 - Told ya!!! Get off the train next time.
33 '''
35 class AttentiveVisitor(nodes.SparseNodeVisitor):
37 def visit_attention(self, node):
38 raise nodes.StopTraversal
40 def visit_bullet_list(self, node):
41 raise RuntimeError("It's too late for attention, "
42 "more discipline is needed!.")
44 class AttentiveWriter(writers.Writer):
46 def translate(self):
47 self.visitor = visitor = AttentiveVisitor(self.document)
49 # Test both kinds of traversals.
50 self.document.walkabout(visitor)
51 self.document.walk(visitor)
53 class StopTraversalTests(unittest.TestCase, docutils.SettingsSpec):
55 """
56 Test interrupting the visitor during traversal. In this test we stop it
57 when we reach an attention node.
58 """
59 def test_stop_traversal(self):
60 # Load some document tree in memory.
61 doctree = docutils.core.publish_doctree(
62 source=stop_traversal_input,
63 reader_name='standalone',
64 parser_name='restructuredtext',
65 settings_spec=self)
66 self.assertTrue(isinstance(doctree, nodes.document))
68 parts = docutils.core.publish_parts(
69 reader_name='doctree', source_class=docutils.io.DocTreeInput,
70 source=doctree, source_path='test',
71 writer=AttentiveWriter())
74 if __name__ == '__main__':
75 unittest.main()