3
# $Id: test_traversals.py 4641 2006-06-28 16:27:55Z blais $
4
# Author: Martin Blais <blais@furius.ca>
5
# Copyright: This module has been placed in the public domain.
8
Test module for traversals.
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
19
stop_traversal_input = '''
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.
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):
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
Test interrupting the visitor during traversal. In this test we stop it
56
when we reach an attention node.
58
def test_stop_traversal(self):
59
# Load some document tree in memory.
60
doctree = docutils.core.publish_doctree(
61
source=stop_traversal_input,
62
reader_name='standalone',
63
parser_name='restructuredtext',
65
self.assert_(isinstance(doctree, nodes.document))
67
parts = docutils.core.publish_parts(
68
reader_name='doctree', source_class=docutils.io.DocTreeInput,
69
source=doctree, source_path='test',
70
writer=AttentiveWriter())
73
if __name__ == '__main__':