1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
U
¡ý°d¥Mã@s,dZddlmZddlZddlZddlZddlZddlZddlZddl    m
Z
m Z m Z m Z mZddlmZmZmZddlmZmZmZmZmZddlmZmZmZddlZGd    d
„d
eƒZGd d „d eƒZGd d„deƒZ Gdd„deƒZ!Gdd„deƒZ"Gdd„deƒZ#Gdd„deƒZ$Gdd„deƒZ%dS)z#Tests of Beautiful Soup as a whole.é)Ú    set_traceN)Ú BeautifulSoupÚBeautifulStoneSoupÚGuessedAtParserWarningÚMarkupResemblesLocatorWarningÚdammit)Úbuilder_registryÚ TreeBuilderÚParserRejectedMarkup)ÚCommentÚ SoupStrainerÚPYTHON_SPECIFIC_ENCODINGSÚTagÚNavigableStringé)Údefault_builderÚ LXML_PRESENTÚSoupTestc@sLeZdZdd„Zdd„Zdd„Zdd„Zd    d
„Zd d „Zd d„Z    dd„Z
dS)ÚTestConstructorcCs"d}| |¡}d|jjkst‚dS)Nu <h1>éé</h1>uéé©ÚsoupÚh1ÚstringÚAssertionError©ÚselfÚdatar©rúJd:\z\workplace\vscode\pyvenv\venv\Lib\site-packages\bs4/tests/test_soup.pyÚtest_short_unicode_input)s
z(TestConstructor.test_short_unicode_inputcCs"d}| |¡}d|jjkst‚dS)Nz<h1>foobar</h1>zfoobarrrrrrÚtest_embedded_null.s
z"TestConstructor.test_embedded_nullcCs,d d¡}|j|dgd}d|jks(t‚dS)Nu RäksmörgÃ¥súutf-8)Zexclude_encodingsz windows-1252)ÚencoderÚoriginal_encodingr)rÚ    utf8_datarrrrÚtest_exclude_encodings3s
z&TestConstructor.test_exclude_encodingsc    CsèGdd„dtƒ}tddd}tjddtdd|i|—Ž}W5QRXt|j|ƒsVt‚tdd    |jjkslt‚d
|jj    ks|t‚|f|Ž}tjdd}td|dd }W5QRXt
|d j ƒ}|  d ¡sÈt‚||jksÖt‚||jksät‚dS)Nc@sDeZdZdd„Zdd„Zdd„Zdd„Zd    d
„ZeZZ    d d „Z
d S)z7TestConstructor.test_custom_builder_class.<locals>.Mockc[s(||_d|_d|_g|_g|_i|_dS)NTF)Ú called_withÚis_xmlZstore_line_numbersZcdata_list_attributesZpreserve_whitespace_tagsÚstring_containers)rÚkwargsrrrÚ__init__<s z@TestConstructor.test_custom_builder_class.<locals>.Mock.__init__cSsdS©Nr©rrrrrÚinitialize_soupCszGTestConstructor.test_custom_builder_class.<locals>.Mock.initialize_soupcSs
||_dSr+)Úfed)rÚmarkuprrrÚfeedEsz<TestConstructor.test_custom_builder_class.<locals>.Mock.feedcSsdSr+r©rrrrÚresetGsz=TestConstructor.test_custom_builder_class.<locals>.Mock.resetcSsdSr+r)rÚignorerrrr3Isz>TestConstructor.test_custom_builder_class.<locals>.Mock.ignorecs
dVdS)N)úprepared markupzoriginal encodingzdeclared encodingzcontains replacement charactersr©rÚargsr)rrrÚprepare_markupLszFTestConstructor.test_custom_builder_class.<locals>.Mock.prepare_markupN) Ú__name__Ú
__module__Ú __qualname__r*r-r0r2r3Zset_up_substitutionsZcan_be_empty_elementr7rrrrÚMock;sr;ÚvalueT)ÚvarZconvertEntities©ÚrecordÚÚbuilder)r=r4)rAZ ignored_valuerzCKeyword arguments to the BeautifulSoup constructor will be ignored.)r@) ÚobjectÚdictÚwarningsÚcatch_warningsrÚ
isinstancerArr&r.ÚstrÚmessageÚ
startswith)rr;r)rrAÚwÚmsgrrrÚtest_custom_builder_class8s*ü
ÿz)TestConstructor.test_custom_builder_classc    CsXGdd„dtƒ}dd„}ddl}t t¡}td|dW5QRXdt|jƒksTt‚dS)    Nc@seZdZdd„ZdS)z:TestConstructor.test_parser_markup_rejection.<locals>.Mockc_s tdƒ‚dS)NzNope.)r
r5rrrr0lsz?TestConstructor.test_parser_markup_rejection.<locals>.Mock.feedN)r8r9r:r0rrrrr;ksr;cs tdddfVtdddfVdS)NF)r/r5rrrr7oszDTestConstructor.test_parser_markup_rejection.<locals>.prepare_markuprr@)rAzoThe markup you provided was rejected by the parser. Trying a different parser or a different encoding may help.)    r    ÚreÚpytestÚraisesr
rrGr<r)rr;r7rMÚexc_inforrrÚtest_parser_markup_rejectionhs  z,TestConstructor.test_parser_markup_rejectionc
CsÆd}| |¡}|j}d|dks$t‚ddg|dks8t‚|j|tdd}d|jdksZt‚ddiddifD]V}tjd    d
}|j|d|d}W5QRX|j}d dg|dks°t‚d|dksjt‚qjdS) Nz&<a id=" an id " class=" a class "></a>z an id ÚidÚaÚclass)rAZmulti_valued_attributesz     a class Ú*Tr>Zan)rrSrrrDrE)rr/rrSZ
switcheroorJrrrÚtest_cdata_list_attributes{s
z*TestConstructor.test_cdata_list_attributescspGdd„dtƒ‰Gdd„dtƒ‰Gdd„dtƒ‰|jdtˆtˆtˆid}t‡‡‡fd    d
„| ¡Dƒƒslt‚dS) Nc@s eZdZdS)z9TestConstructor.test_replacement_classes.<locals>.TagPlusN©r8r9r:rrrrÚTagPlus›srXc@s eZdZdS)z<TestConstructor.test_replacement_classes.<locals>.StringPlusNrWrrrrÚ
StringPlusžsrYc@s eZdZdS)z=TestConstructor.test_replacement_classes.<locals>.CommentPlusNrWrrrrÚ CommentPlus¡srZz<a><b>foo</b>bar</a><!--whee-->)Zelement_classesc3s|]}t|ˆˆˆfƒVqdSr+)rF©Ú.0Úx©rZrYrXrrÚ    <genexpr>¯sÿz;TestConstructor.test_replacement_classes.<locals>.<genexpr>)rrr rÚallZrecursiveChildGeneratorrr,rr^rÚtest_replacement_classes˜s ýþ þz(TestConstructor.test_replacement_classescCsŽGdd„dtƒ}Gdd„dtƒ}|jd||dœd}t|jjdtƒsJt‚t|jjd|ƒs`t‚|jjD]}t||ƒsht‚qhg|j    ksŠt‚dS)    Nc@s eZdZdS)zATestConstructor.test_alternate_string_containers.<locals>.PStringNrWrrrrÚPString·srbc@s eZdZdS)zATestConstructor.test_alternate_string_containers.<locals>.BStringNrWrrrrÚBStringºsrcz4<div>Hello.<p>Here is <b>some <i>bolded</i></b> text)ÚbÚp)r(r)
rrrFÚdivÚcontentsrrerdÚstringsZstring_container_stack)rrbrcrÚsrrrÚ test_alternate_string_containers´sþþ     z0TestConstructor.test_alternate_string_containersN) r8r9r:rr r%rLrQrVrarjrrrrr's0rc@sTeZdZej dddg¡dd„ƒZej ddd„eDƒd    g¡d
d „ƒZd d „Z    d    S)Ú
TestOutputz!eventual_encoding,actual_encoding)r!r!)úutf-16rlcCs0| d¡}d|_d|›d|j|dks,t‚dS)Nú <tag></tag>Tz<?xml version="1.0" encoding="z"?>
<tag></tag>©Úeventual_encoding)rr'Údecoder)rroZactual_encodingrrrrÚtest_decode_xml_declarationØs
 
 
 
ÿz&TestOutput.test_decode_xml_declarationrocCsg|]}|‘qSrrr[rrrÚ
<listcomp>észTestOutput.<listcomp>NcCs(tddƒ}d|_d|j|dks$t‚dS)Nrmú html.parserTz!<?xml version="1.0"?>
<tag></tag>rn)rr'rpr)rrorrrrÚMtest_decode_xml_declaration_with_missing_or_python_internal_eventual_encodingès
 
 
ÿzXTestOutput.test_decode_xml_declaration_with_missing_or_python_internal_eventual_encodingcCsV| d¡}d|jddkst‚d|jddks2t‚d| ¡ksBt‚d| ¡ksRt‚dS)Nrms <tag></tag>r!)Úencodingz <tag>
</tag>
)rr"rZencode_contentsZdecode_contentsZprettifyr,rrrÚtestôs
 
zTestOutput.test)
r8r9r:rNÚmarkÚ parametrizerqr rtrvrrrrrkÖsþÿ
 
ÿ
    rkc @s°eZdZdd„Zdd„Zdd„Zdd„Zd    d
„Zd d „Zd d„Z    dd„Z
e j   dddddddddg¡dd„ƒZe j   dddddg¡d d!„ƒZd"d#„Zd$d%„Zd&d'„Zd(d)„Zd*S)+Ú TestWarningscCs@|D]&}t|j|ƒr|jtks"t‚|Sqtd||fƒ‚dS)Nz%s warning not found in %r)rFrHÚfilenameÚ__file__rÚ    Exception)rrDÚclsrJrrrÚ_assert_warnings
 
zTestWarnings._assert_warningcCs2| |t¡}t|jƒ}| tjdd…¡s.t‚dS)Né<)r~rrGrHrIrZNO_PARSER_SPECIFIED_WARNINGr)rrJÚwarningrHrrrÚ_assert_no_parser_specifieds 
z(TestWarnings._assert_no_parser_specifiedc    Cs.tjdd}tdƒ}W5QRX| |¡dS©NTr>ú<a><b></b></a>©rDrErr©rrJrrrrÚ#test_warning_if_no_parser_specifiedsz0TestWarnings.test_warning_if_no_parser_specifiedc    Cs0tjdd}tddƒ}W5QRX| |¡dS)NTr>rƒÚhtmlr„r…rrrÚ*test_warning_if_parser_specified_too_vaguesz7TestWarnings.test_warning_if_parser_specified_too_vaguec    Cs2tjdd}| d¡}W5QRXg|ks.t‚dSr‚©rDrErrr…rrrÚ,test_no_warning_if_explicit_parser_specifiedsz9TestWarnings.test_no_warning_if_explicit_parser_specifiedc    Csltjdd}tddtdƒd}W5QRX| |t¡}t|jƒ}d|ksLt‚d|ksXt‚d    |     ¡ksht‚dS)
NTr>rƒrsrd)ÚparseOnlyTheser‹Ú
parse_onlys<b></b>)
rDrErr r~ÚDeprecationWarningrGrHrr")rrJrr€rKrrrÚ)test_parseOnlyThese_renamed_to_parse_only"sþ 
  z6TestWarnings.test_parseOnlyThese_renamed_to_parse_onlyc    Csjtjdd}d}t|ddd}W5QRX| |t¡}t|jƒ}d|ksLt‚d|ksXt‚d|jksft‚dS)    NTr>sérsÚutf8)Ú fromEncodingrZ from_encoding)    rDrErr~rrGrHrr#)rrJrrr€rKrrrÚ*test_fromEncoding_renamed_to_from_encoding.sÿ 
  z7TestWarnings.test_fromEncoding_renamed_to_from_encodingc    Cs(t t¡|jdddW5QRXdS)Nz<a>T)Zno_such_argument)rNrOÚ    TypeErrorrr1rrrÚ"test_unrecognized_keyword_argument:s z/TestWarnings.test_unrecognized_keyword_argumentÚ    extensionz markup.htmlz
markup.htmz markup.HTMLz
markup.txtz markup.xhtmlz
markup.xmlz/home/user/filez c:\user ilec    CsHtjdd2}td|dƒ}| |t¡}dt|jƒks:t‚W5QRXdS)NTr>r/rszlooks more like a filename©rDrErr~rrGrHr)rr”rJrr€rrrÚtest_resembles_filename_warning>s z,TestWarnings.test_resembles_filename_warningZ
markuphtmlz
markup.comr@z    markup.jsc    Cs6tjdd}| d|¡}W5QRXg|ks2t‚dS)NTr>r/r‰)rr”rJrrrrÚ"test_resembles_filename_no_warningKsz/TestWarnings.test_resembles_filename_no_warningc    Cs`d}tjdd}t|dƒ}W5QRX| |t¡}dt|jƒksDt‚|t|jƒ d¡ks\t‚dS)Nshttp://www.crummybytes.com/Tr>rsúlooks more like a URLr)    rDrErr~rrGrHrr"©rÚurlÚ warning_listrr€rrrÚtest_url_warning_with_bytes_urlWsÿz,TestWarnings.test_url_warning_with_bytes_urlc    CsZd}tjdd}t|dƒ}W5QRX| |t¡}dt|jƒksDt‚|t|jƒksVt‚dS)Nzhttp://www.crummyunicode.com/Tr>rsr˜r•r™rrrÚ!test_url_warning_with_unicode_urlasÿz.TestWarnings.test_url_warning_with_unicode_urlc    Cs<tjdd}| d¡}W5QRXtdd„|Dƒƒr8t‚dS)NTr>s$http://www.crummybytes.com/ is greatcss|]}dt|jƒkVqdS©r˜N©rGrH©r\rJrrrr_rsÿzETestWarnings.test_url_warning_with_bytes_and_space.<locals>.<genexpr>©rDrErÚanyr©rr›rrrrÚ%test_url_warning_with_bytes_and_spacems
ÿz2TestWarnings.test_url_warning_with_bytes_and_spacec    Cs<tjdd}| d¡}W5QRXtdd„|Dƒƒr8t‚dS)NTr>z&http://www.crummyunicode.com/ is greatcss|]}dt|jƒkVqdSržrŸr rrrr_xsÿzGTestWarnings.test_url_warning_with_unicode_and_space.<locals>.<genexpr>r¡r£rrrÚ'test_url_warning_with_unicode_and_spaceus
ÿz4TestWarnings.test_url_warning_with_unicode_and_spaceN)r8r9r:r~rr†rˆrŠrŽr‘r“rNrwrxr–r—rœrr¤r¥rrrrryÿs6  ÿþ
 
