+
    üÐj=*  ã                   ól   € ^ RI Ht ^ RIHt ^ RIHt ^ RIHt ^ RIH	t	  ! R R]P                  4      tR# )	é    )Úunittest)Úxpath)ÚElement)Ú
XPathQuery)ÚSyntaxErrorc                   ó  a € ] tR t^t o V 3R lR ltV 3R lR ltV 3R lR ltV 3R lR ltV 3R	 lR
 ltV 3R lR lt	V 3R lR lt
V 3R lR ltV 3R lR ltV 3R lR ltV 3R lR ltV 3R lR ltV 3R lR ltV 3R lR ltV 3R lR ltV 3R lR  ltV 3R! lR" ltV 3R# lR$ ltV 3R% lR& ltV 3R' lR( ltV 3R) lR* ltV 3R+ lR, ltV 3R- lR. ltV 3R/ lR0 ltV 3R1 lR2 ltV 3R3 lR4 ltV 3R5 lR6 ltR7tV t R8# )9Ú
XPathTestsc                ó   <€ V ^8„  d   QhRR/# ©é   ÚreturnN© )ÚformatÚ__classdict__s   "€Ú?/usr/lib/python3/dist-packages/twisted/words/test/test_xpath.pyÚ__annotate__ÚXPathTests.__annotate__   s   ø€ ÷ =,ñ =,�tñ =,ó    c                óÌ  € \        R4      V n        RV P                  R&   RV P                  R&   V P                  P                  R4       V P                  P                  R4      V n        V P                  P                  R4      V n        V P
                  P                  R4      V n        V P                  P                  R	4       V P                  P                  R
4       V P                  P                  R4      V n        RV P                  R&   V P                  P                  R4      V n        V P                  P                  R4      V n	        V P                  P                  R4      V n
        V P                  P                  R4       V P                  P                  R4      V n        V P                  P                  R4      V n        RV P                  R&   RV P                  R&   V P                  P                  R4      V n        V P                  P                  R4      V n        V P                  P                  R4       V P                  P                  R4      V n        RV P                  R&   RV P                  R&   V P                  P                  R4      V n        V P                  P                  R4      V n        V P"                  P                  R4       V P                  P                  R4      V n        RV P$                  R&   RV P$                  R&   RV P$                  R&   V P$                  P                  R4      V n        V P&                  P                  R4       R# )ÚtestnsÚfooÚvalue1Úattrib1zuser@host/resourceÚattrib3ÚsomecontentÚbarÚgarÚDEFÚsomemorecontentÚvalue2Úattrib2ÚABCÚvalue4Úattrib4Úvalue5Úattrib5ÚJKLÚMNOÚvalue6ô   Ã¡Úattrib6Úquuxu   â˜ƒN)r   r   )r   ÚeÚ
