@@ -317,6 +317,49 @@ def test_style_content(self, content):
317317                            ("data" , content ),
318318                            ("endtag" , "style" )])
319319
320+     @support .subTests ('content' , [ 
321+             '<!-- not a comment -->' , 
322+             "<not a='start tag'>" , 
323+             '<![CDATA[not a cdata]]>' , 
324+             '<!not a bogus comment>' , 
325+             '</not a bogus comment>' , 
326+             '\u2603 ' , 
327+             '< /title>' , 
328+             '</ title>' , 
329+             '</titled>' , 
330+             '</title\v >' , 
331+             '</title\xa0 >' , 
332+             '</tıtle>' , 
333+         ]) 
334+     def  test_title_content (self , content ):
335+         source  =  f"<title>{ content }  </title>" 
336+         self ._run_check (source , [
337+             ("starttag" , "title" , []),
338+             ("data" , content ),
339+             ("endtag" , "title" ),
340+         ])
341+ 
342+     @support .subTests ('content' , [ 
343+             '<!-- not a comment -->' , 
344+             "<not a='start tag'>" , 
345+             '<![CDATA[not a cdata]]>' , 
346+             '<!not a bogus comment>' , 
347+             '</not a bogus comment>' , 
348+             '\u2603 ' , 
349+             '< /textarea>' , 
350+             '</ textarea>' , 
351+             '</textareable>' , 
352+             '</textarea\v >' , 
353+             '</textarea\xa0 >' , 
354+         ]) 
355+     def  test_textarea_content (self , content ):
356+         source  =  f"<textarea>{ content }  </textarea>" 
357+         self ._run_check (source , [
358+             ("starttag" , "textarea" , []),
359+             ("data" , content ),
360+             ("endtag" , "textarea" ),
361+         ])
362+ 
320363    @support .subTests ('endtag' , ['script' , 'SCRIPT' , 'script ' , 'script\n ' , 
321364                                 'script/' , 'script foo=bar' , 'script foo=">"' ]) 
322365    def  test_script_closing_tag (self , endtag ):
@@ -346,6 +389,38 @@ def test_style_closing_tag(self, endtag):
346389                            ("endtag" , "style" )],
347390                        collector = EventCollectorNoNormalize (convert_charrefs = False ))
348391
392+     @support .subTests ('endtag' , ['title' , 'TITLE' , 'title ' , 'title\n ' , 
393+                                  'title/' , 'title foo=bar' , 'title foo=">"' ]) 
394+     def  test_title_closing_tag (self , endtag ):
395+         content  =  "<!-- not a comment --><i>Egg & Spam</i>" 
396+         s  =  f'<TitLe>{ content }  </{ endtag }  >' 
397+         self ._run_check (s , [("starttag" , "title" , []),
398+                             ('data' , '<!-- not a comment --><i>Egg & Spam</i>' ),
399+                             ("endtag" , "title" )],
400+                         collector = EventCollectorNoNormalize (convert_charrefs = True ))
401+         self ._run_check (s , [("starttag" , "title" , []),
402+                             ('data' , '<!-- not a comment --><i>Egg ' ),
403+                             ('entityref' , 'amp' ),
404+                             ('data' , ' Spam</i>' ),
405+                             ("endtag" , "title" )],
406+                         collector = EventCollectorNoNormalize (convert_charrefs = False ))
407+ 
408+     @support .subTests ('endtag' , ['textarea' , 'TEXTAREA' , 'textarea ' , 'textarea\n ' , 
409+                                  'textarea/' , 'textarea foo=bar' , 'textarea foo=">"' ]) 
410+     def  test_textarea_closing_tag (self , endtag ):
411+         content  =  "<!-- not a comment --><i>Egg & Spam</i>" 
412+         s  =  f'<TexTarEa>{ content }  </{ endtag }  >' 
413+         self ._run_check (s , [("starttag" , "textarea" , []),
414+                             ('data' , '<!-- not a comment --><i>Egg & Spam</i>' ),
415+                             ("endtag" , "textarea" )],
416+                         collector = EventCollectorNoNormalize (convert_charrefs = True ))
417+         self ._run_check (s , [("starttag" , "textarea" , []),
418+                             ('data' , '<!-- not a comment --><i>Egg ' ),
419+                             ('entityref' , 'amp' ),
420+                             ('data' , ' Spam</i>' ),
421+                             ("endtag" , "textarea" )],
422+                         collector = EventCollectorNoNormalize (convert_charrefs = False ))
423+ 
349424    @support .subTests ('tail,end' , [ 
350425        ('' , False ), 
351426        ('<' , False ), 
@@ -363,6 +438,27 @@ def test_eof_in_script(self, tail, end):
363438                            ("data" , content  if  end  else  content  +  tail )],
364439                        collector = EventCollectorNoNormalize (convert_charrefs = False ))
365440
441+     @support .subTests ('tail,end' , [ 
442+         ('' , False ), 
443+         ('<' , False ), 
444+         ('</' , False ), 
445+         ('</t' , False ), 
446+         ('</title' , False ), 
447+         ('</title ' , True ), 
448+         ('</title foo=bar' , True ), 
449+         ('</title foo=">' , True ), 
450+     ]) 
451+     def  test_eof_in_title (self , tail , end ):
452+         s  =  f'<TitLe>Egg & Spam{ tail }  ' 
453+         self ._run_check (s , [("starttag" , "title" , []),
454+                             ("data" , "Egg & Spam"  +  (''  if  end  else  tail ))],
455+                         collector = EventCollectorNoNormalize (convert_charrefs = True ))
456+         self ._run_check (s , [("starttag" , "title" , []),
457+                             ('data' , 'Egg ' ),
458+                             ('entityref' , 'amp' ),
459+                             ('data' , ' Spam'  +  (''  if  end  else  tail ))],
460+                         collector = EventCollectorNoNormalize (convert_charrefs = False ))
461+ 
366462    def  test_comments (self ):
367463        html  =  ("<!-- I'm a valid comment -->" 
368464                '<!--me too!-->' 
0 commit comments