﻿id	summary	reporter	owner	description	type	status	component	version	severity	resolution	keywords	cc	stage	has_patch	needs_docs	needs_tests	needs_better_patch	easy	ui_ux
24112	Inconsistency in TestCase.assertInHTML	Andrew Plummer	nobody	"assertInHTML(needle, haystack) has the following behaviour

{{{assertInHTML('<p>a</p>', '<div><p>a</p><p>b</p></div>')}}} passes: clearly correct

{{{assertInHTML('<p>a</p><p>b</p>', '<p>a</p><p>b</p>')}}} passes: possibly correct

{{{assertInHTML('<p>a</p><p>b</p>', '<div><p>a</p><p>b</p></div>')}}} fails with an assertion error:
{{{
  File "".../django/test/testcases.py"", line 673, in assertInHTML
    msg_prefix + ""Couldn't find '%s' in response"" % needle)
AssertionError: Couldn't find '<p>
a
</p><p>
b
</p>' in response
}}}

Which seems wrong. It doesn't handle the case correctly if the needle doesn't have a single top-level element (unless the two bits of html are equivalent). This is down to the  `_count` method of `django.test.html.Element`

I think this should throw a ValueError if the needle has multiple top level elements. However, this does change existing behaviour for the case where the html fragments are equivalent. An alternative would be to try to correctly handle the count in this case, which is possibly a bit fiddly, and the current implementation appears to make no attempt to do this.

I have a patch for the first case: https://github.com/plumdog/django/commit/bfdfda315ad74d067be52888a236ab7a4aadcf96"	Uncategorized	new	Testing framework	1.7	Normal				Unreviewed	0	0	0	0	0	0
