
    hX                     h   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&y)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                  j                  d	d
dd g      d        Zy)TestConstructorc                 `    d}| j                  |      }d|j                  j                  k(  sJ y )Nu   <h1>éé</h1>u   éésouph1stringselfdatar   s      {/var/labsstorage/home/kalaiyarasan.offl.2004/htdocs/course/socket/myenv/lib/python3.12/site-packages/bs4/tests/test_soup.pytest_short_unicode_inputz(TestConstructor.test_short_unicode_input,   s*    yy'''    c                 `    d}| j                  |      }d|j                  j                  k(  sJ y )Nz<h1>foo bar</h1>zfoo barr   r   s      r!   test_embedded_nullz"TestConstructor.test_embedded_null1   s*    "yyTWW^^+++r#   c                 p    dj                  d      }| j                  |dg      }d|j                  k(  sJ y )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   s:    #**73	yywiy@!7!7777r#   c                 x    G d dt               }t        dd      }t        j                  d      5  t	        dd|i|}d d d        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        t        d   j                        }|j                  d      sJ ||j                  k(  sJ ||j                  k(  sJ y # 1 sw Y   xY w# 1 sw Y   cxY w)Nc                   8    e Zd Zd Zd Zd Zd Zd ZexZZ	d Z
y)7TestConstructor.test_custom_builder_class.<locals>.Mockc                     || _         d| _        d| _        g | _        g | _        i | _        t        | _        t        | _	        y )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__?   sA    #) "*/'-/*02-)+&,<)2D/r#   c                      y N r   r   s     r!   initialize_soupzGTestConstructor.test_custom_builder_class.<locals>.Mock.initialize_soupI       r#   c                     || _         y r<   )fed)r   markups     r!   feedz<TestConstructor.test_custom_builder_class.<locals>.Mock.feedL   s	    !r#   c                      y r<   r=   r   s    r!   resetz=TestConstructor.test_custom_builder_class.<locals>.Mock.resetO   r@   r#   c                      y r<   r=   )r   ignores     r!   rI   z>TestConstructor.test_custom_builder_class.<locals>.Mock.ignoreR   r@   r#   c              ?      K   d y w)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      s   N)__name__
__module____qualname__r:   r?   rD   rG   rI   set_up_substitutionscan_be_empty_elementrN   r=   r#   r!   Mockr/   >   s0    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 	= <T<V<D	=$,,--- DLL$<$<<<< DLL$4$4444
 ..$$D1 	Q "D	 !A$,,~~Q
 	
 
 $,,&&&,,,,,+	= 	=	 	s   D$?D0$D-0D9c                      G d dt               }d }t        j                  t              5 }t	        d|       d d d        dt        j                        v sJ y # 1 sw Y   #xY w)Nc                       e Zd Zd Zy):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3r#   N)rO   rP   rQ   rD   r=   r#   r!   rT   rj      s    4r#   rT   c              ?   ,   K   |d d df |d d df y wNFr=   )r   rC   rM   r9   s       r!   rN   zDTestConstructor.test_parser_markup_rejection.<locals>.prepare_markup   s&      $e++$e++s   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|   sd    	4; 	4	, ]]/0 	,H"d+	, ~8>>"#	
#	, 	,s   AA%c                    d}| j                  |      }|j                  }d|d   k(  sJ ddg|d   k(  sJ | j                  |t        d       }d|j                  d   k(  sJ ddiddifD ]W  }t        j                  d	
      5  | j                  |d |      }d d d        |j                  }ddg|d   k(  sJ d|d   k(  rWJ  y # 1 sw Y   .xY w)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   s    :yy  FFAdG###W~7+++
 yyRVyWdffWo---  ;d4 		-J((5  yyD* !  A$<1T7***!G*,,,		- s   CC	c           	           G d dt                G d dt               G d dt              | j                  dt         t        t        i      }t	        fd	|j
                  D              sJ y )
Nc                       e Zd Zy)9TestConstructor.test_replacement_classes.<locals>.TagPlusNrO   rP   rQ   r=   r#   r!   TagPlusr}          r#   r   c                       e Zd Zy)<TestConstructor.test_replacement_classes.<locals>.StringPlusNr~   r=   r#   r!   
StringPlusr      r   r#   r   c                       e Zd Zy)=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        y wr<   )ra   ).0xr   r   r   s     r!   	<genexpr>z;TestConstructor.test_replacement_classes.<locals>.<genexpr>   s$      
BCJq7J<=
s   )r   r   r
   r   alldescendants)r   r   r   r   r   s     @@@r!   test_replacement_classesz(TestConstructor.test_replacement_classes   sz    	c 		 		' 	 yy-W  
  
GKGWGW
 
 	
 
r#   c                 |    G d dt               } G d dt               }| j                  d||d      }t        |j                  j                  d   t               sJ t        |j
                  j                  d   |      sJ |j                  j                  D ]  }t        ||      rJ  g |j                  k(  sJ y )	Nc                       e Zd Zy)ATestConstructor.test_alternate_string_containers.<locals>.PStringNr~   r=   r#   r!   PStringr      r   r#   r   c                       e Zd Zy)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  	*Aa)))	*
 T00000r#   
