o
7a4 @ s d Z dZddlZddlZddlZddlZddlZddlmZ ddlm Z ddl
mZmZm
Z
mZmZmZmZmZmZ ddlmZ eZdZG d d
d
ejZG dd deZG d
d deZG dd deZG dd deZdd ZdS )zHelper classes for tests.MIT N)TestCase)
BeautifulSoup) CharsetMetaAttributeValueCommentContentMetaAttributeValueDoctypePYTHON_SPECIFIC_ENCODINGSSoupStrainerScript
StylesheetTag)HTMLParserTreeBuilderu-
A bare string
A tag
A tag that supposedly has contents.
AT&T
This numeric entity is missing the final semicolon:
c @ sD e Zd Zedd Zdd Zdd Zddd Zd
d Zdd
dZ dS )SoupTestc C s t S N)default_builderself r -/usr/lib/python3/dist-packages/bs4/testing.pyr D s zSoupTest.default_builderc K s" | d| j}t|fd|i|S )z*Build a Beautiful Soup object from markup.builder)popr r )r markupkwargsr r r r soupH s z
SoupTest.soupc K s | j di ||S )z[Turn an HTML fragment into a document.
The details depend on the builder.
Nr )r test_fragment_to_document)r r r r r r document_forM s zSoupTest.document_forNc C st | j }t||d}|d u r|}| | | | tdd t|j D s*J | |j gdd |j
D d S )N)r c s s | ]}|d kV qdS )r Nr ).0vr r r b s z,SoupTest.assertSoupEquals..c S s g | ]}|j qS r )name)r xr r r
g s z-SoupTest.assertSoupEquals..)r r assertEqualdecoder alllistopen_tag_countervalues
ROOT_TAG_NAMEtagStack)r to_parsecompare_parsed_tor objr r r assertSoupEqualsT s zSoupTest.assertSoupEqualsc C s8 d}|j D ]}|r| ||j | ||j |}qdS )zyEnsure that next_element and previous_element are properly
set for all descendants of the given element.
N)descendantsr# next_elementprevious_element)r elementearlierer r r assertConnectednessj s
zSoupTest.assertConnectednessFc C s d}|j du r4|jdu sJ d||jd|jdu s%J d||jd|jdu s4J d||jdd}d}d}t|jd }|jD ]}d}|dkr|j dur~|j|u s`J d||j||j|u soJ d||j||jdu s~J d||jdn\|j|j|d u sJ d ||j|j|d |j|d j|u sJ d
|j|d |j|d j||dur|j|u sJ d||j||j j|j|u sJ d||j|t|t r|jr|
|d
}|jdu sJ d
||jd|dur|}n|}||kr|jdu sJ d
||jd|d7 }qD|dur"|n|}|du r+|}|sn|durn|} |du rN|jdu sKJ d||jd dS |jduri|j|ju sfJ d||j|j dS |j }q6|S )z.Ensure proper linkage throughout the document.Nz3Bad previous_element
NODE: {}
PREV: {}
EXPECTED: {}z3Bad previous_sibling
NODE: {}
PREV: {}
EXPECTED: {}z/Bad next_sibling
NODE: {}
NEXT: {}
EXPECTED: {}r z/Bad next_element
NODE: {}
NEXT: {}
EXPECTED: {}z2Bad previous_sibling
NODE: {}
PREV {}
EXPECTED: {}z1Bad previous_sibling
NODE: {}
PREV {}
EXPECTED {}z-Bad next_sibling
NODE: {}
NEXT {}
EXPECTED {}z=Bad previous_element
NODE: {}
PREV {}
EXPECTED {}
CONTENTS {}z-Bad next_element
NODE: {}
NEXT {}
EXPECTED {}T)parentr1 formatprevious_siblingnext_siblinglencontentsr0
isinstancer
linkage_validator) r el_recursive_call
descendantidxchild
last_childlast_idxtargetr r r r> u s
zSoupTest.linkage_validatorr )F)
__name__
__module____qualname__propertyr r r r. r5 r> r r r r r B s
r c @ s e Zd Zdd ZdS )TreeBuilderSmokeTestc C sH g }|D ]}t jdd
| |}W d n1 sw Y qd S )NF)record)warningscatch_warningsr )r
bad_markupr r r r r test_fuzzed_input s z&TreeBuilderSmokeTest.test_fuzzed_inputN)rG rH rI rP r r r r rK s rK c @ s
e Zd ZdZdd Zdd Zdd Zdd ZdddZd
d Z dd Z
dd Zdd Zdd Z
dd Zdd Zdd Zdd Zdd Zd!d" Zd#d$ Zd%d&