# -*- coding: utf-8 -*- """ test_util_nodes ~~~~~~~~~~~~~~~ Tests uti.nodes functions. :copyright: Copyright 2007-2014 by the Sphinx team, see AUTHORS. :license: BSD, see LICENSE for details. """ from textwrap import dedent from docutils import nodes from docutils.parsers import rst from docutils.utils import new_document from docutils import frontend from sphinx.util.nodes import extract_messages def _get_doctree(text): settings = frontend.OptionParser( components=(rst.Parser,)).get_default_values() document = new_document('dummy.txt', settings) rst.Parser().parse(text, document) return document def assert_node_count(messages, node_type, expect_count): count = 0 node_list = [node for node, msg in messages] for node in node_list: if isinstance(node, node_type): count += 1 assert count == expect_count, ( "Count of %r in the %r is %d instead of %d" % (node_type, node_list, count, expect_count)) def test_extract_messages(): text = dedent( """ .. admonition:: admonition title admonition body """ ) yield ( assert_node_count, extract_messages(_get_doctree(text)), nodes.title, 1, ) text = dedent( """ .. figure:: foo.jpg this is title """ ) yield ( assert_node_count, extract_messages(_get_doctree(text)), nodes.caption, 1, ) text = dedent( """ .. rubric:: spam """ ) yield ( assert_node_count, extract_messages(_get_doctree(text)), nodes.rubric, 1, ) text = dedent( """ | spam | egg """ ) yield ( assert_node_count, extract_messages(_get_doctree(text)), nodes.line, 2, ) text = dedent( """ section ======= +----------------+ | | **Title 1** | | | Message 1 | +----------------+ """ ) yield ( assert_node_count, extract_messages(_get_doctree(text)), nodes.line, 2, ) text = dedent( """ * | **Title 1** | Message 1 """ ) yield ( assert_node_count, extract_messages(_get_doctree(text)), nodes.line, 2, )