@@ -294,8 +294,9 @@ def test_cdata_content(self):
294294 self ._run_check (s , [("starttag" , element_lower , []),
295295 ("data" , content ),
296296 ("endtag" , element_lower )])
297+
297298 def test_raw_text_content (self ):
298- """See gh-issue #118350"""
299+ # Tags should be treated as text in raw text and escapable raw text content.
299300 content = """<h1>tagshould be handled as text"""
300301 elements = [
301302 "script" ,
@@ -318,6 +319,33 @@ def test_raw_text_content(self):
318319 ("data" , content )
319320 ])
320321
322+ def test_escapable_raw_text_content (self ):
323+ # Charrefs should be escaped in esacapable raw text content.
324+ class Collector (EventCollector ):
325+ pass
326+
327+ content = "Timon & Pumba"
328+ expected = "Timon & Pumba"
329+ elements = [
330+ "title" ,
331+ "textarea" ,
332+ "TITLE" ,
333+ "TEXTAREA" ,
334+ "Title" ,
335+ "Textarea" ,
336+ ]
337+ for element in elements :
338+ source = f"<{ element } >{ content } "
339+ self ._run_check (
340+ source , [
341+ ("starttag" , element .lower (), []),
342+ ('data' , 'Timon ' ),
343+ ('entityref' , 'amp' ),
344+ ('data' , ' Pumba' )
345+ ],
346+ collector = Collector (convert_charrefs = False ),
347+ )
348+
321349 def test_cdata_with_closing_tags (self ):
322350 # see issue #13358
323351 # make sure that HTMLParser calls handle_data only once for each CDATA.
@@ -496,7 +524,7 @@ def test_slashes_in_starttag(self):
496524 ('starttag' , 'a' , [('foo' , None ), ('=' , None ), ('bar' , None )])
497525 ]
498526 self ._run_check (html , expected )
499- #see issue #14538
527+ # see issue #14538
500528 html = ('<meta><meta / ><meta // ><meta / / >'
501529 '<meta/><meta /><meta //><meta//>' )
502530 expected = [
@@ -909,4 +937,4 @@ def test_base_class_methods_called(self, super_reset_method, super_init_method):
909937
910938
911939if __name__ == "__main__" :
912- unittest .main ()
940+ unittest .main ()
0 commit comments