@@ -274,3 +274,44 @@ def test_contentformat_image_tags(self):
274
274
cf .img (url = "/test/image.png" , alt_text = "TEST" ),
275
275
expected ,
276
276
)
277
+
278
+ def test_alt_text_html_escape (self ):
279
+ testdata = [
280
+ (ContentFormat .HTML , 'te"st' , '<img src="." alt="te"st">' ),
281
+ (ContentFormat .HTML , "te<st>" , '<img src="." alt="te<st>">' ),
282
+ (ContentFormat .MARKDOWN , 'te"st' , '<img src="." alt="te"st">' ),
283
+ (ContentFormat .MARKDOWN , "te[st]" , '<img src="." alt="te[st]">' ),
284
+ (ContentFormat .MARKDOWN , "te{st}" , '<img src="." alt="te{st}">' ),
285
+ (ContentFormat .MARKDOWN , "te<st>" , '<img src="." alt="te<st>">' ),
286
+ (ContentFormat .MARKDOWN , "test*" , '<img src="." alt="test*">' ),
287
+ (ContentFormat .MARKDOWN , "test_" , '<img src="." alt="test_">' ),
288
+ (ContentFormat .MARKDOWN , "test`" , '<img src="." alt="test`">' ),
289
+ (ContentFormat .MARKDOWN , "test+" , '<img src="." alt="test+">' ),
290
+ (ContentFormat .MARKDOWN , "test-" , '<img src="." alt="test-">' ),
291
+ (ContentFormat .MARKDOWN , "test." , '<img src="." alt="test.">' ),
292
+ (ContentFormat .MARKDOWN , "test!" , '<img src="." alt="test!">' ),
293
+ (ContentFormat .MARKDOWN , "te\n st" , '<img src="." alt="te\n st">' ),
294
+ (ContentFormat .REST , 'te"st' , '<img src="." alt="te"st">' ),
295
+ (ContentFormat .REST , "te[st]" , '<img src="." alt="te[st]">' ),
296
+ (ContentFormat .REST , "te{st}" , '<img src="." alt="te{st}">' ),
297
+ (ContentFormat .REST , "te<st>" , '<img src="." alt="te<st>">' ),
298
+ (ContentFormat .REST , "te:st" , '<img src="." alt="te:st">' ),
299
+ (ContentFormat .REST , "test*" , '<img src="." alt="test*">' ),
300
+ (ContentFormat .REST , "test_" , '<img src="." alt="test_">' ),
301
+ (ContentFormat .REST , "test`" , '<img src="." alt="test`">' ),
302
+ (ContentFormat .REST , "test+" , '<img src="." alt="test+">' ),
303
+ (ContentFormat .REST , "test-" , '<img src="." alt="test-">' ),
304
+ (ContentFormat .REST , "test." , '<img src="." alt="test.">' ),
305
+ (ContentFormat .REST , "test!" , '<img src="." alt="test!">' ),
306
+ (ContentFormat .REST , "te\n st" , '<img src="." alt="te st">' ),
307
+ ]
308
+ for cf , alt_text , expected in testdata :
309
+ # RST doesn't like an empty src, so we use . instead
310
+ img_tag = cf .img (url = "." , alt_text = alt_text )
311
+ if cf is ContentFormat .MARKDOWN :
312
+ expected = f"<p>{ expected } </p>"
313
+ with self .subTest (cf = cf , alt_text = alt_text ):
314
+ self .assertHTMLEqual (
315
+ ContentFormat .to_html (cf , img_tag ),
316
+ expected ,
317
+ )
0 commit comments