You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							76 lines
						
					
					
						
							2.0 KiB
						
					
					
				
			
		
		
	
	
							76 lines
						
					
					
						
							2.0 KiB
						
					
					
				| #! /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() | |
| 
 | |
| 
 |