þ
 
 ryc@seZdZdd„ZdS)ÚTestSelectiveParsingcCs.d}tdƒ}|j||d}| ¡dks*t‚dS)Nz&No<b>Yes</b><a>No<b>Yes <c>Yes</c></b>rd)rŒs<b>Yes</b><b>Yes <c>Yes</c></b>)r rr"r)rr/ZstrainerrrrrÚtest_parse_with_soupstrainer~sz1TestSelectiveParsing.test_parse_with_soupstrainerN)r8r9r:r§rrrrr¦|sr¦c@s:eZdZdZdd„Zejje dddd„ƒZ    dd    „Z
d
S) Ú
TestNewTagz(Test the BeautifulSoup.new_tag() method.cCsb| d¡}|jddddid}t|tƒs,t‚d|jks:t‚tddd|jksPt‚d|jks^t‚dS)Nr@ÚfooZbazÚnameza name)ÚbarÚattrs)r«rª)    rÚnew_tagrFrrrªrCr¬Úparent)rrr­rrrÚ test_new_tag‡s 
zTestNewTag.test_new_tagz-lxml not installed, cannot parse XML document)ÚreasoncCsBtddƒ}| d¡}| d¡}d| ¡ks.t‚d| ¡ks>t‚dS)Nr@ÚxmlÚbrreó<br/>s<p/>©rr­r"r)rZxml_soupZxml_brZxml_prrrÚ5test_xml_tag_inherits_self_closing_rules_from_builders
 
 
 
