# sphinx / tests / test_metadata.py

  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 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 # -*- coding: utf-8 -*- """ test_metadata ~~~~~~~~~~~~~ Test our ahndling of metadata in files with bibliographic metadata :copyright: Copyright 2007-2009 by the Sphinx team, see AUTHORS. :license: BSD, see LICENSE for details. """ # adapted from an example of bibliographic metadata at http://docutils.sourceforge.net/docs/user/rst/demo.txt BIBLIOGRAPHIC_FIELDS_REST = """:Author: David Goodger :Address: 123 Example Street Example, EX Canada A1B 2C3 :Contact: goodger@python.org :Authors: Me; Myself; I :organization: humankind :date: $Date: 2006-05-21 22:44:42 +0200 (Son, 21 Mai 2006)$ :status: This is a "work in progress" :revision: $Revision: 4564$ :version: 1 :copyright: This document has been placed in the public domain. You may do with it as you wish. You may copy, modify, redistribute, reattribute, sell, buy, rent, lease, destroy, or improve it, quote it at length, excerpt, incorporate, collate, fold, staple, or mutilate it, or do anything else to it that your or anyone else's heart desires. :field name: This is a generic bibliographic field. :field name 2: Generic bibliographic fields may contain multiple body elements. Like this. :Dedication: For Docutils users & co-developers. :abstract: This document is a demonstration of the reStructuredText markup language, containing examples of all basic reStructuredText constructs and many advanced constructs. .. meta:: :keywords: reStructuredText, demonstration, demo, parser :description lang=en: A demonstration of the reStructuredText markup language, containing examples of all basic constructs and many advanced constructs. ================================ reStructuredText Demonstration ================================ Above is the document title. """ import re from util import * from docutils import frontend, utils, nodes from docutils.parsers import rst from sphinx import addnodes from sphinx.util import texescape from sphinx.writers.html import HTMLWriter, SmartyPantsHTMLTranslator from sphinx.writers.latex import LaTeXWriter, LaTeXTranslator def setup_module(): global app, settings, parser texescape.init() # otherwise done by the latex builder app = TestApp(cleanenv=True) optparser = frontend.OptionParser( components=(rst.Parser, HTMLWriter, LaTeXWriter)) settings = optparser.get_default_values() settings.env = app.builder.env parser = rst.Parser() def teardown_module(): app.cleanup() # since we're not resolving the markup afterwards, these nodes may remain class ForgivingTranslator: def visit_pending_xref(self, node): pass def depart_pending_xref(self, node): pass class ForgivingHTMLTranslator(SmartyPantsHTMLTranslator, ForgivingTranslator): pass class ForgivingLaTeXTranslator(LaTeXTranslator, ForgivingTranslator): pass def verify_re(rst, html_expected, latex_expected): document = utils.new_document('test data', settings) document['file'] = 'dummy' parser.parse(rst, document) for msg in document.traverse(nodes.system_message): if msg['level'] == 1: msg.replace_self([]) if html_expected: html_translator = ForgivingHTMLTranslator(app.builder, document) document.walkabout(html_translator) html_translated = ''.join(html_translator.fragment).strip() assert re.match(html_expected, html_translated), 'from' + rst if latex_expected: latex_translator = ForgivingLaTeXTranslator(document, app.builder) latex_translator.first_document = -1 # don't write \begin{document} document.walkabout(latex_translator) latex_translated = ''.join(latex_translator.body).strip() assert re.match(latex_expected, latex_translated), 'from ' + repr(rst) def verify(rst, html_expected, latex_expected): if html_expected: html_expected = re.escape(html_expected) + '$' if latex_expected: latex_expected = re.escape(latex_expected) + '$' verify_re(rst, html_expected, latex_expected) def test_bibliographic_fields(): # correct parsing of doc metadata document = utils.new_document('test data', settings) document['file'] = 'dummy' parser.parse(BIBLIOGRAPHIC_FIELDS_REST, document) import pdb; pdb.set_trace() for msg in document.traverse(nodes.system_message): if msg['level'] == 1: msg.replace_self([]) _html = ('

' 'code   sample

') yield verify, 'code sample', _html, '\\code{code sample}' yield verify, ':samp:code sample', _html, '\\samp{code sample}'