addContentÚ
addElementÚbar1ÚsubfooÚgar1Úbar2Úbar3Úsubfoo2Úgar2Úbar4Úbar5Úsubfoo3Úgar3Úbar6Úsubfoo4Úgar4Úbar7r,   ©Úselfs   &r   ÚsetUpÚXPathTests.setUp   s|  € ô8 Ð*Ó+ˆŒØ$ˆ�‰ˆyÑØ0ˆ�‰ˆyÑØ�‰×Ñ˜-Ô(Ø—F‘F×%Ñ% eÓ,ˆŒ	Ø—i‘i×*Ñ*¨5Ó1ˆŒØ—K‘K×*Ñ*¨5Ó1ˆŒ	Ø�	‰	×Ñ˜UÔ#Ø�‰×ÑÐ+Ô,Ø—F‘F×%Ñ% eÓ,ˆŒ	Ø'ˆ�	‰	�)ÑØ—I‘I×(Ñ(¨Ó/ˆŒ	Ø—y‘y×+Ñ+¨EÓ2ˆŒØ—I‘I×(Ñ(¨Ó/ˆŒ	Ø�	‰	×Ñ˜UÔ#Ø—F‘F×%Ñ% eÓ,ˆŒ	Ø—F‘F×%Ñ% eÓ,ˆŒ	Ø'ˆ�	‰	�)ÑØ'ˆ�	‰	�)ÑØ—y‘y×+Ñ+¨EÓ2ˆŒØ—I‘I×(Ñ(¨Ó/ˆŒ	Ø�	‰	×Ñ˜UÔ#Ø—F‘F×%Ñ% eÓ,ˆŒ	Ø'ˆ�	‰	�)ÑØ'ˆ�	‰	�)ÑØ—y‘y×+Ñ+¨EÓ2ˆŒØ—I‘I×(Ñ(¨Ó/ˆŒ	Ø�	‰	×Ñ˜UÔ#Ø—F‘F×%Ñ% eÓ,ˆŒ	Ø'ˆ�	‰	�)ÑØ'ˆ�	‰	�)ÑØ#ˆ�	‰	�)ÑØ—I‘I×(Ñ(¨Ó0ˆŒ	Ø�	‰	×Ñ˜]Ö+r   c                ó   <€ V ^8„  d   QhRR/# r   r   )r   r   s   "€r   r   r   L   s   ø€ ÷ 
ñ 
 Dñ 
r   c           	     ó  € V P                  \        P                  ! RV P                  4      R4       V P                  \        P                  ! RV P                  4      V P
                  V P                  V P                  V P                  V P                  V P                  .4       V P                  \        P                  ! RV P                  4      R4       V P                  \        P                  ! RV P                  4      RR.4       R# )z-
Test basic operation of the static methods.
ú/foo/barTú/foor   r   N)ÚassertEqualr   Úmatchesr-   ÚqueryForNodesr0   r3   r7   r8   r;   r>   ÚqueryForStringÚqueryForStringListr?   s   &r   Útest_staticMethodsÚXPathTests.test_staticMethodsL   sº   € ð 	×ÑœŸš z°4·6±6Ó:¸DÔAØ×ÑÜ×Ò 
¨D¯F©FÓ3Ø�Y‰Y˜Ÿ	™	 4§9¡9¨d¯i©i¸¿¹ÀDÇIÁIÐNô	
ð 	×Ñœ×-Ò-¨f°d·f±fÓ=¸}ÔMØ×ÑÜ×$Ò$ V¨T¯V©VÓ4°}ÐFWÐ6Xö	
r   c                ó   <€ V ^8„  d   QhRR/# r   r   )r   r   s   "€r   r   r   Z   ó   ø€ ÷ 0ñ 0 Tñ 0r   c                ór   € \        R4      pV P                  VP                  V P                  4      ^4       R# )z#
Test matching foo with child bar.
rE   N©r   rG   rH   r-   ©r@   Úxps   & r   Útest_locationFooBarÚXPathTests.test_locationFooBarZ   s+   € ô ˜
Ó#ˆØ×Ñ˜Ÿ™ D§F¡FÓ+¨QÖ/r   c                ó   <€ V ^8„  d   QhRR/# r   r   )r   r   s   "€r   r   r   a   s   ø€ ÷ 
ñ 
¨ñ 
r   c                ó
  € \        R4      pV P                  VP                  V P                  4      ^4       V P                  VP	                  V P                  4      V P
                  V P                  V P                  .4       R# )z(