z@TestNewTag.test_xml_tag_inherits_self_closing_rules_from_buildercCsBtddƒ}| d¡}| d¡}d| ¡ks.t‚d| ¡ks>t‚dS)Nr@rsr²rer³s<p></p>r´)rZ    html_soupZhtml_brZhtml_prrrÚ1test_tag_inherits_self_closing_rules_from_builders
 
 
 
z<TestNewTag.test_tag_inherits_self_closing_rules_from_builderN) r8r9r:Ú__doc__r¯rNrwZskipifrrµr¶rrrrr¨…sþ
 
r¨c@s eZdZdZdd„Zdd„ZdS)Ú TestNewStringz+Test the BeautifulSoup.new_string() method.cCs2| d¡}| d¡}d|ks t‚t|tƒs.t‚dS©Nr@r©)rÚ
new_stringrrFr©rrrirrrÚ'test_new_string_creates_navigablestring©s
 
 z5TestNewString.test_new_string_creates_navigablestringcCs4| d¡}| dt¡}d|ks"t‚t|tƒs0t‚dSr¹)rrºr rrFr»rrrÚ3test_new_string_can_create_navigablestring_subclass¯s
  zATestNewString.test_new_string_can_create_navigablestring_subclassN)r8r9r:r·r¼r½rrrrr¸§sr¸c@seZdZdd„Zdd„ZdS)Ú