bad_markupr   Fc                      yrm   r=   )r   s    r!   <lambda>zTestConstructor.<lambda>   s    r#   c                     t        j                  t              5 }t        |d       d d d        d|dt	        j
                        v sJ y # 1 sw Y   'xY w)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	5 6j^  DC  D8>>"#	
#	5 	5s   AAN)rO   rP   rQ   r"   r%   r,   rg   rq   rz   r   r   rn   markparametrizer   r=   r#   r!   r   r   +   sY    (
,
8
?-B
*->
61B [[\Auo+FG
 H
r#   r   c                       e Zd Zej                  j                  dddg      d        Zej                  j                  deD  cg c]  }| c}} dgz         d        Zd Z	yc c}} w )	
TestOutputz!eventual_encoding,actual_encoding)r'   r'   )utf-16r   c                 j    | j                  d      }d|_        d| d|j                  |      k(  sJ y )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   sG     yy',_,==MN{{->{?@	
@r#   r   Nc                 X    t        dd      }d|_        d|j                  |      k(  sJ y )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
  s=     ]M:3t{{/ 8C 8
 
 	
 
r#   c                     | j                  d      }d|j                  d      k(  sJ d|j                  d      k(  sJ d|j                         k(  sJ d|j	                         k(  sJ y )Nr   s   <tag></tag>r'   )encodingz<tag>
</tag>
)r   r)   encode_contentsdecode_contentsprettifyr>   s     r!   testzTestOutput.test  sr     yy'g!>>>>!5!5w!5!GGGG 4 4 6666 DMMO333r#   )
rO   rP   rQ   rn   r   r   r   r   r   r   )r   r   s   00r!   r   r      sw    [[+ 	




 [[)BCAaCtfL



4 Ds   	A#r   c                   P   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$                  j'                  dg d      d        Zej$                  j'                  dg d      d        Zd Zd Zd Zd Zy)TestWarningsr_   clsreturnc                     |D ]1  }t        |j                  |      s|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,  sJ      	A!))S)zzX---	 XFGGr#   re   Nc                     | j                  |t              }t        |j                        }|j	                  t        j
                  d d       sJ y )N<   )r   r   rb   rc   rd   MESSAGE)r   re   warningrc   s       r!   _assert_no_parser_specifiedz(TestWarnings._assert_no_parser_specified5  sE    &&q*@Agoo&!!"8"@"@""EFFFr#   c                     t        j                  d      5 }t        d       d d d        | j                         y # 1 sw Y   xY w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 	,Q*+	,((+	, 	,s	   =Ac                     t        j                  d      5 }t        dd       d d d        | j                         y # 1 sw Y   xY w)NTrX   r   htmlr   r   s     r!   *test_warning_if_parser_specified_too_vaguez7TestWarnings.test_warning_if_parser_specified_too_vague?  s@    $$D1 	4Q*F3	4((+	4 	4s	   >Ac                     t        j                  d      5 }| j                  d       d d d        g k(  sJ y # 1 sw Y   xY wr   r_   r`   r   r   s     r!   ,test_no_warning_if_explicit_parser_specifiedz9TestWarnings.test_no_warning_if_explicit_parser_specifiedD  s?    $$D1 	(QII&'	(Qww	( 	(	   9Ac                    t        dd      }t        j                  d      5 }| j                  d|       d d d        | j	                  t
              }t        |j                        }|j                  d      sJ y # 1 sw Y   HxY w)	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  sw    S5$$D1 	=QII&8I<	=&&q+6'//"~~WXXX		= 	=s   A??Bc                     t        j                  d      5 }t        ddt        d            }d d d        | j	                  t
              }t        |j                        }d|v sJ d|v sJ d	j                         k(  sJ y # 1 sw Y   VxY w)
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 	Q  +C0D	 &&q*<='//"3&&&s"""T[[]***	 	s   BBc                 
   t        j                  d      5 }d}t        |dd      }d d d        | j                  t              }t        |j                        }d|v sJ d|v sJ dj                  k(  sJ y # 1 sw Y   RxY w)	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 	KQD }6JD	K &&q*<='//"$$$#%%%/////	K 	Ks   A99Bc                     t        j                  t              5  | j                  dd       d d d        y # 1 sw Y   y xY w)Nz<a>T)no_such_argument)rn   ro   r   r   rF   s    r!   "test_unrecognized_keyword_argumentz/TestWarnings.test_unrecognized_keyword_argumenth  s3    ]]9% 	4IIedI3	4 	4 	4s	   7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       | j                  |t              }dt        |j                        v sJ 	 d d d        y # 1 sw Y   y xY w)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  sa      $$D1 	HQ&-0**1.KLG/3w3GGGG	H 	H 	Hs   <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 }| j                  |       d d d        g k(  sJ y # 1 sw Y   xY w)NTrX   r   )r   rC   re   s      r!   "test_resembles_filename_no_warningz/TestWarnings.test_resembles_filename_no_warning  sA    P $$D1 	QIIf	Qww	 	r   c                 $   d}t        j                  d      5 }t        |d       d d d        | j                  t              }dt        |j                        v sJ |t        |j                        j                  d      vsJ y # 1 sw Y   axY w)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 	.\#}-	.&&|5RS&#goo*>>>>#goo.55f====		. 	.s   BBc                    d}t        j                  d      5 }t        |d       d d d        | j                  t              }dt        |j                        v sJ |t        |j                        vsJ y # 1 sw Y   RxY w)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 	.\ #}-	. &&|5RS&#goo*>>>>#goo....	. 	.s   A77B c                     t        j                  d      5 }| j                  d       d d d        t        d D              rJ y # 1 sw Y   xY w)NTrX   s$   http://www.crummybytes.com/ is greatc              3   J   K   | ]  }d t        |j                        v   ywr   Nrb   rc   r   re   s     r!   r   zETestWarnings.test_url_warning_with_bytes_and_space.<locals>.<genexpr>       WQ.#aii.@W   !#r_   r`   r   anyr   r   s     r!   %test_url_warning_with_bytes_and_spacez2TestWarnings.test_url_warning_with_bytes_and_space  sM     $$D1 	?\II=>	?W,WWWWW	? 	?   AAc                     t        j                  d      5 }| j                  d       d d d        t        d D              rJ y # 1 sw Y   xY w)NTrX   z&http://www.crummyunicode.com/ is greatc              3   J   K   | ]  }d t        |j                        v   yw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  sO    $$D1 	@\II>?	@W,WWWWW	@ 	@r   )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!89H@DWH		 	 HGXh6M6M-N GSW G
,
,

Y+04 [[		
HH [[ 	
#HI#H>/XXr#   r   c                       e Zd Zd Zy)TestSelectiveParsingc                 n    d}t        d      }| j                  ||      }|j                         dk(  sJ y )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  s8    9$yyHy5{{} BBBBr#   N)rO   rP   rQ   r	  r=   r#   r!   r  r    s    Cr#   r  c                   d    e Zd ZdZd Zej                  j                  e d      d        Z	d Z
y)
TestNewTagz(Test the BeautifulSoup.new_tag() method.c                    | j                  d      }|j                  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 |j                  d      }d |j
                  u sJ |j                  dd 	      }d |j
                  u sJ |j                  dd	      }d|j
                  k(  sJ y )
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'3'''$$$~~&&&H->>>w~~%%% ,,u%w~~%%%,,uT,2w~~%%% ,,uR,0W^^###r#   z-lxml not installed, cannot parse XML document)reasonc                     t        dd      }|j                  d      }|j                  d      }d|j                         k(  sJ d|j                         k(  sJ y )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  sZ     !U+!!$'  % 6==?***%,,.(((r#   c                     t        dd      }|j                  d      }|j                  d      }d|j                         k(  sJ d|j                         k(  sJ y )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  sY    !"m4	##D)""3' 7>>++++V]]_,,,r#   N)rO   rP   rQ   __doc__r  rn   r   skipifr   r  r#  r=   r#   r!   r  r    s@    2$& [[!P  ))-r#   r  c                       e Zd ZdZd Zd Zy)TestNewStringz+Test the BeautifulSoup.new_string() method.c                 z    | j                  d      }|j                  d      }d|k(  sJ t        |t              sJ y NrZ   r  )r   
new_stringra   r   r   r   r   s      r!   'test_new_string_creates_navigablestringz5TestNewString.test_new_string_creates_navigablestring  s9    yy}OOE"zz!_---r#   c                     | j                  d      }|j                  dt              }d|k(  sJ t        |t              sJ y r)  )r   r*  r
   ra   r+  s      r!   3test_new_string_can_create_navigablestring_subclasszATestNewString.test_new_string_can_create_navigablestring_subclass  s;    yy}OOE7+zz!W%%%r#   N)rO   rP   rQ   r$  r,  r.  r=   r#   r!   r'  r'    s    5.&r#   r'  c                       e Zd Zd Zd Zy)
