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
|
"""
Pygments RTF formatter tests
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
:copyright: Copyright 2006-2022 by the Pygments team, see AUTHORS.
:license: BSD, see LICENSE for details.
"""
from io import StringIO
from pygments.formatters import RtfFormatter
from pygments.lexers.special import TextLexer
foot = (r'\par' '\n' r'}')
def _escape(string):
return string.replace("\n", r"\n")
def _build_message(*args, **kwargs):
string = kwargs.get('string', None)
t = _escape(kwargs.get('t', ''))
expected = _escape(kwargs.get('expected', ''))
result = _escape(kwargs.get('result', ''))
if string is None:
string = ("The expected output of '{t}'\n"
"\t\tShould be '{expected}'\n"
"\t\tActually outputs '{result}'\n"
"\t(WARNING: Partial Output of Result!)")
end = -len(_escape(foot))
start = end - len(expected)
return string.format(t=t,
result = result[start:end],
expected = expected)
def format_rtf(t):
tokensource = list(TextLexer().get_tokens(t))
fmt = RtfFormatter()
buf = StringIO()
fmt.format(tokensource, buf)
result = buf.getvalue()
buf.close()
return result
def test_rtf_header():
t = ''
result = format_rtf(t)
expected = r'{\rtf1\ansi\uc0'
msg = ("RTF documents are expected to start with '{expected}'\n"
"\t\tStarts intead with '{result}'\n"
"\t(WARNING: Partial Output of Result!)".format(
expected=expected,
result=result[:len(expected)]))
assert result.startswith(expected), msg
def test_rtf_footer():
t = ''
result = format_rtf(t)
expected = ''
msg = ("RTF documents are expected to end with '{expected}'\n"
"\t\tEnds intead with '{result}'\n"
"\t(WARNING: Partial Output of Result!)".format(
expected=_escape(expected),
result=_escape(result[-len(expected):])))
assert result.endswith(expected+foot), msg
def test_ascii_characters():
t = 'a b c d ~'
result = format_rtf(t)
expected = (r'a b c d ~')
msg = _build_message(t=t, result=result, expected=expected)
assert result.endswith(expected+foot), msg
def test_escape_characters():
t = '\\ {{'
result = format_rtf(t)
expected = r'\\ \{\{'
msg = _build_message(t=t, result=result, expected=expected)
assert result.endswith(expected+foot), msg
def test_single_characters():
t = 'â € ¤ каждой'
result = format_rtf(t)
expected = (r'{\u226} {\u8364} {\u164} '
r'{\u1082}{\u1072}{\u1078}{\u1076}{\u1086}{\u1081}')
msg = _build_message(t=t, result=result, expected=expected)
assert result.endswith(expected+foot), msg
def test_double_characters():
t = 'က 힣 ↕ ↕︎ 鼖'
result = format_rtf(t)
expected = (r'{\u4096} {\u55203} {\u8597} '
r'{\u8597}{\u65038} {\u55422}{\u56859}')
msg = _build_message(t=t, result=result, expected=expected)
assert result.endswith(expected+foot), msg
|