mò %U²Ic@sdZdkZdkZdkZdklZdklZdefd„ƒYZdefd„ƒYZ dfd „ƒYZ d „Z d „Z d „Z d efd„ƒYZdefd„ƒYZdefd„ƒYZed„ZedjoedeƒndS(sTests for cookielib.py.N(sTestCase(s test_supportt DateTimeTestscBs,tZd„Zd„Zd„Zd„ZRS(NcCsßdkl}d}dd}|i||ƒdƒ|i|||ƒdƒ|i||d|ƒdƒ|i||d |ƒd ƒ|ƒ}|d ƒ}x:||fD],}|i t i d |ƒd ||fƒq«WdS(N(s time2isozix+ÀP-s1994-02-03 00:00:00Zs%s => '%s' (%s)s'%s' => %s, %s, %s (%s)(RRRtteststtest_ttresulttexpectedRRtstttlowertt2tuppertt3R ( RRRRRRRRRRR((R ttest_http2time_formats)s-   ,c Csldkl}xXdddddddd d d g D]2}|i||ƒdjd |||ƒfƒq2WdS( N(s http2timettGarbagesMandag 16. September 1996s 01-00-1980s 01-13-1980s 00-01-1980s 32-01-1980s01-01-1980 25:00:00s01-01-1980 00:61:00s01-01-1980 00:00:62s,http2time(%s) is not None http2time(test) %s(RRttestRR tNone(RR!R((R ttest_http2time_garbagePs  % (t__name__t __module__RRRR#(((R R s   't HeaderTestscBs5tZd„Zd„Zd„Zd„Zd„ZRS(NcCsSdkl}d d d gg}x-dd gD]}|i||gƒ|ƒq,WdS( N(sparse_ns_headerstfootbartexpiresld9Wtversiont0s)foo=bar; expires=01 Jan 2040 22:23:32 GMTs+foo=bar; expires="01 Jan 2040 22:23:32 GMT"(sfooR((sexpiresld9W(sversionR+(Rtparse_ns_headersRthdrRR(RRR,R-((R ttest_parse_ns_headersfs   cCs?dkl}d}ddgg}|i||gƒ|ƒdS( N(sparse_ns_headerss expires=01 Jan 2040 22:23:32 GMTR)s01 Jan 2040 22:23:32 GMTR*R+(sexpiress01 Jan 2040 22:23:32 GMT(sversionR+(RR,R-RRR(RRR,R-((R t#test_parse_ns_headers_special_namesqs cCsOdkl}|ddggƒ}|i|dƒ|i|ggƒdƒdS( N(sjoin_header_wordsR'R(tbazs foo; bar=bazR(sfooN(sbarR0(Rtjoin_header_wordsR"tjoinedRR(RR2R1((R ttest_join_header_words{s c Cs,dkl}ddtfggfdddfggfddtfggfdddfggfdddfggfd ddfggfd ddfdd fggfd ddfdd fggfd ddfggfdddfdd fggfddtfdtfd tfggfddtfgdtfgdtfggfddtfdd fgddfgddfgddfggfg }x|D]‡\}}y||gƒ}WnEdk}dk}|iƒ}|i t|ƒd|i ƒ}nX|i ||d|||fƒqWdS(N(ssplit_header_wordsR'sfoo=barR(s foo s foo= Rs foo=s foo= ; s foo= ; bar= baz R0sfoo=bar bar=bazs foo= bar=bazsbar=bazsfoo=bar;bar=bazs foo bar bazsa, b, ctatbtcs(foo; bar=baz, spam=, foo="\,\;\"", bar= tspams,;"s (error -- traceback follows) %ss: When parsing: '%s' Expected: '%s' Got: '%s' (Rtsplit_header_wordsR"RtargtexpectRt tracebacktStringIOtft print_exctgetvalueRR( RR=R<R;R8RR:R9R((R ttest_split_header_wordsƒs ÿŠ   cCs™dkl}l}dddddddd d!d"d#d$d%g }xR|D]J\}}||gƒ}||ƒ}|i ||d||||fƒqGWdS(&N(ssplit_header_wordssjoin_header_wordsR'sfoo=bars foo sfoo=sfoo=""sfoo=bar bar=bazsfoo=bar; bar=bazsfoo=bar;bar=bazs foo bar bazs foo; bar; bazsfoo="\"" bar="\\"sfoo="\""; bar="\\"s foo,,,barsfoo, barsfoo=bar,bar=bazsfoo=bar, bar=bazstext/html; charset=iso-8859-1stext/html; charset="iso-8859-1"s)foo="bar"; port="80,81"; discard, bar=bazs'foo=bar; port="80,81"; discard, bar=bazsBasic realm="\"foo\\\\bar\""sBasic; realm="\"foo\\\\bar\""sM When parsing: '%s' Expected: '%s' Got: '%s' Input was: '%s' (sfoosfoo(sfoo=barsfoo=bar(s foo sfoo(sfoo=sfoo=""(sfoo=bar bar=bazsfoo=bar; bar=baz(sfoo=bar;bar=bazsfoo=bar; bar=baz(s foo bar bazs foo; bar; baz(sfoo="\"" bar="\\"sfoo="\""; bar="\\"(s foo,,,barsfoo, bar(sfoo=bar,bar=bazsfoo=bar, bar=baz(stext/html; charset=iso-8859-1stext/html; charset="iso-8859-1"(s)foo="bar"; port="80,81"; discard, bar=bazs'foo=bar; port="80,81"; discard, bar=baz(sBasic realm="\"foo\\\\bar\""sBasic; realm="\"foo\\\\bar\""( RR8R1RR9R:tinputtresRR(RRRBR8R:R9RAR1((R ttest_roundtrip§s-   (R$R%R.R/R3R@RC(((R R&es   $t FakeResponsecBs tZgdd„Zd„ZRS(NcCsIdk}dk}|idi|ƒƒ}|i|ƒ|_||_ dS(sD headers: list of RFC822-style 'Key: value' strings Ns ( t mimetoolsR<tjointheadersR=tMessageRt_headersturlt_url(RRGRJRER=R<((R t__init__Ìs cCs|iS(N(RRI(R((R tinfoÔs(R$R%R"RLRM(((R RDËscGst|||dƒS(Ns Set-Cookie2(t _interactt cookiejarRJtset_cookie_hdrs(RORJRP((R t interact_2965ÖscGst|||dƒS(Ns Set-Cookie(RNRORJRP(RORJRP((R tinteract_netscapeÙsc Cs‰dkl}||ƒ}|i|ƒ|iddƒ}g} x%|D]}| i d||fƒqEWt | |ƒ}|i||ƒ|S(sDPerform a single request / response cycle, returning Cookie: header.(sRequesttCookieRs%s: %sN(turllib2tRequestRJtreqROtadd_cookie_headert get_headert cookie_hdrRGRPR-tappendthdr_nameRDRBtextract_cookies( RORJRPR[R-RBRVRURYRG((R RNÜs   tFileCookieJarTestscBstZd„Zd„ZRS(NcCsÕdkl}ti}|ƒ}t|ddƒ|i|i dddi dƒz3|i |dt ƒ|ƒ}|i|dt ƒWdyti|ƒWntj onXX|i|i dddi dƒdS(N(s LWPCookieJarshttp://www.acme.com/tboos www.acme.comt/tignore_discard(Rt LWPCookieJart test_supporttTESTFNtfilenameR6RRRt assertEqualt_cookiestvalueR"tsavetTruetloadtostunlinktOSError(RR6RdRa((R ttest_lwp_valueless_cookieës   " c Csdkl}l}l}ti}xi||fD][}|ƒ}y|i ddƒWn(t j o}|i |it ƒq/X|idƒq/WzVt|dƒ}|idƒx3||fD]%}|ƒ}|i||i |ƒqºWWdyti|ƒWntj onXXdS(N(s LWPCookieJarsMozillaCookieJars LoadErrorRdsAfor this test to work, a file with this filename should not exists%expected IOError for invalid filenametwsoops (RRatMozillaCookieJart LoadErrorRbRcRdtcookiejar_classR6RjtIOErrortexcRRet __class__tfailtopenR=twritet assertRaisesRkRlRm( RR6RtRqRpR=RdRaRr((R ttest_bad_magicûs,      (R$R%RnRz(((R R]ês t CookieTestscBstZd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Z d „Z d „Z d „Z d „Z d „Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„ZRS(Nc CsCdk}dk}|iƒ}xddtfddtfddtfddtfddtfddtfddtfd d tfd d tfd d tfd dtfd dtfd dtfd dtfd dtfd dtfgD]V\}}}|i |ƒ}|i ||ƒ}|o|i|ƒqå|i| ƒqåWdS(Nshttp://foo.bar.com/sblah.comsrhubarb.blah.comsrhubarb.foo.bar.coms .foo.bar.coms foo.bar.coms.bar.comtcomshttp://foo.com/srhubarb.foo.coms.foo.comsfoo.coms http://foo/s rhubarb.foos.fooR's foo.locals.local(RRTtDefaultCookiePolicytpoltFalseRiRJtdomaintokRUtrequesttdomain_return_oktrRR ( RR€RRJR‚RTR~R„R((R ttest_domain_return_okDs ÇcCs€dkl}l}ti}||ƒ}t|ddƒt|ddƒ|iddd}|i |i djƒ|i|idƒ|iddd}|i |i djƒ|i|idƒ|i||ƒd ƒt|ƒ}|id td tƒz&||ƒ}|id td tƒWdti|iƒX|it|ƒtid td t|ƒƒ|it|d ƒdƒdS(N(sMozillaCookieJarslwp_cookie_strshttp://www.acme.com/teggss"spam"; path=/foo/s www.acme.comR_s/foo/s"spam"sJ"spam"; path="/foo/"; domain="www.acme.com"; path_spec; discard; version=0tignore_expiresR`spath_specified=%sshttp://www.acme.com/foo/s "spam"; eggs(RRptlwp_cookie_strRbRcRdR6RRRftcookieRR RgR"Rtnametreprtold_strRhRitrevertRkRlR tsubR(RR6RpRˆRdR‰RŒ((R ttest_missing_valuecs0     cCsádkl}l}|ƒ}t|ddƒt|ddƒt|ddƒt|ddƒt|ddƒ|id d d }|i|i d ƒ|i |i ƒ|i|i |ƒ|i |i ƒ|i |id ƒo|id ƒ ƒ|idd d}|i|i dƒ|i |i ƒ|i|i dƒ|i |i ƒ|idd d}|i |i djƒ|i |i ƒ|idd d}|idd d}|i |idjƒ|i |idjƒdS(N(s CookieJarsDEFAULT_HTTP_PORTshttp://www.acme.com/s0spam=eggs; DoMain=.acme.com; port; blArgh="feep"sni=ni; port=80,8080shttp://www.acme.com:80/snini=nisfoo=bar; expires=s-spam=eggs; expires="Foo Bar 25 33:22:11 3022"s .acme.comR_R7tblArghtblarghs www.acme.comtnis80,8080tniniR'(Rt CookieJartDEFAULT_HTTP_PORTR6RRRfR‰RRR€R tdomain_specifiedtporttport_specifiedthas_nonstandard_attrR"R'R7R)(RR6R”R7R‰R•R'((R ttest_ns_parser…s4  'cCsqdkl}|ƒ}t|ddƒt|ddƒ|idd}|id|jƒ|id|jƒdS( N(s CookieJarshttp://www.acme.com/s expires=eggssversion=eggs; spam=eggss www.acme.comR_R)R*(RR”R6RRRftcookiesRR (RR”R6R›((R ttest_ns_parser_special_namesªs  cCs³dkl}l}|ƒ}|tiƒdƒ}t|dd|ƒ|it |ƒdƒ|tiƒdƒ}t|dd|ƒt|dƒ}|it |ƒdƒ|i d|jo d|jƒt|dd |ƒt|dd |ƒ|it |ƒd ƒt|dd |ƒt|dd |ƒt|dƒ}|it |ƒdƒt|ddƒ|it |ƒdƒ|i ƒ|it |ƒdƒ|i d|jƒdS(N(s time2netscapes CookieJarishttp://www.acme.com/sspam="bar"; expires=%sisfoo="eggs"; expires=%ss spam="bar"R'seggs="bar"; expires=%ssbar="bar"; expires=%sis!eggs="bar"; expires=%s; max-age=0s bar="bar"; max-age=0; expires=%sshttp://www.rhubarb.net/s whum="fizz"i(Rt time2netscapeR”R6RtfutureRRRRtlentnowthR tclear_session_cookies(RR6R”R¡RžRR ((R t test_expires·s,   cCsÊdkl}l}|dtƒ}||ƒ}t|ddƒ|id|i djƒ||ƒ}t|ddƒ|id|i djƒ||ƒ}t|d dƒ|id |i djƒ||ƒ}t|d dƒ|id |i djƒ|ƒ}t |dd ƒ|id|i djƒ|ƒ}t |ddƒ|id|i djƒ|ƒ}t |d dƒ|id|i djƒ|ƒ}t |d dƒ|id|i djƒdS(N(s CookieJarsDefaultCookiePolicytrfc2965shttp://www.acme.com/sspam="bar"; Version="1"R_s www.acme.comshttp://www.acme.com/blahseggs="bar"; Version="1"s http://www.acme.com/blah/rhubarbs/blah/s!http://www.acme.com/blah/rhubarb/s/blah/rhubarb/s spam="bar"s eggs="bar"s/blahs /blah/rhubarb( RR”R}RiR~R6RQRR RfRR(RR}R6R”R~((R ttest_default_pathßs8          c Csedkl}dddddddddddg }x*|D]"\}}|i||ƒ|ƒq;WdS(N(s escape_paths /foo%2f/bars /foo%2F/bars /foo%%/bars /fo%19o/bars /fo%7do/bars /fo%7Do/bars /foo/bar&s /foo//bars ~/foo/bars /foo/bars /foo%19/bars /}foo/bars /%7Dfoo/baru /foo/barê¯s/foo/bar%EA%AF%8D(s /foo%2f/bars /foo%2F/bar(s /foo%2F/bars /foo%2F/bar(s /foo%%/bars /foo%%/bar(s /fo%19o/bars /fo%19o/bar(s /fo%7do/bars /fo%7Do/bar(s /foo/bar&s /foo/bar&(s /foo//bars /foo//bar(s ~/foo/bars ~/foo/bar(s /foo/bars /foo%19/bar(s /}foo/bars /%7Dfoo/bar(u /foo/barê¯s/foo/bar%EA%AF%8D(Rt escape_pathtcasesR9RRR(RRR§R¦R9((R ttest_escape_path s  ' cCs„dkl}dkl}|dƒ}|i||ƒdƒ|dƒ}|i||ƒdƒ|dƒ}|i||ƒdƒdS( N(sRequest(s request_pathsShttp://www.example.com/rheum/rhaponicum;foo=bar;sing=song?apples=pears&spam=eggs#nis=/rheum/rhaponicum;foo=bar;sing=song?apples=pears&spam=eggs#nisAhttp://www.example.com/rheum/rhaponicum?apples=pears&spam=eggs#nis+/rheum/rhaponicum?apples=pears&spam=eggs#nishttp://www.example.comR_(RTRURt request_pathRVRR(RRVRUR©((R ttest_request_path!s     cCs†dkl}dkl}l}|ddhdd<ƒ}|i||ƒdƒ|ddhdd<ƒ}|i||ƒ|ƒdS( N(sRequest(s request_portsDEFAULT_HTTP_PORTshttp://www.acme.com:1234/RGtHostswww.acme.com:4321t1234shttp://www.acme.com/(RTRURt request_portR•RVRR(RRVR­RUR•((R ttest_request_port2s cCsâdkl}dkl}|ddhdd<ƒ}|i||ƒdƒ|ddhdd <ƒ}|i||ƒd ƒ|d dhdd <ƒ}|i||ƒd ƒ|d dhdd <ƒ}|i||ƒd ƒdS(N(sRequest(s request_hostshttp://1.1.1.1/RGR«swww.acme.com:80s1.1.1.1shttp://www.acme.com/sirrelevant.coms www.acme.coms/resource.htmls&http://www.acme.com:2345/resource.htmlswww.acme.com:5432(RTRURt request_hostRVRR(RR¯RVRU((R ttest_request_host<s  cCs¯dkl}|i|dƒƒ|i|dƒƒ|i|dƒ ƒ|i|dƒ ƒ|i|dƒ ƒ|i|dƒ ƒ|i|dƒ ƒ|i|d ƒ ƒdS( N(sis_HDNs foo.bar.coms1foo2.3bar4.5coms 192.168.1.1Rt.s .foo.bar.coms..foosfoo.(Rtis_HDNRR (RR²((R t test_is_HDNSs cCsÁdkl}|i|dƒdƒ|i|dƒdƒ|i|dƒdƒ|i|dƒdƒ|i|dƒdƒ|i|dƒdƒ|i|d ƒd ƒ|i|d ƒd ƒdS( N(sreachs www.acme.coms .acme.comsacme.coms acme.locals.locals.comR±Rs 192.168.0.1(RtreachRR(RR´((R t test_reach^s cCsÑdkl}l}|i|ddƒƒ|i|ddƒ ƒ|i|ddƒƒ|i|ddƒƒ|i|ddƒ ƒ|i|dd ƒƒ|i|d dƒ ƒ|i|d d ƒƒ|i|d d ƒ ƒ|i|d dƒ ƒ|i|d d ƒƒ|i|ddƒƒ|i|ddƒ ƒ|i|ddƒƒ|i|ddƒƒ|i|ddƒƒ|i|ddƒƒ|i|ddƒ ƒ|i|ddƒƒ|i|ddƒ ƒ|i|ddƒƒ|i|ddƒƒ|i|ddƒ ƒ|i|ddƒ ƒ|i|ddƒ ƒ|i|dd ƒ ƒ|i|ddƒ ƒ|i|ddƒƒ|i|ddƒ ƒ|i|ddƒ ƒ|i|dd ƒ ƒdS(N(s domain_matchsuser_domain_matchs 192.168.1.1s.168.1.1sx.y.comsx.Y.coms.Y.comsY.coms a.b.c.coms.c.coms example.locals.locals blah.blahRs.rhubarb.rhubarbsacme.coms .acme.comsrhubarb.acme.comswww.rhubarb.acme.comsy.coms.y.coms.comR|tms.mR±(Rt domain_matchtuser_domain_matchRR (RR¸R·((R ttest_domain_matchis@cCs@dkl}|ƒ}t|ddƒ|it|ƒdƒdS(N(s CookieJarshttp://www.nasty.com/s)foo=bar; domain=friendly.org; Version="1"i(RR”R6RQRRRŸ(RR”R6((R ttest_wrong_domainŽs    cCs±dkl}l}|ƒ}t|ddƒ|it|ƒdƒ|i|idddi dƒ|it|dƒdƒ|it|d ƒdƒ|d |i ƒ}|i |ƒ|it|d ƒd ƒt|d d ƒt|ddƒ|it|ƒdƒ|i|idddi dƒ|i|idddi dƒ|it|dƒdƒt|ddƒ|it|ƒdƒt|ddƒ|it|ƒdƒdS(N(s CookieJarsDefaultCookiePolicyshttp://foo.net/sns=barisfoo.netR_tnsR(shttp://www.foo.net/tstrict_ns_domainRshttp://foo.net/foo/sspam1=eggs; domain=foo.netshttp://foo.net/foo/bar/sspam2=eggs; domain=.foo.netis.foo.nets/footspam1R†s/foo/bartspam2sspam2=eggs; spam1=eggs; ns=barsnini="ni"; domain=.netshttp://foo.co.uksnasty=trick; domain=.co.uki( RR”R}R6RRRRRŸRfRgtDomainStrictNonDomainR~t set_policy(RR}R6R”R~((R ttest_two_component_domain_ns™s4 "   cCs±dkl}l}|dtƒ}||ƒ}t|ddƒ|it |ƒdƒ|i|i dddi d ƒ|it|dƒd ƒ|it|d ƒd ƒt|d dƒ|it |ƒdƒ|it|d ƒd ƒt|ddƒ|i|i dddi dƒ|it |ƒdƒ|it|dƒd ƒ|it|dƒdƒt|ddƒ|it |ƒdƒt|ddƒ|it |ƒdƒdS(N(s CookieJarsDefaultCookiePolicyR¤shttp://foo.net/sfoo=bar; Version="1"isfoo.netR_R'R(s$Version=1; foo=barshttp://www.foo.net/Rshttp://foo.net/foos1spam=eggs; domain=foo.net; path=/foo; Version="1"shttp://www.foo.net/foo/s&spam=eggs; domain=foo.net; Version="1"s.foo.nets/foo/R7R†ishttp://foo.net/foo/s($Version=1; spam=eggs; $Domain="foo.net"s#ni="ni"; domain=".net"; Version="1"shttp://foo.co.uk/s'nasty=trick; domain=.co.uk; Version="1"i( RR”R}RiR~R6RQRRRŸRfRg(RR}R6R”R~((R t!test_two_component_domain_rfc2965Ës: "    c CsŒdkl}l}dkl}|d|ddgddgƒƒ}|dƒ}d g}t|dƒ}|i ||ƒ|i t |ƒd ƒ|d ƒ}t|d ƒ}|i ||ƒ|i t |ƒd ƒ|d ƒ}t|d ƒ}|i ||ƒ|i t |ƒd ƒ|d ƒ}t|d ƒ}|i||ƒ}|i|d ƒ|i t |ƒdƒ|i|ƒ|i|idƒ ƒdS(N(s CookieJarsDefaultCookiePolicy(sRequesttpolicytblocked_domainssacme.comtallowed_domainss www.acme.comshttp://acme.com/s*Set-Cookie: CUSTOMER=WILE_E_COYOTE; path=/ishttp://www.acme.com/ishttp://www.coyote.com/iRS(RR”R}RTRUR6RVRGRDRBR\RRRŸt make_cookiesR›t set_cookieRWR t has_header( RR}R6R”RBRVRUR›RG((R ttest_domain_allowùs0       c Csdkl}l}dkl}|dtddgƒ} |d| ƒ}dg} |dƒ}t | dƒ}|i ||ƒ|it|ƒd ƒ| id gƒ}|i ||ƒ|it|ƒd ƒ|iƒ|d ƒ}t | d ƒ}|i ||ƒ|it|ƒd ƒ|d ƒ}|i|ƒ|i|id ƒo |idƒƒ|iƒ| idgƒ|i ||ƒ|it|ƒd ƒ|dƒ}t | dƒ}|i||ƒ}|i|d ƒ|it|ƒdƒ|i|ƒ|i|id ƒ ƒdS(N(s CookieJarsDefaultCookiePolicy(sRequestR¤RÄs .acme.comRÃs*Set-Cookie: CUSTOMER=WILE_E_COYOTE; path=/shttp://www.acme.com/isacme.comishttp://www.roadrunner.net/RStCookie2i(RR”R}RTRURiR~R6RGRVRDRBR\RRRŸtset_blocked_domainstptclearRWR RÈRÆR›RÇ( RR}R6R”RÌRBRVRUR›RGR~((R ttest_domain_blocks>       &   c Csdkl}l}xûttfD]í} xädD]Ü}|ƒ}| o|dtƒ}t }d}n|dtƒ}t }d}|i |ƒd}|||d||fƒ|||d||fƒ|i|id d d i d ƒ|i|id d d idƒq-Wq WdS(N(s CookieJarsDefaultCookiePolicyt RR¤s ; Version=1shttp://www.acme.com/s foo1=bar%s%ssfoo2=bar%s; secure%ss www.acme.comR_tfoo1s#non-secure cookie registered securetfoo2s#secure cookie registered non-secure(RÏR(RR”R}RiRR»t whitespaceR6R~RRtinttvsRQRÀRJRR Rftsecure( RR}R6R”RÒRÓR~RÔRJR»((R t test_secureFs*    cCs^dkl}l}|d|dtƒƒ}t|ddƒt|dƒ}|i|dƒdS(N(s CookieJarsDefaultCookiePolicyRÃR¤shttp://www.acme.com/sfoo=\b"a"r; Version=1s$Version=1; foo=\\b\"a\"r( RR”R}RiR6RQR¡RR(RR}R6R”R¡((R ttest_quote_cookie_value_s cCs”dkl}l}dkl}d}||dtƒƒ}t||dƒ||ƒ}|i t |ƒdƒ|i |ƒ|i|idƒƒdS(N(s CookieJarsDefaultCookiePolicy(sRequestshttp://www.acme.comR¤sfoo=bar; Version=1iRS(RR”R}RTRURJRiR6RQRVRRRŸRWR RÈ(RR}R6R”RJRVRU((R ttest_missing_final_slashfs   cCsûdkl}l}|dtƒ}||ƒ}d}t||dƒt||ƒ}|i d|jdƒ||ƒ}d}t||dƒt||ƒ}|i d|jd ƒ||ƒ}d}t||d ƒt||ƒ}|i d |jd ƒdS( N(s CookieJarsDefaultCookiePolicyR¤shttp://foo.bar.com/sspam=eggs; Version=1tDomains*absent domain returned with domain presents%spam=eggs; Version=1; Domain=.bar.coms$Domain=".bar.com"sdomain not returneds$spam=eggs; Version=1; Domain=bar.coms$Domain="bar.com"( RR”R}RiR~R6RJRQR¡RR (RR}R6R”RJR¡R~((R ttest_domain_mirrorrs$   cCs´dkl}l}|dtƒ}||ƒ}d}t||dƒt||ƒ}|i d|jdƒ||ƒ}d}t||dƒt||ƒ}|i d|jd ƒdS( N(s CookieJarsDefaultCookiePolicyR¤shttp://foo.bar.com/sspam=eggs; Version=1tPaths&absent path returned with path presentsspam=eggs; Version=1; Path=/s $Path="/"spath not returned( RR”R}RiR~R6RJRQR¡RR (RR}R6R”RJR¡R~((R ttest_path_mirror‹s  cCsHdkl}l}|dtƒ}||ƒ}d}t||dƒt||ƒ}|i d|jdƒ||ƒ}d}t||dƒt||ƒ}|i t i d|ƒd ƒ||ƒ}d}t||d ƒt||ƒ}|i d |jd ƒ||ƒ}d}t||d ƒt||ƒ}|i d|jdƒdS(N(s CookieJarsDefaultCookiePolicyR¤shttp://foo.bar.com/sspam=eggs; Version=1tPorts&absent port returned with port presentsspam=eggs; Version=1; Ports\$Port([^=]|$)s-port with no value not returned with no valuesspam=eggs; Version=1; Port="80"s $Port="80"s5port with single value not returned with single values$spam=eggs; Version=1; Port="80,8080"s$Port="80,8080"s;port with multiple values not returned with multiple values( RR”R}RiR~R6RJRQR¡RR R R (RR}R6R”RJR¡R~((R ttest_port_mirrors4    cCsgdkl}l}||dtƒƒ}d}t||dƒt||ƒ}|i d|jdƒdS(N(s CookieJarsDefaultCookiePolicyR¤shttp://foo.bar.com/sfspam=eggs; Version=1; Comment="does anybody read these?"; CommentURL="http://foo.bar.net/comment.html"tComments:Comment or CommentURL cookie-attributes returned to server( RR”R}RiR6RJRQR¡RR (RR}R6R”RJR¡((R ttest_no_return_comment¿sc Cs€dkl}l}l}||dtƒƒ} t| ddƒt| ddƒt| ddƒt| ddƒt| d d ƒd d d d d g}d ddddg}dddddg} dddddg}x§t dƒD]™}d }xŠ| D]‚}|it||ƒƒ|i|i||ƒ|i|i||ƒ|i|i| |ƒ|i|i||ƒ|d }qòWqßWdS(N(s CookieJarsCookiesDefaultCookiePolicyR¤shttp://blah.spam.org/sefoo=eggs; Version=1; Comment="does anybody read these?"; CommentURL="http://foo.bar.net/comment.html"shttp://www.acme.com/blah/sspam=bar; securesfoo=bar; secure; Version=1sfoo=bar; path=/; Version=1shttp://www.sol.nossbang=wallop; version=1; domain=".sol.no"; port="90,100, 80,8080"; max-age=100; Comment = "Just kidding! (\"|\\\\) "iitbangR'R7s.sol.nos blah.spam.orgs www.acme.comR_s/blahs/blah/i(RR”RSR}RitcsRQRRtversionstnamestdomainstpathstrangetiR6RR t isinstanceRR*RŠR€tpath( RR}RæR6R”RèRãRSRäRâRå((R ttest_Cookie_iteratorÌs2    cCs™dkl}|i|dgƒd dddggƒ|i|d gƒdddggƒ|i|dgƒddggƒ|i|d gƒgƒdS(N(sparse_ns_headerssfoo=bar; path=/; domainR'R(RêR_R€R*R+s)foo=bar; expires=Foo Bar 12 33:22:11 2000R)R(sfoosbar(spathR_(sdomainN(sversionR+(sfoosbar(sexpiresN(sversionR+(sfooN(sversionR+(RR,RRR"(RR,((R R.îs cCs˜d„}xHdgdgdgdggD](}||ƒ}|it|ƒdƒq(Wdg}||ƒ}|idd d }|i|i djƒdS( NcCsRdkl}dkl}|ƒ}|dƒ}t|dƒ}|i ||ƒ|S(N(s CookieJar(sRequestshttp://www.example.com/( RR”RTRUR6RVRDRGR„R\(RGR6R”RVRUR„((R tcookiejar_from_cookie_headerss    s Set-Cookie: s Set-Cookie2: s-Set-Cookie2: a=foo; path=/; Version=1; domainsSet-Cookie: b=foo; max-age=oopsis3Set-Cookie: c=foo; expires=Foo Bar 12 33:22:11 2000swww.example.comR_R6( RìRGR6RRRŸRfR‰R R)R"(RR6RGR‰Rì((R ttest_bad_cookie_headers    (R$R%R…RRšRœR£R¥R¨RªR®R°R³RµR¹RºRÁRÂRÉRÎRÖR×RØRÚRÜRÞRàRëR.Rí(((R R{s8/  " % ( *    % 2 . " +     " " tLWPCookieTestscBsttZd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Z d „Z d „Z d „Z d „Z RS( Nc Cs6dkl}l}dkl}tiƒdd} g}||dt ƒƒ}|ddhdd <ƒ}|i d | ƒt |d ƒ}|i||ƒ|d ƒ}|i|ƒ|i|id ƒd ƒ|i|idƒdƒ|i dƒt |d ƒ}|i||ƒ|dƒ}|i|ƒ|id ƒ}|id|jo d |jƒ|i dƒt |dƒ}|i||ƒ|d ƒ}|i|ƒ|id ƒ}|id|jod |jo d|jƒ|dƒ}|i|ƒ|id ƒ}|id|jod |jo |idƒƒdS(N(s CookieJarsDefaultCookiePolicy(sRequestiiR¤shttp://www.acme.com:80/RGR«swww.acme.com:80sVSet-Cookie: CUSTOMER=WILE_E_COYOTE; path=/ ; expires=Wednesday, 09-Nov-%d 23:12:40 GMTshttp://www.acme.com/RSsCUSTOMER=WILE_E_COYOTERÊs $Version="1"s4Set-Cookie: PART_NUMBER=ROCKET_LAUNCHER_0001; path=/shttp://www.acme.com/foo/bars PART_NUMBER=ROCKET_LAUNCHER_0001s%Set-Cookie: SHIPPING=FEDEX; path=/fooshttp://www.acme.comsSHIPPING=FEDEXshttp://www.acme.com/foo/sSHIPPING=FEDEX;(RR”R}RTRURt localtimet year_plus_oneRGRiR6RVRZRDRBR\RWRReRXR¡R t startswith( RR}R6R”RBRVRURGR¡Rð((R ttest_netscape_example_1&s@ &         -  cCsþdkl}dkl}|ƒ}g}|dƒ}|idƒt|dƒ}|i ||ƒ|dƒ}|i |ƒ|i |idƒdƒ|idƒt|dƒ}|i ||ƒ|dƒ}|i |ƒ|itid |idƒƒƒdS( N(s CookieJar(sRequestshttp://www.acme.com/s4Set-Cookie: PART_NUMBER=ROCKET_LAUNCHER_0001; path=/RSs PART_NUMBER=ROCKET_LAUNCHER_0001s6Set-Cookie: PART_NUMBER=RIDING_ROCKET_0023; path=/ammoshttp://www.acme.com/ammosBPART_NUMBER=RIDING_ROCKET_0023;\s*PART_NUMBER=ROCKET_LAUNCHER_0001(RR”RTRUR6RGRVRZRDRBR\RWRRRXR R R (RR6R”RBRVRURG((R ttest_netscape_example_2„s&          cCs dkl}l}||dtƒƒ}t|ddƒ}|i| ƒt|ddƒ}|it i d|ƒƒt|dd ƒ}|it i d |ƒƒ|it i d |ƒƒ|it i d |ƒƒt|d ƒ}|it i d|ƒo d|jƒdS(N(s CookieJarsDefaultCookiePolicyR¤shttp://www.acme.com/acme/logins3Customer="WILE_E_COYOTE"; Version="1"; Path="/acme"s!http://www.acme.com/acme/pickitems=Part_Number="Rocket_Launcher_0001"; Version="1"; Path="/acme"s=^\$Version="?1"?; Customer="?WILE_E_COYOTE"?; \$Path="/acme"$s!http://www.acme.com/acme/shippings+Shipping="FedEx"; Version="1"; Path="/acme"s^\$Version="?1"?;s7Part_Number="?Rocket_Launcher_0001"?;\s*\$Path="\/acme"s-Customer="?WILE_E_COYOTE"?;\s*\$Path="\/acme"s http://www.acme.com/acme/processs%Shipping="?FedEx"?;\s*\$Path="\/acme"t WILE_E_COYOTE( RR”R}RiR6RQR‰RR R R (RR}R6R”R‰((R ttest_ietf_example_1ºs$         cCs–dkl}l}||dtƒƒ}t|dddƒt|dƒ}|it i d|ƒƒt|dƒ}|id |jo d |jƒdS( N(s CookieJarsDefaultCookiePolicyR¤s&http://www.acme.com/acme/ammo/specifics=Part_Number="Rocket_Launcher_0001"; Version="1"; Path="/acme"s@Part_Number="Riding_Rocket_0023"; Version="1"; Path="/acme/ammo"s!http://www.acme.com/acme/ammo/...s(Riding_Rocket_0023.*Rocket_Launcher_0001shttp://www.acme.com/acme/parts/tRocket_Launcher_0001tRiding_Rocket_0023( RR”R}RiR6RQR‰RR R R (RR}R6R”R‰((R ttest_ietf_example_2-s  c Cszdkl}l}|dtƒ}|d|ƒ}d}t|ddƒ}|i | ƒt|ddƒ}|i t |ƒdƒt|d d ƒ}|i t |ƒdƒt|d d ƒ}|i t |ƒd ƒt|d dƒ}|i t |ƒd ƒt|ddƒ}|i t |ƒd ƒt|ddƒ}|i t |ƒdƒt|ddƒ}|i t |ƒdƒt|ddƒ}|i t |ƒdƒt|ddƒ}|i t |ƒdƒt|ddƒ}|i t |ƒdƒt i}zE|i|dtƒt|ƒ}|d|ƒ}|i|dtƒWdyti|ƒWntj onXX|i |t|ƒƒdS(N(sDefaultCookiePolicys LWPCookieJarR¤RÃs max-age=3600shttp://www.acme.coms!foo=bar; domain=".com"; version=1s'ping=pong; domain="acme.com"; version=1ishttp://www.a.acme.coms'whiz=bang; domain="acme.com"; version=1s,wow=flutter; domain=".a.acme.com"; version=1ishttp://125.125.125.125s*zzzz=ping; domain="125.125.125"; version=1shttp://www.sol.nos6blah=rhubarb; domain=".sol.no"; path="/foo"; version=1shttp://www.sol.no/foo/bars3bing=bong; domain=".sol.no"; path="/foo"; version=1is5whiz=ffft; domain=".sol.no"; port="90,100"; version=1ssbang=wallop; version=1; domain=".sol.no"; port="90,100, 80,8080"; max-age=100; Comment = "Just kidding! (\"|\\\\) "is9foo9=bar; version=1; domain=".sol.no"; port; max-age=100;ishttp://www.sol.no/Set-Cookie: p2=perm;Path=/;expires=Fri, 02-Feb-%d 23:24:20 GMTs<Set-Cookie: s2=session;Path=/scripts;Domain=.perlmeister.coms2Set-Cookie2: s3=session;Version=1;Discard;Path="/"t session_aftert perm_aftertsession_beforet perm_befores %s_befores%s_after(RR”RTRURRïRðRVRGRZRDRBR6R\tcounterR‰RgtkeyR¢RR ( RR6R R”RBRVRURGR‰R Rð((R ttest_session_cookies]s0       *   (R$R%RòRóRõRøRûRÿRRRRRR(((R Rî#s ^ 6 s 8 ]  +    "cCs*dkl}titttttƒdS(N(s test_sets( R!t test_setsRbt run_unittestRR&R{R]Rî(tverboseR((R t test_mainŒs   t__main__R(t__doc__R RkRtunittesttTestCaseR!RbRR&RDRQRRRNR]R{RîR"RR$Ri(RbRNRRR]R&RîRR RR{RRQRDRRk((R t?s(  \f   +ÿÿÿÿÿk