Test finding foos at the second level.
z/foo/bar/fooN)r   rG   rH   r-   rI   r1   r9   r<   rR   s   & r   Útest_locationFooBarFooÚ!XPathTests.test_locationFooBarFooa   s`   € ô ˜Ó'ˆØ×Ñ˜Ÿ™ D§F¡FÓ+¨QÔ/Ø×ÑØ×Ñ˜TŸV™VÓ$ t§{¡{°D·L±LÀ$Ç,Á,Ð&Oö	
r   c                ó   <€ V ^8„  d   QhRR/# r   r   )r   r   s   "€r   r   r   k   rO   r   c                ór   € \        R4      pV P                  VP                  V P                  4      ^ 4       R# )z
Test not finding bar3.
z	/foo/bar3NrQ   rR   s   & r   Útest_locationNoBar3ÚXPathTests.test_locationNoBar3k   s+   € ô ˜Ó$ˆØ×Ñ˜Ÿ™ D§F¡FÓ+¨QÖ/r   c                ó   <€ V ^8„  d   QhRR/# r   r   )r   r   s   "€r   r   r   r   s   ø€ ÷ 	
ñ 	
¨ñ 	
r   c           	     óL  € \        R4      pV P                  VP                  V P                  4      R4       V P                  VP	                  V P                  4      V P
                  V P                  V P                  V P                  V P                  V P                  .4       R# )z
Test finding childs of foo.
z/foo/*TN)r   rG   rH   r-   rI   r0   r3   r7   r8   r;   r>   rR   s   & r   Útest_locationAllChildsÚ!XPathTests.test_locationAllChildsr   ss   € ô ˜Ó!ˆØ×Ñ˜Ÿ™ D§F¡FÓ+¨TÔ2Ø×ÑØ×Ñ˜TŸV™VÓ$Ø�Y‰Y˜Ÿ	™	 4§9¡9¨d¯i©i¸¿¹ÀDÇIÁIÐNö	
r   c                ó   <€ V ^8„  d   QhRR/# r   r   )r   r   s   "€r   r   r   }   s   ø€ ÷ 3ñ 3 ñ 3r   c                ór   € \        R4      pV P                  VP                  V P                  4      R4       R# )z#
Test matching foo with attribute.
z/foo[@attrib1]TNrQ   rR   s   & r   Útest_attributeÚXPathTests.test_attribute}   s,   € ô Ð(Ó)ˆØ×Ñ˜Ÿ™ D§F¡FÓ+¨TÖ2r   c                ó   <€ V ^8„  d   QhRR/# r   r   )r   r   s   "€r   r   r   „   s   ø€ ÷ @ñ @¨Dñ @r   c                óÞ   € \        R4      pV P                  VP                  V P                  4      R4       V P                  VP	                  V P                  4      V P
                  .4       R# )z.
Test find nodes with attribute having value.
z/foo/*[@attrib2='value2']TN)r   rG   rH   r-   rI   r3   rR   s   & r   Útest_attributeWithValueAnyÚ%XPathTests.test_attributeWithValueAny„   óQ   € ô Ð3Ó4ˆØ×Ñ˜Ÿ™ D§F¡FÓ+¨TÔ2Ø×Ñ˜×)Ñ)¨$¯&©&Ó1°D·I±I°;Ö?r   c                ó   <€ V ^8„  d   QhRR/# r   r   )r   r   s   "€r   r   r   Œ   s   ø€ ÷ @ñ @¨tñ @r   c                óÞ   € \        R4      pV P                  VP                  V P                  4      R4       V P                  VP	                  V P                  4      V P
                  .4       R# )z9
Nodes' attributes can be matched with non-ASCII values.
u   /foo/*[@attrib6='Ã¡']TN)r   rG   rH   r-   rI   r>   rR   s   & r   Útest_locationWithValueUnicodeÚ(XPathTests.test_locationWithValueUnicodeŒ   sQ   € ô Ð/Ó0ˆØ×Ñ˜Ÿ™ D§F¡FÓ+¨TÔ2Ø×Ñ˜×)Ñ)¨$¯&©&Ó1°D·I±I°;Ö?r   c                ó   <€ V ^8„  d   QhRR/# r   r   )r   r   s   "€r   r   r   ”   rO   r   c                ór   € \        R4      pV P                  VP                  V P                  4      ^4       R# )z$
Test matching node with namespace.
z/foo[@xmlns='testns']/barNrQ   rR   s   & r   Útest_namespaceFoundÚXPathTests.test_namespaceFound”   ó,   € ô Ð3Ó4ˆØ×Ñ˜Ÿ™ D§F¡FÓ+¨QÖ/r   c                ó   <€ V ^8„  d   QhRR/# r   r   )r   r   s   "€r   r   r   ›   s   ø€ ÷ 0ñ 0¨ñ 0r   c                ór   € \        R4      pV P                  VP                  V P                  4      ^ 4       R# )z.
Test not matching node with wrong namespace.
z/foo[@xmlns='badns']/bar2NrQ   rR   s   & r   Útest_namespaceNotFoundÚ!XPathTests.test_namespaceNotFound›   rs   r   c                ó   <€ V ^8„  d   QhRR/# r   r   )r   r   s   "€r   r   r   ¢   s   ø€ ÷ 0ñ 0¨ñ 0r   c                ór   € \        R4      pV P                  VP                  V P                  4      ^4       R# )z1
Test matching node with attribute having value.
z/foo[@attrib1='value1']NrQ   rR   s   & r   Útest_attributeWithValueÚ"XPathTests.test_attributeWithValue¢   s,   € ô Ð1Ó2ˆØ×Ñ˜Ÿ™ D§F¡FÓ+¨QÖ/r   c                ó   <€ V ^8„  d   QhRR/# r   r   )r   r   s   "€r   r   r   ©   s   ø€ ÷ Cñ C Tñ Cr   c                ór   € \        R4      pV P                  VP                  V P                  4      R4       R# )z=
queryforString on absolute paths returns their first CDATA.
rF   r   N)r   rG   rJ   r-   rR   s   & r   Útest_queryForStringÚXPathTests.test_queryForString©   s-   € ô ˜ÓˆØ×Ñ˜×*Ñ*¨4¯6©6Ó2°MÖBr   c                ó   <€ V ^8„  d   QhRR/# r   r   )r   r   s   "€r   r   r   °   s   ø€ ÷ 
ñ 
¨ñ 
r   c                óv   € \        R4      pV P                  VP                  V P                  4      RR.4       R# )z?
queryforStringList on absolute paths returns all their CDATA.
rF   r   r   N©r   rG   rK   r-   rR   s   & r   Útest_queryForStringListÚ"XPathTests.test_queryForStringList°   s6   € ô ˜ÓˆØ×ÑØ×!Ñ! $§&¡&Ó)¨MÐ;LÐ+Mö	
r   c                ó   <€ V ^8„  d   QhRR/# r   r   )r   r   s   "€r   r   r   ¹   s   ø€ ÷ 
ñ 
°Dñ 
r   c                óv   € \        R4      pV P                  VP                  V P                  4      RR.4       R# )z?
queryforStringList on relative paths returns all their CDATA.
z//foor   r   Nr‚   rR   s   & r   Ú"test_queryForStringListAnyLocationÚ-XPathTests.test_queryForStringListAnyLocation¹   s6   € ô ˜Ó ˆØ×ÑØ×!Ñ! $§&¡&Ó)¨MÐ;LÐ+Mö	
r   c                ó   <€ V ^8„  d   QhRR/# r   r   )r   r   s   "€r   r   r   Â   s   ø€ ÷ 
ñ 
 Dñ 
r   c           	     óö   € \        R4      pV P                  VP                  V P                  4      V P                  V P
                  V P                  V P                  V P                  V P                  .4       R# )z
Test finding nodes.
rE   N)
r   rG   rI   r-   r0   r3   r7   r8   r;   r>   rR   s   & r   Útest_queryForNodesÚXPathTests.test_queryForNodesÂ   sV   € ô ˜
Ó#ˆØ×ÑØ×Ñ˜TŸV™VÓ$Ø�Y‰Y˜Ÿ	™	 4§9¡9¨d¯i©i¸¿¹ÀDÇIÁIÐNö	
r   c                ó   <€ V ^8„  d   QhRR/# r   r   )r   r   s   "€r   r   r   Ì   s   ø€ ÷ 3ñ 3 Dñ 3r   c                ór   € \        R4      pV P                  VP                  V P                  4      R4       R# )z'
Test matching a node with given text.
z/foo[text() = 'somecontent']TNrQ   rR   s   & r   Útest_textConditionÚXPathTests.test_textConditionÌ   s,   € ô Ð6Ó7ˆØ×Ñ˜Ÿ™ D§F¡FÓ+¨TÖ2r   c                ó   <€ V ^8„  d   QhRR/# r   r   )r   r   s   "€r   r   r   Ó   s   ø€ ÷ @ñ @¨4ñ @r   c                óÞ   € \        R4      pV P                  VP                  V P                  4      R4       V P                  VP	                  V P                  4      V P
                  .4       R# )z;
A node can be matched by text with non-ascii code points.
u   //*[text()='â˜ƒ']TN)r   rG   rH   r-   rI   r,   rR   s   & r   Útest_textConditionUnicodeÚ$XPathTests.test_textConditionUnicodeÓ   rj   r   c                ó   <€ V ^8„  d   QhRR/# r   r   )r   r   s   "€r   r   r   Û   s   ø€ ÷ 3ñ 3 dñ 3r   c                ór   € \        R4      pV P                  VP                  V P                  4      R4       R# )z
Test for not operator.
z/foo[not(@nosuchattrib)]TNrQ   rR   s   & r   Útest_textNotOperatorÚXPathTests.test_textNotOperatorÛ   s,   € ô Ð2Ó3ˆØ×Ñ˜Ÿ™ D§F¡FÓ+¨TÖ2r   c                ó   <€ V ^8„  d   QhRR/# r   r   )r   r   s   "€r   r   r   â   s   ø€ ÷ 	Vñ 	V¨ñ 	Vr   c                óz  € \        R4      pV P                  VP                  V P                  4      R4       V P                  VP	                  V P                  4      V P
                  V P                  V P                  V P                  .4       V P                  VP                  V P                  4      . RO4       R# )zC
Test finding any nodes named gar and getting their text contents.
z//garTN)r   r"   r'   r(   )
r   rG   rH   r-   rI   r2   r6   r:   r=   rK   rR   s   & r   Útest_anyLocationAndTextÚ"XPathTests.test_anyLocationAndTextâ   sˆ   € ô ˜Ó ˆØ×Ñ˜Ÿ™ D§F¡FÓ+¨TÔ2Ø×ÑØ×Ñ˜TŸV™VÓ$ t§y¡y°$·)±)¸T¿Y¹YÈÏ	É	Ð&Rô	
ð 	×Ñ˜×.Ñ.¨t¯v©vÓ6Ò8TÖUr   c                ó   <€ V ^8„  d   QhRR/# r   r   )r   r   s   "€r   r   r   í   s   ø€ ÷ 
ñ 
 $ñ 
r   c           
     ób  € \        R4      pV P                  VP                  V P                  4      R4       V P                  VP	                  V P                  4      V P
                  V P                  V P                  V P                  V P                  V P                  V P                  .4       R# )z#
Test finding any nodes named bar.
ú//barTN)r   rG   rH   r-   rI   r0   r3   r4   r7   r8   r;   r>   rR   s   & r   Útest_anyLocationÚXPathTests.test_anyLocationí   s�   € ô ˜Ó ˆØ×Ñ˜Ÿ™ D§F¡FÓ+¨TÔ2Ø×ÑØ×Ñ˜TŸV™VÓ$à—	‘	Ø—	‘	Ø—	‘	Ø—	‘	Ø—	‘	Ø—	‘	Ø—	‘	ðö	
r   c                ó   <€ V ^8„  d   QhRR/# r   r   )r   r   s   "€r   r   r      s   ø€ ÷ Hñ H°ñ Hr   c                ó^   € \        R4      pV P                  \        VP                  R4       R# )zV
L{XPathQuery.queryForString} should raise a L{NotImplementedError}
for any location.
rŸ   N)r   ÚassertRaisesÚNotImplementedErrorrJ   rR   s   & r   Útest_anyLocationQueryForStringÚ)XPathTests.test_anyLocationQueryForString   s'   € ô
 ˜Ó ˆØ×ÑÔ-¨r×/@Ñ/@À$ÖGr   c                ó   <€ V ^8„  d   QhRR/# r   r   )r   r   s   "€r   r   r     s   ø€ ÷ @ñ @ $ñ @r   c                óÞ   € \        R4      pV P                  VP                  V P                  4      R4       V P                  VP	                  V P                  4      V P
                  .4       R# )z)
Test boolean and operator in condition.
z.//bar[@attrib4='value4' and @attrib5='value5']TN)r   rG   rH   r-   rI   r8   rR   s   & r   Útest_andOperatorÚXPathTests.test_andOperator  sQ   € ô ÐHÓIˆØ×Ñ˜Ÿ™ D§F¡FÓ+¨TÔ2Ø×Ñ˜×)Ñ)¨$¯&©&Ó1°D·I±I°;Ö?r   c                ó   <€ V ^8„  d   QhRR/# r   r   )r   r   s   "€r   r   r     s   ø€ ÷ Kñ K ñ Kr   c                óô   € \        R4      pV P                  VP                  V P                  4      R4       V P                  VP	                  V P                  4      V P
                  V P                  .4       R# )z(
Test boolean or operator in condition.
z-//bar[@attrib5='value4' or @attrib5='value5']TN)r   rG   rH   r-   rI   r8   r;   rR   s   & r   Útest_orOperatorÚXPathTests.test_orOperator  sX   € ô ÐGÓHˆØ×Ñ˜Ÿ™ D§F¡FÓ+¨TÔ2Ø×Ñ˜×)Ñ)¨$¯&©&Ó1°D·I±I¸t¿y¹yÐ3IÖJr   c                ó   <€ V ^8„  d   QhRR/# r   r   )r   r   s   "€r   r   r     s   ø€ ÷ 	Kñ 	K¨Tñ 	Kr   c                óô   € \        R4      pV P                  VP                  V P                  4      R4       V P                  VP	                  V P                  4      V P
                  V P                  .4       R# )z;
Test multiple boolean operators in condition with parens.
zf//bar[@attrib4='value4' and
                                 (@attrib5='value4' or @attrib5='value6')]TN)r   rG   rH   r-   rI   r;   r>   rR   s   & r   Útest_booleanOperatorsParensÚ&XPathTests.test_booleanOperatorsParens  s_   € ô ðNó
ˆð 	×Ñ˜Ÿ™ D§F¡FÓ+¨TÔ2Ø×Ñ˜×)Ñ)¨$¯&©&Ó1°D·I±I¸t¿y¹yÐ3IÖJr   c                ó   <€ V ^8„  d   QhRR/# r   r   )r   r   s   "€r   r   r   #  s   ø€ ÷ 
Vñ 
V¨tñ 
Vr   c                ó
  € \        R4      pV P                  VP                  V P                  4      R4       V P                  VP	                  V P                  4      V P
                  V P                  V P                  .4       R# )z>
Test multiple boolean operators in condition without parens.
z„//bar[@attrib5='value4' or
                                 @attrib5='value5' or
                                 @attrib5='value6']TN)r   rG   rH   r-   rI   r8   r;   r>   rR   s   & r   Útest_booleanOperatorsNoParensÚ(XPathTests.test_booleanOperatorsNoParens#  sd   € ô ð7ó
ˆð
 	×Ñ˜Ÿ™ D§F¡FÓ+¨TÔ2Ø×Ñ˜×)Ñ)¨$¯&©&Ó1°D·I±I¸t¿y¹yÈ$Ï)É)Ð3TÖUr   c                ó   <€ V ^8„  d   QhRR/# r   r   )r   r   s   "€r   r   r   /  s   ø€ ÷ 
ñ 
¨tñ 
r   c                ó´   € V P                  \        \        R4      pV P                  VP                  P                  R4      RVP                  ,          4       R# )ze
A missing closing bracket raises a SyntaxError.

This test excercises the most common failure mode.
z//bar[@attrib1zTrying to find one ofzCSyntaxError message '%s' doesn't start with 'Trying to find one of'N)r¤   r   r   Ú
assertTrueÚmsgÚ
startswith)r@   Úexcs   & r   Útest_badXPathNoClosingBracketÚ(XPathTests.test_badXPathNoClosingBracket/  sG   € ð ×Ñ¤¬ZÐ9MÓNˆØ�‰Ø�G‰G×ÑÐ6Ó7ØUØ�g‰gõö	
r   )r0   r3   r4   r7   r8   r;   r>   r-   r2   r6   r:   r=   r,   r1   r5   r9   r<   N)!Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__rA   rL   rT   rX   r\   r`   rd   rh   rm   rq   rv   rz   r~   rƒ   r‡   r‹   r�   r“   r—   r›   r    r¦   rª   r®   r²   r¶   r¾   Ú__static_attributes__Ú__classdictcell__)r   s   @r   r	   r	      s(  ø‡ € ÷=,ð =,÷~
ð 
÷0ð 0÷
ð 
÷0ð 0÷	
ð 	
÷3ð 3÷@ð @÷@ð @÷0ð 0÷0ð 0÷0ð 0÷Cð C÷
ð 
÷
ð 
÷
ð 
÷3ð 3÷@ð @÷3ð 3÷	Vð 	V÷
ð 
÷&Hð H÷@ð @÷Kð K÷	Kð 	K÷
Vð 
V÷
ö 
r   r	   N)Útwisted.trialr   Útwisted.words.xishr   Útwisted.words.xish.domishr   Útwisted.words.xish.xpathr   Útwisted.words.xish.xpathparserr   ÚTestCaser	   r   r   r   Ú<module>rÌ      s*   ðõ
 #Ý $Ý -Ý /Ý 6ôn
�×"Ñ"ö n
r   