1""" 2 test_roles 3 ~~~~~~~~~~ 4 5 Test sphinx.roles 6 7 :copyright: Copyright 2007-2021 by the Sphinx team, see AUTHORS. 8 :license: BSD, see LICENSE for details. 9""" 10 11from unittest.mock import Mock 12 13from docutils import nodes 14 15from sphinx.roles import EmphasizedLiteral 16from sphinx.testing.util import assert_node 17 18 19def test_samp(): 20 emph_literal_role = EmphasizedLiteral() 21 22 # normal case 23 text = 'print 1+{variable}' 24 ret, msg = emph_literal_role('samp', text, text, 0, Mock()) 25 assert_node(ret[0], [nodes.literal, ("print 1+", 26 [nodes.emphasis, "variable"])]) 27 assert msg == [] 28 29 # two emphasis items 30 text = 'print {1}+{variable}' 31 ret, msg = emph_literal_role('samp', text, text, 0, Mock()) 32 assert_node(ret[0], [nodes.literal, ("print ", 33 [nodes.emphasis, "1"], 34 "+", 35 [nodes.emphasis, "variable"])]) 36 assert msg == [] 37 38 # empty curly brace 39 text = 'print 1+{}' 40 ret, msg = emph_literal_role('samp', text, text, 0, Mock()) 41 assert_node(ret[0], [nodes.literal, "print 1+{}"]) 42 assert msg == [] 43 44 # half-opened variable 45 text = 'print 1+{variable' 46 ret, msg = emph_literal_role('samp', text, text, 0, Mock()) 47 assert_node(ret[0], [nodes.literal, "print 1+{variable"]) 48 assert msg == [] 49 50 # nested 51 text = 'print 1+{{variable}}' 52 ret, msg = emph_literal_role('samp', text, text, 0, Mock()) 53 assert_node(ret[0], [nodes.literal, ("print 1+", 54 [nodes.emphasis, "{variable"], 55 "}")]) 56 assert msg == [] 57 58 # emphasized item only 59 text = '{variable}' 60 ret, msg = emph_literal_role('samp', text, text, 0, Mock()) 61 assert_node(ret[0], [nodes.literal, nodes.emphasis, "variable"]) 62 assert msg == [] 63 64 # escaping 65 text = r'print 1+\{variable}' 66 ret, msg = emph_literal_role('samp', text, text, 0, Mock()) 67 assert_node(ret[0], [nodes.literal, "print 1+{variable}"]) 68 assert msg == [] 69 70 # escaping (2) 71 text = r'print 1+\{{variable}\}' 72 ret, msg = emph_literal_role('samp', text, text, 0, Mock()) 73 assert_node(ret[0], [nodes.literal, ("print 1+{", 74 [nodes.emphasis, "variable"], 75 "}")]) 76 assert msg == [] 77 78 # escape a backslash 79 text = r'print 1+\\{variable}' 80 ret, msg = emph_literal_role('samp', text, text, 0, Mock()) 81 assert_node(ret[0], [nodes.literal, ("print 1+\\", 82 [nodes.emphasis, "variable"])]) 83 assert msg == [] 84