
    MhX                        d Z ddlZddlZddlZddlmZ ddlmZmZm	Z	 ddl
mZ ddlmZmZmZmZmZmZ ddlmZ ddlmZ dd	lmZ d
dlmZmZmZ ddlZddlmZ  G d de          Z G d de          Z  G d de          Z! G d de          Z" G d de          Z# G d de          Z$ G d de          Z% G d de          Z&dS )z#Tests of Beautiful Soup as a whole.    N)Iterable)BeautifulSoupGuessedAtParserWarningdammit)TreeBuilder)AttributeValueListXMLAttributeDictCommentPYTHON_SPECIFIC_ENCODINGSTagNavigableString)SoupStrainerParserRejectedMarkup)MarkupResemblesLocatorWarning   )default_builderLXML_PRESENTSoupTest)Typec                       e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
ej                            d	d
dd g          d             ZdS )TestConstructorc                 X    d}|                      |          }d|j        j        k    sJ d S )Nu   <h1>éé</h1>u   éésouph1stringselfdatar   s      S/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/bs4/tests/test_soup.pytest_short_unicode_inputz(TestConstructor.test_short_unicode_input,   s1    yy''''''    c                 X    d}|                      |          }d|j        j        k    sJ d S )Nz<h1>foo bar</h1>zfoo barr   r   s      r!   test_embedded_nullz"TestConstructor.test_embedded_null1   s1    "yyTW^++++++r#   c                 z    d                     d          }|                     |dg          }d|j        k    sJ d S )Nu   Räksmörgåsutf-8)exclude_encodingszwindows-1252)encoder   original_encoding)r   	utf8_datar   s      r!   test_exclude_encodingsz&TestConstructor.test_exclude_encodings6   sF    #**733	yywiy@@!7777777r#   c                 z    G d dt                     }t          dd          }t          j        d          5  t	          dd|i|}d d d            n# 1 swxY w Y   t          |j        |          sJ t          d	          |j        j        k    sJ d
|j        j        k    sJ  |di |}t          j        d          5 }t	          d|d          }d d d            n# 1 swxY w Y   t          |d         j
                  }|                    d          sJ ||j        k    sJ ||j        k    sJ d S )Nc                   :    e Zd Zd Zd Zd Zd Zd ZexZZ	d Z