TestPicklec                     | j                  d      }t        j                  |      }t        j                  |      }d|j                  j
                  k(  sJ y )Nz<a>some markup</a>some markup)r   pickledumpsloadsrt   r   r   r   pickled	unpickleds       r!   test_normal_picklezTestPickle.test_normal_pickle  sE    yy-.,,t$LL)		 2 2222r#   c                     | j                  d      }d |_        t        j                  |      }t        j                  |      }d|j
                  k(  sJ y )Nr2  )r   r[   r3  r4  r5  r   r6  s       r!   test_pickle_with_no_builderz&TestPickle.test_pickle_with_no_builder  sI     yy',,t$LL)		 0 0000r#   N)rO   rP   rQ   r9  r;  r=   r#   r!   r0  r0    s    31r#   r0  c                   *    e Zd Zd Zd Zd Zd Zd Zy)TestEncodingConversionc                 t    d| _         | j                   j                  d      | _        | j                  dk(  sJ y )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)  sB     U**11': NNmn	
nr#   c                 <   t         j                  }t        j                  t        j                         	 d }|t         _        d}| j                  |      }|j                         }t        |t              sJ || j                  |j                               k(  sJ |j                  j                         dk(  sJ 	 t        j                  t        j                         |t         _        y # t        j                  t        j                         |t         _        w xY w)Nc                      y r<   r=   )rb   s    r!   noopz>TestEncodingConversion.test_ascii_in_unicode_out.<locals>.noop9  s    r#   s   <foo>a</foo>r'   )r   _chardet_dammitloggingdisableWARNINGr   r   ra   rb   document_forr*   lowerNOTSET)r   chardetrC  asciisoup_from_asciiunicode_outputs         r!   test_ascii_in_unicode_outz0TestEncodingConversion.test_ascii_in_unicode_out2  s     (((	- &*F"#E"ii.O,335Nnc222!T%6%6u||~%FFFF"44::<GGGOOGNN+%,F" OOGNN+%,F"s   BC+ +0Dc                     | j                  | j                        }|j                         | j                  k(  sJ |j                  j                  dk(  sJ |j
                  J y Nu   Sacré bleu!)r   r?  r   r  r   r*   r   soup_from_unicodes     r!   test_unicode_in_unicode_outz2TestEncodingConversion.test_unicode_in_unicode_outH  sc     !IId&7&78 '')T->->>>> $$++/???? 22:::r#   c                     | j                  | j                        }|j                         | j                  k(  sJ |j                  j
                  dk(  sJ y rQ  )r   r+   r   r?  r  r   )r   soup_from_utf8s     r!   test_utf8_in_unicode_outz/TestEncodingConversion.test_utf8_in_unicode_outP  sN     4>>2$$&$*;*;;;;!!((,<<<<r#   c                 z    | j                  | j                        }|j                  d      | j                  k(  sJ y )Nr'   )r   r?  r)   r+   rR  s     r!   test_utf8_outz$TestEncodingConversion.test_utf8_outW  s4     IId&7&78 ''0DNNBBBr#   N)rO   rP   rQ   r@  rO  rT  rW  rY  r=   r#   r!   r=  r=  %  s    
-,;=Cr#   r=  )'r$  rE  r3  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'  r0  r=  r=   r#   r!   <module>ra     s    )     
  $
 
  H
h H
V+4 +4\eX8 eXPC8 C+- +-\&H & 1 1&5CX 5Cr#   