Skip to content

Commit 84c8bc4

Browse files
committed
Claude is testing testing testing
1 parent e20d1d4 commit 84c8bc4

4 files changed

Lines changed: 1131 additions & 0 deletions

File tree

‎test/test_feature_enumeration.py‎

Lines changed: 281 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,281 @@
1+
import unittest
2+
3+
from flm.flmenvironment import make_standard_environment
4+
from flm.stdfeatures import standard_features
5+
from flm.feature.enumeration import FeatureEnumeration, Enumeration
6+
from flm.fragmentrenderer.html import HtmlFragmentRenderer
7+
from flm.fragmentrenderer.text import TextFragmentRenderer
8+
from flm.fragmentrenderer.latex import LatexFragmentRenderer
9+
from flm.fragmentrenderer.markdown import MarkdownFragmentRenderer
10+
from flm.flmrecomposer.purelatex import FLMPureLatexRecomposer
11+
from pylatexenc.latexnodes import LatexWalkerLocatedError
12+
13+
14+
def mk_flm_environ(**kwargs):
15+
features = standard_features(**kwargs)
16+
return make_standard_environment(features)
17+
18+
19+
def render_doc(environ, flm_input):
20+
frag = environ.make_fragment(flm_input.strip())
21+
doc = environ.make_document(frag.render)
22+
fr = HtmlFragmentRenderer()
23+
result, _ = doc.render(fr)
24+
return result
25+
26+
27+
def render_doc_with(environ, flm_input, renderer_cls):
28+
frag = environ.make_fragment(flm_input.strip())
29+
doc = environ.make_document(frag.render)
30+
result, _ = doc.render(renderer_cls())
31+
return result
32+
33+
34+
# --- Feature attributes ---
35+
36+
class TestFeatureEnumerationInit(unittest.TestCase):
37+
38+
def test_feature_name(self):
39+
f = FeatureEnumeration()
40+
self.assertEqual(f.feature_name, 'enumeration')
41+
42+
def test_feature_title(self):
43+
f = FeatureEnumeration()
44+
self.assertEqual(f.feature_title, 'Enumeration and itemization lists')
45+
46+
def test_environment_names(self):
47+
f = FeatureEnumeration()
48+
defs = f.add_latex_context_definitions()
49+
env_names = sorted([e.environmentname for e in defs['environments']])
50+
self.assertEqual(env_names, ['description', 'enumerate', 'itemize'])
51+
52+
def test_enumeration_is_block_level(self):
53+
e = Enumeration('itemize')
54+
self.assertTrue(e.is_block_level)
55+
self.assertTrue(e.allowed_in_standalone_mode)
56+
57+
def test_no_managers(self):
58+
f = FeatureEnumeration()
59+
self.assertIsNone(f.DocumentManager)
60+
self.assertIsNone(f.RenderManager)
61+
62+
63+
# --- HTML rendering ---
64+
65+
class TestEnumerationHtml(unittest.TestCase):
66+
67+
maxDiff = None
68+
69+
def test_itemize(self):
70+
env = mk_flm_environ()
71+
result = render_doc(env, r'\begin{itemize}\item First\item Second\end{itemize}')
72+
self.assertEqual(
73+
result,
74+
'<dl class="enumeration itemize">'
75+
'<dt>\u2022</dt><dd><p>First</p></dd>'
76+
'<dt>\u2022</dt><dd><p>Second</p></dd>'
77+
'</dl>'
78+
)
79+
80+
def test_enumerate(self):
81+
env = mk_flm_environ()
82+
result = render_doc(env, r'\begin{enumerate}\item Alpha\item Beta\end{enumerate}')
83+
self.assertEqual(
84+
result,
85+
'<dl class="enumeration enumerate">'
86+
'<dt>1.</dt><dd><p>Alpha</p></dd>'
87+
'<dt>2.</dt><dd><p>Beta</p></dd>'
88+
'</dl>'
89+
)
90+
91+
def test_nested_itemize(self):
92+
env = mk_flm_environ()
93+
result = render_doc(env,
94+
r'\begin{itemize}\item Outer\begin{itemize}\item Inner\end{itemize}\end{itemize}')
95+
self.assertEqual(
96+
result,
97+
'<dl class="enumeration itemize">'
98+
'<dt>\u2022</dt><dd><p>Outer</p>\n'
99+
'<dl class="enumeration itemize">'
100+
'<dt>-</dt><dd><p>Inner</p></dd>'
101+
'</dl></dd></dl>'
102+
)
103+
104+
def test_enumerate_custom_template(self):
105+
env = mk_flm_environ()
106+
result = render_doc(env,
107+
r'\begin{enumerate}[i.]\item First\item Second\end{enumerate}')
108+
self.assertEqual(
109+
result,
110+
'<dl class="enumeration enumerate">'
111+
'<dt>i.</dt><dd><p>First</p></dd>'
112+
'<dt>ii.</dt><dd><p>Second</p></dd>'
113+
'</dl>'
114+
)
115+
116+
def test_item_custom_tag(self):
117+
env = mk_flm_environ()
118+
result = render_doc(env,
119+
r'\begin{enumerate}\item[*] Custom tag\end{enumerate}')
120+
self.assertEqual(
121+
result,
122+
'<dl class="enumeration enumerate">'
123+
'<dt>*</dt><dd><p>Custom tag</p></dd>'
124+
'</dl>'
125+
)
126+
127+
128+
# --- Text renderer ---
129+
130+
class TestEnumerationText(unittest.TestCase):
131+
132+
maxDiff = None
133+
134+
def test_itemize(self):
135+
env = mk_flm_environ()
136+
result = render_doc_with(env,
137+
r'\begin{itemize}\item First\item Second\end{itemize}',
138+
TextFragmentRenderer)
139+
self.assertEqual(
140+
result,
141+
' \u2022 First\n\n \u2022 Second'
142+
)
143+
144+
def test_enumerate(self):
145+
env = mk_flm_environ()
146+
result = render_doc_with(env,
147+
r'\begin{enumerate}\item Alpha\item Beta\end{enumerate}',
148+
TextFragmentRenderer)
149+
self.assertEqual(
150+
result,
151+
' 1. Alpha\n\n 2. Beta'
152+
)
153+
154+
def test_enumerate_roman(self):
155+
env = mk_flm_environ()
156+
result = render_doc_with(env,
157+
r'\begin{enumerate}[i.]\item First\item Second\end{enumerate}',
158+
TextFragmentRenderer)
159+
self.assertEqual(
160+
result,
161+
' i. First\n\n ii. Second'
162+
)
163+
164+
165+
# --- LaTeX renderer ---
166+
167+
class TestEnumerationLatex(unittest.TestCase):
168+
169+
maxDiff = None
170+
171+
def test_itemize(self):
172+
env = mk_flm_environ()
173+
result = render_doc_with(env,
174+
r'\begin{itemize}\item First\item Second\end{itemize}',
175+
LatexFragmentRenderer)
176+
self.assertEqual(
177+
result,
178+
'\\begin{itemize}% enumeration,itemize\n'
179+
'%\n'
180+
'\\item[{{\\textbullet}}]First\n'
181+
'%\n'
182+
'\\item[{{\\textbullet}}]Second%\n'
183+
'\\end{itemize}\n'
184+
)
185+
186+
def test_enumerate(self):
187+
env = mk_flm_environ()
188+
result = render_doc_with(env,
189+
r'\begin{enumerate}\item Alpha\item Beta\end{enumerate}',
190+
LatexFragmentRenderer)
191+
self.assertEqual(
192+
result,
193+
'\\begin{enumerate}% enumeration,enumerate\n'
194+
'%\n'
195+
'\\item[{1.}]Alpha\n'
196+
'%\n'
197+
'\\item[{2.}]Beta%\n'
198+
'\\end{enumerate}\n'
199+
)
200+
201+
202+
# --- Markdown renderer ---
203+
204+
class TestEnumerationMarkdown(unittest.TestCase):
205+
206+
maxDiff = None
207+
208+
def test_itemize(self):
209+
env = mk_flm_environ()
210+
result = render_doc_with(env,
211+
r'\begin{itemize}\item First\item Second\end{itemize}',
212+
MarkdownFragmentRenderer)
213+
self.assertEqual(
214+
result,
215+
'- \u2022 First\n\n- \u2022 Second'
216+
)
217+
218+
def test_enumerate(self):
219+
env = mk_flm_environ()
220+
result = render_doc_with(env,
221+
r'\begin{enumerate}\item Alpha\item Beta\end{enumerate}',
222+
MarkdownFragmentRenderer)
223+
self.assertEqual(
224+
result,
225+
'- 1\\. Alpha\n\n- 2\\. Beta'
226+
)
227+
228+
def test_custom_tag(self):
229+
env = mk_flm_environ()
230+
result = render_doc_with(env,
231+
r'\begin{enumerate}\item[*] Custom tag\end{enumerate}',
232+
MarkdownFragmentRenderer)
233+
self.assertEqual(
234+
result,
235+
'- \\* Custom tag'
236+
)
237+
238+
239+
# --- Recomposer ---
240+
241+
class TestEnumerationRecompose(unittest.TestCase):
242+
243+
maxDiff = None
244+
245+
def _recompose(self, flm_input, opts=None):
246+
env = mk_flm_environ()
247+
frag = env.make_fragment(flm_input.strip())
248+
recomposer = FLMPureLatexRecomposer(opts if opts is not None else {})
249+
return recomposer.recompose_pure_latex(frag.nodes)
250+
251+
def test_itemize(self):
252+
result = self._recompose(
253+
r'\begin{itemize}\item First\item Second\end{itemize}')
254+
self.assertEqual(
255+
result['latex'],
256+
r'\begin{itemize}\item First\item Second\end{itemize}'
257+
)
258+
259+
def test_enumerate(self):
260+
result = self._recompose(
261+
r'\begin{enumerate}\item Alpha\item Beta\end{enumerate}')
262+
self.assertEqual(
263+
result['latex'],
264+
r'\begin{enumerate}\item Alpha\item Beta\end{enumerate}'
265+
)
266+
267+
268+
# --- Error cases ---
269+
270+
class TestEnumerationErrors(unittest.TestCase):
271+
272+
def test_missing_item_raises(self):
273+
env = mk_flm_environ()
274+
with self.assertRaises(LatexWalkerLocatedError):
275+
env.make_fragment(
276+
r'\begin{itemize}no item here\end{itemize}'
277+
)
278+
279+
280+
if __name__ == '__main__':
281+
unittest.main()

0 commit comments

Comments
 (0)