dS )7TestConstructor.test_custom_builder_class.<locals>.Mockc                     || _         d| _        d| _        g | _        g | _        i | _        t          | _        t          | _	        d S )NTF)
called_withis_xmlstore_line_numberscdata_list_attributespreserve_whitespace_tagsstring_containersr	   attribute_dict_classr   attribute_value_list_class)r   kwargss     r!   __init__z@TestConstructor.test_custom_builder_class.<locals>.Mock.__init__?   sG    #) "*/'-/*02-)+&,<)2D///r#   c                     d S N r   r   s     r!   initialize_soupzGTestConstructor.test_custom_builder_class.<locals>.Mock.initialize_soupI       r#   c                     || _         d S r<   )fed)r   markups     r!   feedz<TestConstructor.test_custom_builder_class.<locals>.Mock.feedL   s    !r#   c                     d S r<   r=   r   s    r!   resetz=TestConstructor.test_custom_builder_class.<locals>.Mock.resetO   r@   r#   c                     d S r<   r=   )r   ignores     r!   rI   z>TestConstructor.test_custom_builder_class.<locals>.Mock.ignoreR   r@   r#   c              ?      K   dV  d S )N)prepared markupzoriginal encodingzdeclared encodingzcontains replacement charactersr=   r   argsr9   s      r!   prepare_markupzFTestConstructor.test_custom_builder_class.<locals>.Mock.prepare_markupW   s$           r#   N)__name__
__module____qualname__r:   r?   rD   rG   rI   set_up_substitutionscan_be_empty_elementrN   r=   r#   r!   Mockr/   >   s        E E E  " " "     ;A@ #7    r#   rT   valueT)varconvertEntitiesrecord builder)rV   rK   )r[   ignored_valuer   zCKeyword arguments to the BeautifulSoup constructor will be ignored.)rZ   r=   )objectdictwarningscatch_warningsr   
isinstancer[   r1   rB   strmessage
startswith)r   rT   r9   r   r[   wmsgs          r!   test_custom_builder_classz)TestConstructor.test_custom_builder_class;   s   	 	 	 	 	6 	 	 	B  !	
 
 
 $D111 	= 	= <<T<V<<D	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	=$,-----   DL$<<<<< DL$44444
 $....$D111 	Q "  D	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 !A$,~~Q
 
 	
 	
 	
 $,&&&&,,,,,,,s#   AAAC%%C),C)c                      G d dt                     }d }t          j        t                    5 }t	          d|           d d d            n# 1 swxY w Y   dt          |j                  v sJ d S )Nc                       e Zd Zd ZdS ):TestConstructor.test_parser_markup_rejection.<locals>.Mockc                      t          d          )NzNope.r   rL   s      r!   rD   z?TestConstructor.test_parser_markup_rejection.<locals>.Mock.feed   s    *7333r#   N)rO   rP   rQ   rD   r=   r#   r!   rT   rj      s#        4 4 4 4 4r#   rT   c              ?   *   K   |d d dfV  |d d dfV  d S NFr=   )r   rC   rM   r9   s       r!   rN   zDTestConstructor.test_parser_markup_rejection.<locals>.prepare_markup   s8       $e++++$e++++++r#   rZ   )r[   zoThe markup you provided was rejected by the parser. Trying a different parser or a different encoding may help.)r   pytestraisesr   r   rb   rU   )r   rT   rN   exc_infos       r!   test_parser_markup_rejectionz,TestConstructor.test_parser_markup_rejection|   s    	4 	4 	4 	4 	4; 	4 	4 	4	, 	, 	, ]/00 	,H"d++++	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, ~8>""# # # # # #s   AAAc                    d}|                      |          }|j        }d|d         k    sJ ddg|d         k    sJ |                      |t          d           }d|j        d         k    sJ ddiddifD ]l}t          j        d	
          5  |                      |d |          }d d d            n# 1 swxY w Y   |j        }ddg|d         k    sJ d|d         k    sJ md S )Nz&<a id=" an id " class=" a class "></a>z an id idaclass)r[   multi_valued_attributesz	 a class *TrX   an)r   rt   r   r_   r`   )r   rC   r   rt   
switcheroos        r!   test_cdata_list_attributesz*TestConstructor.test_cdata_list_attributes   sn    :yy   FAdG####W~7++++
 yyRVyWWdfWo----  ;d4 		- 		-J(555   yyD* !                 A$<1T7****!G*,,,,,		- 		-s   B11B5	8B5	c           	          G d dt                      G d dt                     G d dt                    |                     dt           t          t          i          }t	          fd	|j        D                       sJ d S )
Nc                       e Zd ZdS )9TestConstructor.test_replacement_classes.<locals>.TagPlusNrO   rP   rQ   r=   r#   r!   TagPlusr}              Dr#   r   c                       e Zd ZdS )<TestConstructor.test_replacement_classes.<locals>.StringPlusNr~   r=   r#   r!   
StringPlusr      r   r#   r   c                       e Zd ZdS )=TestConstructor.test_replacement_classes.<locals>.CommentPlusNr~   r=   r#   r!   CommentPlusr      r   r#   r   z<a><b>foo</b>bar</a><!--whee-->)element_classesc              3   >   K   | ]}t          |f          V  d S r<   )ra   ).0xr   r   r   s     r!   	<genexpr>z;TestConstructor.test_replacement_classes.<locals>.<genexpr>   sE       
 
BCJq7J<==
 
 
 
 
 
