ϪfKdZddlmZddlmZddlmZddlmZGddejZ Gdd Z Gd d e ejZ Gd d e ejZ GddejZy)zF Tests for L{twisted.words.xish.domish}, a DOM-like library for XMPP. ) verifyObject) requireModule)unittest)domishcpeZdZdZdZdZdZdZdZdZ dZ d Z d Z d Z d Zd ZdZdZdZdZy) ElementTestsz& Tests for L{domish.Element}. c^ttjtjdy)zB L{domish.Element} implements L{domish.IElement}. NfooN)rrIElementElementselfs @/usr/lib/python3/dist-packages/twisted/words/test/test_domish.pytest_interfacezElementTests.test_interfaces V__fnn]&CDcd}|jtj|d|jtj|ddy)zF The built-in entity references are properly encoded. z&<>'"z&<>'"z&<>'"N) assertEqualr escapeToXml)rss r test_escapingzElementTests.test_escapingsC  ++A.0BC ++Aq13NOrcftjd}|j|jdy)zN An attribute on L{domish.Namespace} yields a qualified name. testnsrr N)r Namespacerr )rnss rtest_namespacezElementTests.test_namespace#s)  h ' !23rctjd}|j|jd|j|jd|j|j d|j|j dtjd}|j|jd|j|jd|j|j d|j|j dtjd}|j|jd|j|jd|j|j d|j|j dtjdd}|j|jd|j|jd|j|j dy) z? Basic L{domish.Element} initialization tests. r r Nr r!rrtest2ns)rr rnameuri defaultUriparentres rtest_elementInitzElementTests.test_elementInit*sl NN= ) ' % t, 4( NN; ' ' # r* 4( NN, - ' ) x0 4( NN,i 8 ' ) y1rcZtjd}|jd|jd}d|d<d|d<|jd|jd|jd |jd |j |j d d |j |j ||j jd d|j d<|j |j d|j |j |j d|j|j |dd|d=|j |jdd|j |jdd|j |ddy)z6 Basic L{domish.Element} child tests. r somecontent)testns2bar2value1attrib1value2)r,attrib2barabc123abc123 subcontent somevalue bar2valuerrr1N) rr addContent addElementrchildrenr-r2 hasAttribute)rr(b2s r test_childOpszElementTests.test_childOpsEsa NN, - ]# \\- .) $, ! U U U U B2 $ ,'){ A/ A. 9x0 iL  2A6  2A6 12H=rctjd}|jdt|}|j d||j |ty)6 Extract character data using L{str}. rr+Nrr r;strrassertIsInstancerelementtexts rtest_characterDatazElementTests.test_characterDatafJ..!23=)7| - dC(rctjd}|jdt|}|j d||j |ty)z< Extract ascii character data using L{str}. rr+NrCrFs rtest_characterDataNativeStringz+ElementTests.test_characterDataNativeStringqrJrctjd}|jdt|}|j d||j |ty)rBr☃NrCrFs rtest_characterDataUnicodez&ElementTests.test_characterDataUnicode|rJrctjd}|jdt|}|j dj ||j |ty)zA Extract character data as UTF-8 using L{bytes}. rrNN)rr r;bytesrencoderErFs rtest_characterDataBytesz$ElementTests.test_characterDataBytessS..!23=)W~ --/6 dE*rctjd}|jd|jd|jd|j dt |y)zV Mixing addChild with cdata and element, the first cdata is returned. rr3r2defN)rr addChildr<rrDrrGs rtest_characterDataMixedz$ElementTests.test_characterDataMixedsQ..!235! G -rctjd}|jd|jdt |y)zT Unicode strings passed to C{addContent} become the character data. runicodeNrr r;rrDrWs rtest_addContentzElementTests.test_addContents5..!239% CL1rctjd}|jd|jdt |y)zY ASCII native strings passed to C{addContent} become the character data. rnativeNr[rWs r test_addContentNativeStringASCIIz-ElementTests.test_addContentNativeStringASCIIs5..!238$ 3w<0rcptjd}|jt|jdy)zV Byte strings passed to C{addContent} are not acceptable on Python 3. rsbytesN)rr assertRaises TypeErrorr;rWs rtest_addContentBytesz!ElementTests.test_addContentBytess+..!23 )W%7%7Brctjd}|jdd}|jdt |y)zW Content passed to addElement becomes character data on the new child. rr2r3)contentN)rr r<rrD)rrGchilds rtest_addElementContentz#ElementTests.test_addElementContents<..!23""5%"8 E +rcxtjd}|jd}|jd}|jd}|jd}t|j }|j |||j |||j |||j ||y)z Calling C{elements} without arguments on a L{domish.Element} returns all child elements, whatever the qualified name. rr#r,bazquuxrr#N)rr r<listelementsassertInrr(c1c2c3c4eltss r test_elementszElementTests.test_elementss NN, - \\& ! \\, - \\& ! \\, -AJJL! b$ b$ b$ b$rc|tjd}|jd}|jd}|jd}|jd}t|j dd}|j |||j |||j |||j ||y)z Calling C{elements} with a namespace and local name on a L{domish.Element} returns all child elements with that qualified name. rr#rirkrlrN)rr r<rmrnro assertNotInrps rtest_elementsWithQNz ElementTests.test_elementsWithQNs NN, - \\& ! \\, - \\& ! \\, -AJJx01 b$ T" T" b$rN)__name__ __module__ __qualname____doc__rrrr)r@rIrLrOrSrXr\r_rcrgrvryrrrrs[E P426>B ) ) ) +.21C, $ rrcdeZdZdZdZdZdZdZdZdZ dZ d Z d Z d Z d Zd ZdZdZy)DomishStreamTestsMixinz Mixin defining tests for different stream implementations. @ivar streamClass: A no-argument callable which will be used to create an XML parser which can produce a stream of elements from incremental input. cd|_d|_d|_g|_|j |_|j |j _|jj|j _ |j|j _ y)NF) doc_started doc_endedrootrn streamClassstream _docStartedDocumentStartEventappend ElementEvent _docEndedDocumentEndEventrs rsetUpzDomishStreamTestsMixin.setUpsg   &&( )-)9)9 &#'==#7#7  '+~~ $rc ||_d|_yNT)rr)rrs rrz"DomishStreamTestsMixin._docStarteds rcd|_yr)rrs rrz DomishStreamTestsMixin._docEndeds rc:|jj|y)N)rparserxmls rdoTestzDomishStreamTestsMixin.doTests #rcd}|jj||j|jd|j|jj d|j|j dj d|j|j dj d|j|jdy)NsTrrrfrchild2)rrrrrr#rnrrs r testHarnessz"DomishStreamTestsMixin.testHarnesss/ # ))40 0 q)..8 q)..9 .rcd}|jj||j|jjd|j|jj d|j|j djd|j|j dj d|j|j ddd|j|j djj d |jt|j djd y) Ns some&data> retherxrmessagejabbertor2xdelayz some&data>) rrrrr#r$rnxrDrs r testBasicz DomishStreamTestsMixin.testBasics "  # 2 1 q).. : q)--x8 q)$/7 q)++//: T]]1-//0,?rcd}|jj||j|jjd|j|j djdy)Ns(r!rrrrrrr$rnrs r testNoRootNSz#DomishStreamTestsMixin.testNoRootNSsP9 # + q)--x8rczd}|jj||j|jjd|j|jj d|j|j djd|j|j dj dy)Ns=rr!r)rrrrr$r%rnrs rtestNoDefaultNSz&DomishStreamTestsMixin.testNoDefaultNSsN # 1 --r2 q)--r2 q)44b9rcd}|jj||j|jjd|j|j djdy)Ns$rrrrs rtestChildDefaultNSz)DomishStreamTestsMixin.testChildDefaultNS(sP5 # 1 q)--x8rcd}|jj||j|jdjj dy)Nsg rr!)rrrrnrr$rs rtestEmptyChildNSz'DomishStreamTestsMixin.testEmptyChildNS/sB # q)0044b9rcd}|jj||j|jdjdy)z Attributes with namespace are parsed without Exception. (https://twistedmatrix.com/trac/ticket/9730 regression test) s~ test rzhttp://example.orgN)rrrrnr$rs rtest_attributesWithNamespacesz4DomishStreamTestsMixin.test_attributesWithNamespaces7s=  # q)--/CDrcd}|jj||j|jjdd|j|j dj dy)Ns<r r,r)rrrr localPrefixesrnr$rs rtestChildPrefixz&DomishStreamTestsMixin.testChildPrefixGsWM # 007C q)--y9rcn|jtj|jjdy)Ns)rar ParserErrorrrrs rtestUnclosedElementz*DomishStreamTestsMixin.testUnclosedElementNs(     1 13J rcd}|jj||jd|jdj|jd|jdj |jd|jdj |jddi|jdj|jd|jdj|jd|jdj |jd|jdj |ji|jdjy ) at Test that reuse of namespaces does affect an element's serialization. When one element uses a prefix for a certain namespace, this is stored in the C{localPrefixes} attribute of the element. We want to make sure that elements created after such use, won't have this prefix end up in their C{localPrefixes} attribute, too. s child1rrr!r rrN)rrrrnr#r$r%rrs rtest_namespaceReusez*DomishStreamTestsMixin.test_namespaceReuseSs # 4==#3#8#89 4==#3#7#78 T]]1-889 %*DMM!,<,J,JK 4==#3#8#89 4==#3#7#78 4==#3#>#>? T]]1-;;r) closeElementzrr rtoXmlr's rtestNoNamespacezSerializerTests.testNoNamespacesA NN= ) H- a0':rcntjd}|j|jdy)Nrzrr's rtestDefaultNamespacez$SerializerTests.testDefaultNamespaces( NN, - $;rr's rtestOtherNamespacez"SerializerTests.testOtherNamespaces5 NN,i 8  GGXu% &(W rctjd}|jd|j|j dy)Nrr2 rr r<rrr's rtestChildDefaultNamespacez)SerializerTests.testChildDefaultNamespaces4 NN, - U $FGrctjd}|jd|j|j dy)Nrrr2rrr's rtestChildSameNamespacez&SerializerTests.testChildSameNamespaces5 NN, - &' $FGrctjd}|jdd|j|j dy)Nrr2rrrr's rtestChildSameDefaultNamespacez-SerializerTests.testChildSameDefaultNamespaces6 NN, - UH% $FGrctjd}|jdd|j|j dy)Nrr,r2r,z0rr's rtestChildOtherDefaultNamespacez.SerializerTests.testChildOtherDefaultNamespaces7 NN, - '3 $VWrctjd}|jdd|j|j dy)Nr )ns2r2rzrr's rtestOnlyChildDefaultNamespacez-SerializerTests.testOnlyChildDefaultNamespaces5 NN= ) ^U+ $CDrctjd}|jd|j|j dy)Nr r2zrr's rtestOnlyChildDefaultNamespace2z.SerializerTests.testOnlyChildDefaultNamespace2s3 NN= ) U $78rctjdd}|jd|j|j dy)Nrr,rz<rr's rtestChildInDefaultNamespacez+SerializerTests.testChildInDefaultNamespaces: NN,i 8 '(  GGIU rcvtjdddi}|j|jdy)Nr rrjattribsz(rr's rtestQualifiedAttributez&SerializerTests.testQualifiedAttributes/ NN=3Eu2M N $NOrcvtjdddi}|j|jdy)Nrrrjrz6rr's rtestQualifiedAttributeDefaultNSz/SerializerTests.testQualifiedAttributeDefaultNSs3 NN,7H%6P Q  GGIO rctjd}|jdd}|jd|jdd}|jd|j|j dy) Nr rr,)r,rk)testns3rjtestns4)rrkzr)rr(rrs r testTwoChildszSerializerTests.testTwoChildssm NN; '/;-.0)<,-  GGI l rcvtjdddi}|j|jdy)Nr )z$http://www.w3.org/XML/1998/namespacelangen_USrzrr's rtestXMLNamespacez SerializerTests.testXMLNamespaces4 NN EwO  $=>rc|tjdddi}|j|jddidy)Nr rrjrr,quxz(rr's r)testQualifiedAttributeGivenListOfPrefixesz9SerializerTests.testQualifiedAttributeGivenListOfPrefixess: NN=3Eu2M N  GGY& ')S rctjdddi}|jd}d|d<|j|j dy)Nr rrjrr,rrkzFrrr(cs r testNSPrefixzSerializerTests.testNSPrefixsL NN=3Eu2M N LL+ , &   GGI T rctjdddi}|jd}d|d<|jd|j|j dy) Nr rrjrrrkr zYrrs rtestDefaultNSPrefixz#SerializerTests.testDefaultNSPrefixsX NN=3Eu2M N LL+ , &  U  GGI g rcztjd}|j|jddidgdy)Nrrr2)prefixesprefixesInScopez rr's rtestPrefixScopezSerializerTests.testPrefixScopes8 NN, -  GGh.G H, rcvtjdddi}|j|jdy)Nrr2rrzrr's rtestLocalPrefixesz!SerializerTests.testLocalPrefixess/ NN,UH)rr r<assertIdenticalrjr%rrr's rtestLocalPrefixesWithChildz*SerializerTests.testLocalPrefixesWithChildsU NN,UHzN)rSerializerClassassertNotIdenticalrr rr)rrrr(s rtest_prefixesReusez"SerializerTests.test_prefixesReusese$  " "H 5 !**5 NN-fi=P Q ;QWWhW=WX NN- . 1177H73MNrctjd}|jd|j|j dy)Nr zzrr addRawXmlrrr's rtestRawXMLSerializationz'SerializerTests.testRawXMLSerializations5 NN= ) J $9:rctjd}|jd|j|j dy)Nr u°u°rr's r"testRawXMLWithUnicodeSerializationz2SerializerTests.testRawXMLWithUnicodeSerializations4 NN= ) -. $HIrctjd}d|d<|jd|j|j dy)Nr u my valueȡetestuA degree symbol...°u2A degree symbol...°)rr r;rrr's rtestUnicodeSerializationz(SerializerTests.testUnicodeSerialization!s@ NN= )%&  /0  GGIV rN)rzr{r|rrrrrrrrrrrrrrrrrrrrrrrr r~rrrrs; = H H H X E 9  P  ?     ET O*;J  rrN)r}zope.interface.verifyrtwisted.python.reflectr twisted.trialrtwisted.words.xishrTestCaserrrrrr~rrrsz /0"%M 8$$M `J=J=Z C3X5F5F C*183D3D*e h''e r