@@ -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