r#   )r   r   r
   r   alldescendants)r   r   r   r   r   s     @@@r!   test_replacement_classesz(TestConstructor.test_replacement_classes   s   	 	 	 	 	c 	 	 		 	 	 	 	 	 	 		 	 	 	 	' 	 	 	 yy-W  
 
  
 
 
 
 
 
GKGW
 
 
 
 
 	
 	
 	
 	
 	
r#   c                 t    G d dt                     } G d dt                     }|                     d||d          }t          |j        j        d         t                     sJ t          |j        j        d         |          sJ |j        j        D ]}t          ||          sJ g |j        k    sJ d S )	Nc                       e Zd ZdS )ATestConstructor.test_alternate_string_containers.<locals>.PStringNr~   r=   r#   r!   PStringr      r   r#   r   c                       e Zd ZdS )ATestConstructor.test_alternate_string_containers.<locals>.BStringNr~   r=   r#   r!   BStringr      r   r#   r   z4<div>Hello.<p>Here is <b>some <i>bolded</i></b> text)bp)r6   r   )	r   r   ra   divcontentsr   r   stringsstring_container_stack)r   r   r   r   ss        r!    test_alternate_string_containersz0TestConstructor.test_alternate_string_containers   s   	 	 	 	 	o 	 	 		 	 	 	 	o 	 	 	 yyB   
 
 $(+A.@@@@@ $&/!,g66666  	* 	*Aa)))))) T0000000r#   
bad_markupr   Fc                     dS rm   r=   )r   s    r!   <lambda>zTestConstructor.<lambda>   s     r#   c                     t          j        t                    5 }t          |d           d d d            n# 1 swxY w Y   d|dt	          |j                  v sJ d S )Nhtml.parserz'Incoming markup is of an invalid type: z?. Markup must be a string, a bytestring, or an open filehandle.)rn   ro   	TypeErrorr   rb   rU   )r   r   rp   s      r!   test_invalid_markup_typez(TestConstructor.test_invalid_markup_type   s    ]9%% 	5*m444	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 Dj  D  D  D8>""# # # # # #s   7;;N)rO   rP   rQ   r"   r%   r,   rg   rq   rz   r   r   rn   markparametrizer   r=   r#   r!   r   r   +   s        ( ( (
, , ,
8 8 8
?- ?- ?-B
 
 
*- - ->
 
 
61 1 1B [\Auoo+FGG
 
 HG
 
 
r#   r   c                       e Zd Zej                            dddg          d             Zej                            dd eD             dgz             d             Zd	 Z	dS )

TestOutputz!eventual_encoding,actual_encoding)r'   r'   )utf-16r   c                 ~    |                      d          }d|_        d| d|                    |          k    sJ d S )N<tag></tag>Tz<?xml version="1.0" encoding="z"?>
<tag></tag>eventual_encoding)r   r2   decode)r   r   actual_encodingr   s       r!   test_decode_xml_declarationz&TestOutput.test_decode_xml_declaration   s`     yy''N_NNN{{->{??@ @ @ @ @ @r#   r   c                     g | ]}|S r=   r=   )r   r   s     r!   
<listcomp>zTestOutput.<listcomp>  s    CCCAaCCCr#   Nc                 l    t          dd          }d|_        d|                    |          k    sJ d S )Nr   r   Tz!<?xml version="1.0"?>
<tag></tag>r   )r   r2   r   )r   r   r   s      r!   Mtest_decode_xml_declaration_with_missing_or_python_internal_eventual_encodingzXTestOutput.test_decode_xml_declaration_with_missing_or_python_internal_eventual_encoding
  sT     ]M::3t{{/ 8C 8
 8
 
 
 
 
 
 
r#   c                    |                      d          }d|                    d          k    sJ d|                    d          k    sJ d|                                k    sJ d|                                k    sJ d S )Nr   s   <tag></tag>r'   )encodingz<tag>
</tag>
)r   r)   encode_contentsdecode_contentsprettifyr>   s     r!   testzTestOutput.test  s     yy''g!>!>>>>>!5!5w!5!G!GGGGG 4 4 6 66666 DMMOO333333r#   )
rO   rP   rQ   rn   r   r   r   r   r   r   r=   r#   r!   r   r      s        [+ 	
 

 

 

 [CC)BCCCtfL 

 

 

4 4 4 4 4r#   r   c                   N   e Zd Zdeej                 dee         dej        fdZdeej                 ddfdZ	d Z
d	 Zd
 Zd Zd Zd Zd Zej                            dg d          d             Zej                            dg d          d             Zd Zd Zd Zd ZdS )TestWarningsr_   clsreturnc                     |D ]-}t          |j        |          r|j        t          k    sJ |c S .t	          |d|          )Nz warning not found in )ra   rc   filename__file__	Exception)r   r_   r   re   s       r!   _assert_warningzTestWarnings._assert_warning,  sc      	 	A!)S)) zX---- XXFGGGr#   re   Nc                     |                      |t                    }t          |j                  }|                    t          j        d d                   sJ d S )N<   )r   r   rb   rc   rd   MESSAGE)r   re   warningrc   s       r!   _assert_no_parser_specifiedz(TestWarnings._assert_no_parser_specified5  sT    &&q*@AAgo&&!!"8"@""EFFFFFFFr#   c                     t          j        d          5 }t          d           d d d            n# 1 swxY w Y   |                     |           d S NTrX   <a><b></b></a>r_   r`   r   r   r   re   s     r!   #test_warning_if_no_parser_specifiedz0TestWarnings.test_warning_if_no_parser_specified:  s    $D111 	,Q*+++	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,((+++++s   266c                     t          j        d          5 }t          dd           d d d            n# 1 swxY w Y   |                     |           d S )NTrX   r   htmlr   r   s     r!   *test_warning_if_parser_specified_too_vaguez7TestWarnings.test_warning_if_parser_specified_too_vague?  s    $D111 	4Q*F333	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4((+++++s   377c                     t          j        d          5 }|                     d           d d d            n# 1 swxY w Y   g |k    sJ d S r   r_   r`   r   r   s     r!   ,test_no_warning_if_explicit_parser_specifiedz9TestWarnings.test_no_warning_if_explicit_parser_specifiedD  s    $D111 	(QII&'''	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	(Qwwwwww   8<<c                 <   t          dd          }t          j        d          5 }|                     d|           d d d            n# 1 swxY w Y   |                     |t
                    }t          |j                  }|                    d          sJ d S )	Nrt   r   )namer   TrX   r   
