diff --git a/sphinx/testing/util.py b/sphinx/testing/util.py index eee8c86b9b..bfa12ece8d 100644 --- a/sphinx/testing/util.py +++ b/sphinx/testing/util.py @@ -65,10 +65,14 @@ def assert_node(node, cls=None, xpath="", **kwargs): if isinstance(cls[1], tuple): assert_node(node, cls[1], xpath=xpath, **kwargs) else: + assert isinstance(node, nodes.Element), \ + 'The node%s does not have any children' % xpath assert len(node) == 1, \ 'The node%s has %d child nodes, not one' % (xpath, len(node)) assert_node(node[0], cls[1:], xpath=xpath + "[0]", **kwargs) elif isinstance(cls, tuple): + assert isinstance(node, nodes.Element), \ + 'The node%s does not have any items' % xpath assert len(node) == len(cls), \ 'The node%s has %d child nodes, not %r' % (xpath, len(node), len(cls)) for i, nodecls in enumerate(cls): @@ -80,10 +84,15 @@ def assert_node(node, cls=None, xpath="", **kwargs): assert isinstance(node, cls), \ 'The node%s is not subclass of %r: %r' % (xpath, cls, node) - for key, value in kwargs.items(): - assert key in node, 'The node%s does not have %r attribute: %r' % (xpath, key, node) - assert node[key] == value, \ - 'The node%s[%s] is not %r: %r' % (xpath, key, value, node[key]) + if kwargs: + assert isinstance(node, nodes.Element), \ + 'The node%s does not have any attributes' % xpath + + for key, value in kwargs.items(): + assert key in node, \ + 'The node%s does not have %r attribute: %r' % (xpath, key, node) + assert node[key] == value, \ + 'The node%s[%s] is not %r: %r' % (xpath, key, value, node[key]) def etree_parse(path): diff --git a/tests/test_roles.py b/tests/test_roles.py index 13b4e194d7..b7c94fc551 100644 --- a/tests/test_roles.py +++ b/tests/test_roles.py @@ -20,62 +20,62 @@ def test_samp(): # normal case text = 'print 1+{variable}' ret, msg = emph_literal_role('samp', text, text, 0, Mock()) - assert_node(ret, ([nodes.literal, ("print 1+", - [nodes.emphasis, "variable"])],)) + assert_node(ret[0], [nodes.literal, ("print 1+", + [nodes.emphasis, "variable"])]) assert msg == [] # two emphasis items text = 'print {1}+{variable}' ret, msg = emph_literal_role('samp', text, text, 0, Mock()) - assert_node(ret, ([nodes.literal, ("print ", - [nodes.emphasis, "1"], - "+", - [nodes.emphasis, "variable"])],)) + assert_node(ret[0], [nodes.literal, ("print ", + [nodes.emphasis, "1"], + "+", + [nodes.emphasis, "variable"])]) assert msg == [] # empty curly brace text = 'print 1+{}' ret, msg = emph_literal_role('samp', text, text, 0, Mock()) - assert_node(ret, ([nodes.literal, "print 1+{}"],)) + assert_node(ret[0], [nodes.literal, "print 1+{}"]) assert msg == [] # half-opened variable text = 'print 1+{variable' ret, msg = emph_literal_role('samp', text, text, 0, Mock()) - assert_node(ret, ([nodes.literal, "print 1+{variable"],)) + assert_node(ret[0], [nodes.literal, "print 1+{variable"]) assert msg == [] # nested text = 'print 1+{{variable}}' ret, msg = emph_literal_role('samp', text, text, 0, Mock()) - assert_node(ret, ([nodes.literal, ("print 1+", - [nodes.emphasis, "{variable"], - "}")],)) + assert_node(ret[0], [nodes.literal, ("print 1+", + [nodes.emphasis, "{variable"], + "}")]) assert msg == [] # emphasized item only text = '{variable}' ret, msg = emph_literal_role('samp', text, text, 0, Mock()) - assert_node(ret, ([nodes.literal, nodes.emphasis, "variable"],)) + assert_node(ret[0], [nodes.literal, nodes.emphasis, "variable"]) assert msg == [] # escaping text = r'print 1+\{variable}' ret, msg = emph_literal_role('samp', text, text, 0, Mock()) - assert_node(ret, ([nodes.literal, "print 1+{variable}"],)) + assert_node(ret[0], [nodes.literal, "print 1+{variable}"]) assert msg == [] # escaping (2) text = r'print 1+\{{variable}\}' ret, msg = emph_literal_role('samp', text, text, 0, Mock()) - assert_node(ret, ([nodes.literal, ("print 1+{", - [nodes.emphasis, "variable"], - "}")],)) + assert_node(ret[0], [nodes.literal, ("print 1+{", + [nodes.emphasis, "variable"], + "}")]) assert msg == [] # escape a backslash text = r'print 1+\\{variable}' ret, msg = emph_literal_role('samp', text, text, 0, Mock()) - assert_node(ret, ([nodes.literal, ("print 1+\\", - [nodes.emphasis, "variable"])],)) + assert_node(ret[0], [nodes.literal, ("print 1+\\", + [nodes.emphasis, "variable"])]) assert msg == []