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