parse_onlyz7The given value for parse_only will exclude everything:)	r   r_   r`   r   r   UserWarningrb   rc   rd   )r   strainerre   r   rf   s        r!   +test_warning_if_strainer_filters_everythingz8TestWarnings.test_warning_if_strainer_filters_everythingI  s    S555$D111 	=QII&8I<<<	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	=&&q+66'/""~~WXXXXXXXs   AAAc                 H   t          j        d          5 }t          ddt          d                    }d d d            n# 1 swxY w Y   |                     |t
                    }t          |j                  }d|v sJ d|v sJ d	|                                k    sJ d S )
NTrX   r   r   r   )parseOnlyTheser   r   s   <b></b>)	r_   r`   r   r   r   DeprecationWarningrb   rc   r)   )r   re   r   r   rf   s        r!   )test_parseOnlyThese_renamed_to_parse_onlyz6TestWarnings.test_parseOnlyThese_renamed_to_parse_onlyQ  s    $D111 	Q  +C00  D	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 &&q*<=='/""3&&&&s""""T[[]]******s    AA	Ac                    t          j        d          5 }d}t          |dd          }d d d            n# 1 swxY w Y   |                     |t                    }t          |j                  }d|v sJ d|v sJ d|j        k    sJ d S )	NTrX   s   ér   utf8)fromEncodingr   from_encoding)r_   r`   r   r   r   rb   rc   r*   )r   re   r   r   r   rf   s         r!   *test_fromEncoding_renamed_to_from_encodingz7TestWarnings.test_fromEncoding_renamed_to_from_encoding^  s    $D111 	KQD }6JJJD	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K &&q*<=='/""$$$$#%%%%///////s   7;;c                     t          j        t                    5  |                     dd           d d d            d S # 1 swxY w Y   d S )Nz<a>T)no_such_argument)rn   ro   r   r   rF   s    r!   "test_unrecognized_keyword_argumentz/TestWarnings.test_unrecognized_keyword_argumenth  s    ]9%% 	4 	4IIedI333	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4s   ?AArC   )zmarkup.htmlz
markup.htmzmarkup.HTMLz
markup.txtzmarkup.xhtmlz
markup.xmlz/home/user/file.txtz/c:\user\file.html\\server\share\path\file.XhTmlc                     t          j        d          5 }t          |d           |                     |t                    }dt          |j                  v sJ 	 d d d            d S # 1 swxY w Y   d S )NTrX   r   zlooks more like a filenamer_   r`   r   r   r   rb   rc   )r   rC   re   r   s       r!   test_resembles_filename_warningz,TestWarnings.test_resembles_filename_warningl  s      $D111 	HQ&-000**1.KLLG/3w3G3GGGGGG	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	Hs   AA((A,/A,)r   
markuphtmlz
markup.comrZ   z	markup.jsz
markup.jpgzmarkup.markupz/home/user/filez)c:\user\file.html\\server\share\path\filezAlog message containing a url http://www.url.com/ right there.htmlztwo  consecutive  spaces.htmlztwo//consecutive//slashes.htmlz4looks/like/a/filename/but/oops/theres/a#comment.htmlztwo
lines.htmlzcontains?.htmlzcontains*.htmlzcontains#.htmlzcontains&.htmlzcontains;.htmlzcontains>.htmlzcontains<.htmlzcontains$.htmlzcontains|.htmlzcontains:.htmlz:-at-the-front.htmlc                     t          j        d          5 }|                     |           d d d            n# 1 swxY w Y   g |k    sJ d S )NTrX   r   )r   rC   re   s      r!   "test_resembles_filename_no_warningz/TestWarnings.test_resembles_filename_no_warning  s    P $D111 	QIIf	 	 	 	 	 	 	 	 	 	 	 	 	 	 	Qwwwwwwr   c                 @   d}t          j        d          5 }t          |d           d d d            n# 1 swxY w Y   |                     |t                    }dt          |j                  v sJ |t          |j                                      d          vsJ d S )Ns   http://www.crummybytes.com/TrX   r   looks more like a URLr   )r_   r`   r   r   r   rb   rc   r)   r   urlwarning_listr   s       r!   test_url_warning_with_bytes_urlz,TestWarnings.test_url_warning_with_bytes_url  s    ,$D111 	.\#}---	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	.&&|5RSS&#go*>*>>>>>#go..55f========   599c                    d}t          j        d          5 }t          |d           d d d            n# 1 swxY w Y   |                     |t                    }dt          |j                  v sJ |t          |j                  vsJ d S )Nzhttp://www.crummyunicode.com/TrX   r   r   r   r   s       r!   !test_url_warning_with_unicode_urlz.TestWarnings.test_url_warning_with_unicode_url  s    -$D111 	.\ #}---	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. &&|5RSS&#go*>*>>>>>#go........r   c                     t          j        d          5 }|                     d           d d d            n# 1 swxY w Y   t          d |D                       rJ d S )NTrX   s$   http://www.crummybytes.com/ is greatc              3   B   K   | ]}d t          |j                  v V  dS r   Nrb   rc   r   re   s     r!   r   zETestWarnings.test_url_warning_with_bytes_and_space.<locals>.<genexpr>  0      WWQ.#ai..@WWWWWWr#   r_   r`   r   anyr   r   s     r!   %test_url_warning_with_bytes_and_spacez2TestWarnings.test_url_warning_with_bytes_and_space  s     $D111 	?\II=>>>	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	?WW,WWWWWWWWWWr   c                     t          j        d          5 }|                     d           d d d            n# 1 swxY w Y   t          d |D                       rJ d S )NTrX   z&http://www.crummyunicode.com/ is greatc              3   B   K   | ]}d t          |j                  v V  dS r   r   r   s     r!   r   zGTestWarnings.test_url_warning_with_unicode_and_space.<locals>.<genexpr>  r   r#   r   r   s     r!   'test_url_warning_with_unicode_and_spacez4TestWarnings.test_url_warning_with_unicode_and_space  s    $D111 	@\II>???	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@WW,WWWWWWWWWWr   )rO   rP   rQ   r   r_   WarningMessager   Warningr   r   r   r   r   r   r   r   r   rn   r   r   r   r   r   r   r  r  r=   r#   r!   r   r   $  s       H !89H@DWH		 H H H HGXh6M-N GSW G G G G
, , ,
, , ,
  