TestPicklecCs2| d¡}t |¡}t |¡}d|jjks.t‚dS)Nz<a>some markup</a>ú some markup)rÚpickleÚdumpsÚloadsrSrr©rrZpickledZ    unpickledrrrÚtest_normal_pickle¹s
 
 
zTestPickle.test_normal_picklecCs6| d¡}d|_t |¡}t |¡}d|jks2t‚dS)Nr¿)rrArÀrÁrÂrrrÃrrrÚtest_pickle_with_no_builder¿s
 
 
 
z&TestPickle.test_pickle_with_no_builderN)r8r9r:rÄrÅrrrrr¾¶sr¾c@s4eZdZdd„Zdd„Zdd„Zdd„Zd    d
„Zd S) ÚTestEncodingConversioncCs&d|_|j d¡|_|jdks"t‚dS)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$rr1rrrÚ setup_methodÌsz#TestEncodingConversion.setup_methodc    CsŠtj}t tj¡z^dd„}|t_d}| |¡}| ¡}t|t    ƒsFt
‚||  | ¡¡ks\t
‚|j   ¡dksnt
‚W5t tj¡|t_XdS)NcSsdSr+r)rGrrrÚnoopØsz>TestEncodingConversion.test_ascii_in_unicode_out.<locals>.noops <foo>a</foo>r!)rZchardet_dammitÚloggingÚdisableÚWARNINGÚNOTSETrrprFrGrZ document_forr#Úlower)rÚchardetrÉÚasciiZsoup_from_asciiZunicode_outputrrrÚtest_ascii_in_unicode_outÒs 
 z0TestEncodingConversion.test_ascii_in_unicode_outcCs@| |j¡}| ¡|jkst‚|jjdks.t‚|jdks<t‚dS©Nu Sacré bleu!)rrÇrprr©rr#©rZsoup_from_unicoderrrÚtest_unicode_in_unicode_outæs z2TestEncodingConversion.test_unicode_in_unicode_outcCs2| |j¡}| ¡|jkst‚|jjdks.t‚dSrÒ)rr$rprÇrr©r)rZsoup_from_utf8rrrÚtest_utf8_in_unicode_outîs z/TestEncodingConversion.test_utf8_in_unicode_outcCs$| |j¡}| d¡|jks t‚dS)Nr!)rrÇr"r$rrÓrrrÚ test_utf8_outõs z$TestEncodingConversion.test_utf8_outN)r8r9r:rÈrÑrÔrÕrÖrrrrrÆÈs
rÆ)&r·ÚpdbrrÊÚosrÀrNÚsysÚtempfileZbs4rrrrrZ bs4.builderrr    r
Z bs4.elementr r r rrr@rrrrDrrkryr¦r¨r¸r¾rÆrrrrÚ<module>s* 0)}    "