1
0
mirror of https://github.com/django/django.git synced 2025-10-24 06:06:09 +00:00

Fixed #27906 -- Fixed test tools counting of HTML matches for subsets of elements.

Previously examples such as '<a/><b/>' would not match in '<a/><b/><c/>'.
This commit is contained in:
Jacob Walls
2020-09-20 10:14:54 -04:00
committed by Carlton Gibson
parent 01974d7f75
commit e26a7a8ef4
2 changed files with 38 additions and 1 deletions

View File

@@ -86,6 +86,7 @@ class Element:
if self.children == element.children:
return 1
i = 0
elem_child_idx = 0
for child in self.children:
# child is text content and element is also text content, then
# make a simple "text" in "text"
@@ -96,9 +97,26 @@ class Element:
elif element in child:
return 1
else:
# Look for element wholly within this child.
i += child._count(element, count=count)
if not count and i:
return i
# Also look for a sequence of element's children among self's
# children. self.children == element.children is tested above,
# but will fail if self has additional children. Ex: '<a/><b/>'
# is contained in '<a/><b/><c/>'.
if isinstance(element, RootElement) and element.children:
elem_child = element.children[elem_child_idx]
# Start or continue match, advance index.
if elem_child == child:
elem_child_idx += 1
# Match found, reset index.
if elem_child_idx == len(element.children):
i += 1
elem_child_idx = 0
# No match, reset index.
else:
elem_child_idx = 0
return i
def __contains__(self, element):