Y Y Y+ + +0 0 04 4 4 [		
 		
 		
 H H H [ 	
  	
  	
# #H I# #H> > >/ / /X X XX X X X Xr#   r   c                       e Zd Zd ZdS )TestSelectiveParsingc                     d}t          d          }|                     ||          }|                                dk    sJ d S )Nz&No<b>Yes</b><a>No<b>Yes <c>Yes</c></b>r   r   s   <b>Yes</b><b>Yes <c>Yes</c></b>)r   r   r)   )r   rC   r   r   s       r!   test_parse_with_soupstrainerz1TestSelectiveParsing.test_parse_with_soupstrainer  sI    9$$yyHy55{{}} BBBBBBBr#   N)rO   rP   rQ   r
  r=   r#   r!   r  r    s(        C C C C Cr#   r  c                   j    e Zd ZdZd Zej                            e d          d             Z	d Z
dS )
TestNewTagz(Test the BeautifulSoup.new_tag() method.c                    |                      d          }|                    dddddi          }t          |t                    sJ d|j        k    sJ |j        dk    sJ t          dd          |j        k    sJ d |j        u sJ |                    d          }d |j        u sJ |                    dd 	          }d |j        u sJ |                    dd	          }d|j        k    sJ d S )
NrZ   footxtbazr   za name)r   barattrs)r  r   )r   )	r   new_tagra   r   r   r   r^   r  parent)r   r   r  s      r!   test_new_tagzTestNewTag.test_new_tag  s   yy}},,uUfhEW,XX'3'''''$$$$~&&&&H--->>>>w~%%%% ,,u%%w~%%%%,,uT,22w~%%%% ,,uR,00W^######r#   z-lxml not installed, cannot parse XML document)reasonc                     t          dd          }|                    d          }|                    d          }d|                                k    sJ d|                                k    sJ d S )NrZ   xmlbrr      <br/>s   <p/>r   r  r)   )r   xml_soupxml_brxml_ps       r!   5test_xml_tag_inherits_self_closing_rules_from_builderz@TestNewTag.test_xml_tag_inherits_self_closing_rules_from_builder  ss     !U++!!$''  %% 6==??****%,,..((((((r#   c                     t          dd          }|                    d          }|                    d          }d|                                k    sJ d|                                k    sJ d S )NrZ   r   r  r   r  s   <p></p>r  )r   	html_souphtml_brhtml_ps       r!   1test_tag_inherits_self_closing_rules_from_builderz<TestNewTag.test_tag_inherits_self_closing_rules_from_builder  ss    !"m44	##D))""3'' 7>>++++++V]]__,,,,,,r#   N)rO   rP   rQ   __doc__r  rn   r   skipifr   r  r$  r=   r#   r!   r  r    sv        22$ $ $& [!P   ) ) )- - - - -r#   r  c                       e Zd ZdZd Zd ZdS )TestNewStringz+Test the BeautifulSoup.new_string() method.c                     |                      d          }|                    d          }d|k    sJ t          |t                    sJ d S NrZ   r  )r   
new_stringra   r   r   r   r   s      r!   'test_new_string_creates_navigablestringz5TestNewString.test_new_string_creates_navigablestring  sK    yy}}OOE""zzzz!_-------r#   c                     |                      d          }|                    dt                    }d|k    sJ t          |t                    sJ d S r*  )r   r+  r
   ra   r,  s      r!   3test_new_string_can_create_navigablestring_subclasszATestNewString.test_new_string_can_create_navigablestring_subclass  sM    yy}}OOE7++zzzz!W%%%%%%%r#   N)rO   rP   rQ   r%  r-  r/  r=   r#   r!   r(  r(    s8        55. . .& & & & &r#   r(  c                       e Zd Zd Zd ZdS )
TestPicklec                     |                      d          }t          j        |          }t          j        |          }d|j        j        k    sJ d S )Nz<a>some markup</a>some markup)r   pickledumpsloadsrt   r   r   r   pickled	unpickleds       r!   test_normal_picklezTestPickle.test_normal_pickle  sN    yy-..,t$$L))		 2222222r#   c                     |                      d          }d |_        t          j        |          }t          j        |          }d|j        k    sJ d S )Nr3  )r   r[   r4  r5  r6  r   r7  s       r!   test_pickle_with_no_builderz&TestPickle.test_pickle_with_no_builder  sT     yy'',t$$L))		 0000000r#   N)rO   rP   rQ   r:  r<  r=   r#   r!   r1  r1    s2        3 3 31 1 1 1 1r#   r1  c                   ,    e Zd Zd Zd Zd Zd Zd ZdS )TestEncodingConversionc                 l    d| _         | j                             d          | _        | j        dk    sJ d S )NuU   <html><head><meta charset="utf-8"/></head><body><foo>Sacré bleu!</foo></body></html>r'   sU   <html><head><meta charset="utf-8"/></head><body><foo>Sacré bleu!</foo></body></html>)unicode_datar)   r+   rF   s    r!   setup_methodz#TestEncodingConversion.setup_method)  sS     U*11':: Nmn n n n n nr#   c                 J   t           j        }t          j        t          j                   	 d }|t           _        d}|                     |          }|                                }t          |t                    sJ || 	                    |                                          k    sJ |j
                                        dk    sJ 	 t          j        t          j                   |t           _        d S # t          j        t          j                   |t           _        w xY w)Nc                     d S r<   r=   )rb   s    r!   noopz>TestEncodingConversion.test_ascii_in_unicode_out.<locals>.noop9  s    tr#   s   <foo>a</foo>r'   )r   _chardet_dammitloggingdisableWARNINGr   r   ra   rb   document_forr*   lowerNOTSET)r   chardetrD  asciisoup_from_asciiunicode_outputs         r!   test_ascii_in_unicode_outz0TestEncodingConversion.test_ascii_in_unicode_out2  s    ((((	-   &*F"#E"ii..O,3355Nnc22222!T%6%6u||~~%F%FFFFF"4::<<GGGGGOGN+++%,F""" OGN+++%,F",,,,s   BC6 6,D"c                     |                      | j                  }|                                | j        k    sJ |j        j        dk    sJ |j        J d S Nu   Sacré bleu!)r   r@  r   r  r   r*   r   soup_from_unicodes     r!   test_unicode_in_unicode_outz2TestEncodingConversion.test_unicode_in_unicode_outH  sf     !IId&788 ''))T->>>>> $+/????? 2:::::r#   c                     |                      | j                  }|                                | j        k    sJ |j        j        dk    sJ d S rR  )r   r+   r   r@  r  r   )r   soup_from_utf8s     r!   test_utf8_in_unicode_outz/TestEncodingConversion.test_utf8_in_unicode_outP  sU     4>22$$&&$*;;;;;!(,<<<<<<<r#   c                 z    |                      | j                  }|                    d          | j        k    sJ d S )Nr'   )r   r@  r)   r+   rS  s     r!   test_utf8_outz$TestEncodingConversion.test_utf8_outW  s>     IId&788 ''00DNBBBBBBr#   N)rO   rP   rQ   rA  rP  rU  rX  rZ  r=   r#   r!   r>  r>  %  sd        
 
 
- - -,; ; ;= = =C C C C Cr#   r>  )'r%  rF  r4  rn   typingr   bs4r   r   r   bs4.builderr   bs4.elementr   r	   r
   r   r   r   
bs4.filterr   bs4.exceptionsr   bs4._warningsr   rZ   r   r   r   r_   r   r   r   r   r  r  r(  r1  r>  r=   r#   r!   <module>rb     s   ) )                  
                     $ # # # # #          
         
       H
 H
 H
 H
 H
h H
 H
 H
V+4 +4 +4 +4 +4 +4 +4 +4\eX eX eX eX eX8 eX eX eXPC C C C C8 C C C+- +- +- +- +- +- +- +-\& & & & &H & & & 1 1 1 1 1 1 1 1&5C 5C 5C 5C 5CX 5C 5C 5C 5C 5Cr#   