
    9bhD                         d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	Zd dlm
Z
 d Z G d dej                        Z G d de      Z G d d	ej                        Z G d
 dej                        Zedk(  r ej&                          yy)    N)headerregistryc                 H    | j                         }|j                  |       |S N)copyupdate)base_defaultsdifferencesdefaultss      E/opt/python-3.12.12/usr/lib/python3.12/test/test_email/test_policy.pymake_defaultsr      s!    !!#HOOK O    c                      e Zd ZdZddddddddZej                         Zej                  ddej                  j                  j                  dej                  j                  j                  dej                  j                  d	       ej                  j                         Zej                  j                    eei       ej                  j$                   eei       ej                  j&                   eed
di      ej                  j(                   eeddd      ej                  j*                   eeddd      ej                  j,                   eeddi      e eei       iZej                  ee   d<   d Zd Zd Zd Zd Zd Zd Zd Zd Z d Z! G d d      Z" G d de#      Z$d Z%d Z& G d  d!ej                  j                        Z'd" Z(d# Z)d$ Z* G d% d&      Z+d' Z,d( Z-d) Z.d* Z/d+ Z0d, Z1d- Z2y).PolicyAPITestsTN   
8bitFN)max_line_lengthlinesepcte_typeraise_on_defectmangle_from_message_factoryverify_generated_headerslong)utf8r   header_factoryrefold_sourcecontent_managerr   r   r   z
)r   r   )r   r   r   r   c           
          | j                   j                         D ]e  \  }}|j                         D ]M  \  }}| j                  ||      5  | j                  t	        ||      |dj                  |             d d d        O g y # 1 sw Y   \xY w)Npolicyattrz2change {} docs/docstrings if defaults have changed)policiesitemssubTestassertEqualgetattrformat)selfr!   expectedr"   values        r   test_defaultszPolicyAPITests.test_defaultsC   sy     $ 3 3 5FH'~~/e\\d\;$$WVT%:E&./5vf~? <;  0 !6;;s   
-BBc           
         | j                   j                         D ]  \  }}t        |      D ]  }| j                  ||      5  |j	                  d      s<t        t        t        j                  j                  |      t        j                        r
	 d d d        n| j                  ||dj                  |             	 d d d          y # 1 sw Y   xY w)Nr    _z{} is not fully tested)r#   r$   dirr%   
startswith
isinstancer'   emailr!   EmailPolicytypesFunctionTypeassertInr(   )r)   r!   r*   r"   s       r   test_all_attributes_coveredz*PolicyAPITests.test_all_attributes_coveredK   s     $ 3 3 5FHF\\d\;,&wu||/G/G'N"'"4"46 	 <; dH&>&E&Ed&KM <; $ !6;;s   AC
"C

Cc                     | j                  t              5 }t        j                  j	                          d d d        t        j                        }d}|D ]  }| j                  ||        y # 1 sw Y   :xY w)N)foldfold_binaryheader_fetch_parseheader_source_parseheader_store_parse)assertRaises	TypeErrorr2   r!   Policystr	exceptionr6   )r)   cmmsgabstract_methodsmethods        r   test_abczPolicyAPITests.test_abcW   s`    y)RLL! *",,2
 'FMM&#& ' *)s   A..A7c                 0   | j                   j                         D ]a  \  }}|D ]1  }| j                  t        |dz         5  t	        ||d        d d d        3 | j                  t        d      5  d |_        d d d        c y # 1 sw Y   fxY w# 1 sw Y   zxY w)Nz.*read-onlyzno attribute.*foo)r#   r$   assertRaisesRegexAttributeErrorsetattrfoo)r)   r!   r
   r"   s       r   test_policy_is_immutablez'PolicyAPITests.test_policy_is_immutablec   s     $ 3 3 5FH ++ND<NOFD$/ PO ! ''8KL!
 ML	 !6OOLLs   B -B B	B	c                     | j                   j                         D ]I  \  }}|D ci c]  }|d  }} |j                  di |}|D ]  }| j                  t	        ||              K y c c}w )N )r#   r$   cloneassertIsNoner'   )r)   policyclassr
   r"   testattrdictr!   s         r   !test_set_policy_attrs_when_clonedz0PolicyAPITests.test_set_policy_attrs_when_clonedk   so     &*]]%8%8%:!K3;<84D$J8L<&[&&66F !!'&$"78 ! &;<s   
A(c                     | j                   D ]P  }| j                  t              5   |d        d d d        | j                  t              5   |d        d d d        R y # 1 sw Y   3xY w# 1 sw Y   ixY w)N) this_keyword_should_not_be_valid)newtline)r#   r>   r?   )r)   rR   s     r   *test_reject_non_policy_keyword_when_calledz9PolicyAPITests.test_reject_non_policy_keyword_when_calledt   sW    ==K""9-TB .""9-T* .- )----s   
A!
A-!A*	-A6	c                    | j                   j                         }t        j                  j                  j                  d      }t        j                  j                  j                  d      }||z   }|j                  d       |j                         D ]!  \  }}| j                  t        ||      |       # ||z   }|j                  d       |j                         D ]!  \  }}| j                  t        ||      |       # |t        j                  j                  z   }|j                         D ]!  \  }}| j                  t        ||      |       # y )Nd   r   2   )
policy_defaultsr   r2   r!   defaultrP   r   r$   r&   r'   )r)   r*   p1p2addedr"   r+   s          r   test_policy_additionz#PolicyAPITests.test_policy_addition{   s   '',,.\\!!'''<\\!!''';R+#>>+KD%WUD159 ,R,#>>+KD%WUD159 ,,,,#>>+KD%WUD159 ,r   c                    d}d}t         j                  j                         }d}||d<   t         j                  j                  j                         }t         j                  j                  j                  d      }| j                  |j                  d|d         |       | j                  |j                  d|d         |       | j                  |j                  d|      |       | j                  |j                  d|      |       y )NSubject: =?utf-8?q?=C3=A1?=
u   Subject: á
   áSubjectT)r   r2   messageEmailMessager!   r^   rP   r&   r9   )r)   expected_asciiexpected_utf8rD   sp_asciip_utf8s          r   test_fold_utf8zPolicyAPITests.test_fold_utf8   s    8'mm((*I,,&&,,.%%+++6iY@.QYI?Oi3^DY2MBr   c                    d}t         j                  j                         }d|d<   t         j                  j                  j                  d      }t         j                  j                  j                  d       }| j                  |j                  d|d         |       | j                  |j                  d|d         |       y )Nrd   re   rf   r   r[   rg   )r)   r*   rD   r_   r`   s        r   test_fold_zero_max_line_lengthz-PolicyAPITests.test_fold_zero_max_line_length   s    2mm((*I\\!!''':\\!!'''=C	N;XFC	N;XFr   c                 H    G d d      } |       }t               }t        j                  j                         }|j	                  ||       | j                  |j                  |g       t               }|j	                  ||       | j                  |j                  ||g       y )Nc                       e Zd Zd Zy)2PolicyAPITests.test_register_defect.<locals>.Dummyc                     g | _         y r   defectsr)   s    r   __init__z;PolicyAPITests.test_register_defect.<locals>.Dummy.__init__   s	    !r   N__name__
__module____qualname__ry   rO   r   r   Dummyrt      s    "r   r~   )objectr2   r!   r3   register_defectr&   rw   )r)   r~   objdefectr!   defect2s         r   test_register_defectz#PolicyAPITests.test_register_defect   s    	" 	" g))+sF+vh/(sG,vw&78r   c                       e Zd Zd Zy)PolicyAPITests.MyObjc                     g | _         y r   rv   rx   s    r   ry   zPolicyAPITests.MyObj.__init__   s	    DLr   Nrz   rO   r   r   MyObjr      s    	r   r   c                       e Zd Zy)PolicyAPITests.MyDefectNr{   r|   r}   rO   r   r   MyDefectr      s    r   r   c                     | j                         }| j                  d      }| j                  | j                  d      5  t        j                  j
                  j                  ||       d d d        y # 1 sw Y   y xY w)Nthe telly is broken)r   r   rI   r2   r!   stricthandle_defectr)   rL   r   s      r   #test_handle_defect_raises_on_strictz2PolicyAPITests.test_handle_defect_raises_on_strict   sX    jjl45##DMM3HILL--c6: JIIs   +A22A;c                    | j                         }| j                  d      }t        j                  j                  j                  ||       | j                  |j                  |g       | j                  d      }t        j                  j                  j                  ||       | j                  |j                  ||g       y Nonetwo)r   r   r2   r!   r^   r   r&   rw   )r)   rL   defect1r   s       r   #test_handle_defect_registers_defectz2PolicyAPITests.test_handle_defect_registers_defect   s    jjl--&**38wi0--&**38w&89r   c                   (     e Zd ZdZ fdZd Z xZS )PolicyAPITests.MyPolicyNc                 (    t        |   |dg i| y )Nrw   )superry   )r)   argskw	__class__s      r   ry   z PolicyAPITests.MyPolicy.__init__   s    Gd5B5"5r   c                 :    | j                   j                  |       y r   )rw   append)r)   r   r   s      r   r   z'PolicyAPITests.MyPolicy.register_defect   s    LL'r   )r{   r|   r}   rw   ry   r   __classcell__)r   s   @r   MyPolicyr      s    	6	(r   r   c                     | j                         }| j                  d      }| j                  | j                  d      5  | j                  d      j	                  ||       d d d        y # 1 sw Y   y xY w)Nr   T)r   )r   r   rI   r   r   r   s      r   ,test_overridden_register_defect_still_raisesz;PolicyAPITests.test_overridden_register_defect_still_raises   sY    jjl45##DMM3HIMM$M/==c6J JIIs   #A**A3c                    | j                         }| j                  d      }| j                         }|j                  ||       | j	                  |j
                  |g       | j	                  |j
                  g        | j                  d      }|j                  ||       | j	                  |j
                  ||g       | j	                  |j
                  g        y r   )r   r   r   r   r&   rw   )r)   rL   r   	my_policyr   s        r   %test_overridden_register_defect_worksz4PolicyAPITests.test_overridden_register_defect_works   s    jjl--&MMO	W-**WI6b)--&W-**Wg,>?b)r   c                    t         j                  j                  j                  dd      }| j	                  |j
                  d       | j                  |t        j                         | j                  |t        j                         y )NTesttest)
r2   r!   r^   r   r&   nameassertIsInstancer   UnstructuredHeader
BaseHeader)r)   hs     r   test_default_header_factoryz*PolicyAPITests.test_default_header_factory   s^    LL  //?(a!B!BCa!:!:;r   c                   8    e Zd Zej                  j
                  Zy)PolicyAPITests.FooN)r{   r|   r}   r   r   parserO   r   r   Foor      s    1177r   r   c                     t         j                  j                         }t         j                  j                         }|j                  j	                  d| j
                         |j                  dd      }| j                  || j
                         | j                  |t        j                         |j                  dd      }| j                  || j
                         | j                  |t        j                         y NrL   r   )
r2   r!   r3   r   map_to_typer   r   assertNotIsInstancer   r   r)   policy1policy2r   s       r   $test_each_Policy_gets_unique_factoryz3PolicyAPITests.test_each_Policy_gets_unique_factory   s    ,,**,,,**,**5$((;""5&1a*  N$E$EF""5&1  DHH-a!B!BCr   c                 d   t         j                  j                         }|j                         }|j                  j                  d| j                         |j	                  dd      }| j                  || j                         |j	                  dd      }| j                  || j                         y r   )r2   r!   r3   rP   r   r   r   r   r   s       r   test_clone_copies_factoryz(PolicyAPITests.test_clone_copies_factory   s    ,,**,--/**5$((;""5&1a*""5&1a*r   c                 <   t         j                  j                         }|j                  }|t         j                  j                  z   }| j                  |j                  |       t         j                  j                  |z   }| j                  |j                  |       y r   )r2   r!   r3   r   r   r&   )r)   mypolicy	myfactory	newpolicys       r   "test_new_factory_overrides_defaultz1PolicyAPITests.test_new_factory_overrides_default  ss    <<++-++	u||222	119=LL''(2	119=r   c                 &   t         j                  j                  t         j                  j                  z   }| j	                  |j
                  t         j                  j                  j
                         | j	                  |j                  ddi       y )Nr   T)r2   r!   r^   r   r&   r   r3   __dict__)r)   r   s     r   6test_adding_default_policies_preserves_default_factoryzEPolicyAPITests.test_adding_default_policies_preserves_default_factory	  sf    LL((5<<+>+>>	1111@@	B++.?-FGr   c                     t         j                  j                  j                  d      }|j	                  dd      }| j                  |d       y )N   r[   rf   u   ąąąąąąąąąąąązSubject: 
 =?utf-8?q?=C4=85?=
 =?utf-8?q?=C4=85?=
 =?utf-8?q?=C4=85?=
 =?utf-8?q?=C4=85?=
 =?utf-8?q?=C4=85?=
 =?utf-8?q?=C4=85?=
 =?utf-8?q?=C4=85?=
 =?utf-8?q?=C4=85?=
 =?utf-8?q?=C4=85?=
 =?utf-8?q?=C4=85?=
 =?utf-8?q?=C4=85?=
 =?utf-8?q?=C4=85?=
)r2   r!   r^   rP   r9   r&   )r)   r!   actuals      r   *test_non_ascii_chars_do_not_cause_inf_loopz9PolicyAPITests.test_non_ascii_chars_do_not_cause_inf_loop  sE    %%++B+?Y	2)	*r   c                 X   d}dD ]  }| j                  |      5  t        j                  j                  j	                  |      }| j                  t        j                  j                        5  |j                  d|       d d d        d d d         y # 1 sw Y   xY w# 1 sw Y   xY w)Nz;Melt away the pounds with this one simple trick! 1234567890)      	   )maxlenr[   rf   )	r%   r2   r!   r^   rP   r>   errorsHeaderParseErrorr9   )r)   subjectr   r!   s       r   test_short_maxlen_errorz&PolicyAPITests.test_short_maxlen_error  s     PFV,--33F3K&&u||'D'DEKK	73 F -,   FE -,s$   AB .BB BB  B)	c                 b   t         j                  j                  j                  d      }dD ]t  }| j	                  |      5  t        j
                  d|      } G d dt              }|d	=  ||      |d	<   | j                  |j                         | d
       ddd       v y# 1 sw Y   xY w)z.Turning protection off allows header injectionF)r   )zHeader: Value
Bad: Injection
zHeader: NoNewLine)textzHeader: Value

Bodyr!   c                       e Zd ZdZd Zy)CPolicyAPITests.test_verify_generated_headers.<locals>.LiteralHeaderHeaderc                     | S r   rO   )r)   kwargss     r   r9   zHPolicyAPITests.test_verify_generated_headers.<locals>.LiteralHeader.fold8  s    #r   N)r{   r|   r}   r   r9   rO   r   r   LiteralHeaderr   6  s    #D$r   r   r   z
BodyN)	r2   r!   r^   rP   r%   message_from_stringrA   r&   	as_string)r)   r!   r   rh   r   s        r   test_verify_generated_headersz,PolicyAPITests.test_verify_generated_headers*  s    %%++U+K
D 4(33/!$C $
 H%$1$$7!  %%'fFO )(	
 )(s   AB%%B.	)3r{   r|   r}   longMessagecompat32_defaultsr   r]   r   r2   r!   r3   r   r   rh   ri   
new_policycompat32r   r^   SMTPSMTPUTF8HTTPr   r#   r,   r7   rG   rM   rT   rX   rb   ro   rq   r   r   	Exceptionr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rO   r   r   r   r      s#   K %'$($*$)$($($(
 (,,.O$)$)$)LL$<$<$K$K$*$)LL$<$<$L$L$)$)MM$>$>
  ))+J}->CmOR@=*3V)<>}_9?6:.< = 	=5;=A*CD 	]?,=t+DFM/26
H" .8-F-FHZ)*?
M
'"9+: C"
G9 9 ;:(5<<++ (K
*<8 8	D+>H*4&r   r   c                       e Zd Zy)TestExceptionNr   rO   r   r   r   r   H  s    r   r   c                       e Zd Z G d dej                  j
                        Zd Zd Zd Z	d Z
d Zd Zdd
Zd Zd Zd Zd Zy	)TestPolicyPropagationc                   &    e Zd Zd ZexZxZZexZZy)TestPolicyPropagation.MyPolicyc                     t        d      )Nr   )r   )r)   r   r   s      r   	badmethodz(TestPolicyPropagation.MyPolicy.badmethodQ  s    ''r   N)	r{   r|   r}   r   r9   r:   header_fetch_parserr<   r=   rO   r   r   r   r   P  s#    	(3<<<{03<<0r   r   c                     | j                  t        d      5  t        j                  d| j                         d d d        y # 1 sw Y   y xY w)N^test$Subject: test

r   )rI   r   r2   r   r   rx   s    r   test_message_from_stringz.TestPolicyPropagation.test_message_from_stringV  s6    ##M8<%%&9-1]]< =<<   "AAc                     | j                  t        d      5  t        j                  d| j                         d d d        y # 1 sw Y   y xY w)Nr      Subject: test

r   )rI   r   r2   message_from_bytesr   rx   s    r   test_message_from_bytesz-TestPolicyPropagation.test_message_from_bytes[  s6    ##M8<$$%9,0MM; =<<r   c                     t        j                  d      }| j                  t        d      5  t	        j
                  || j                         d d d        y # 1 sw Y   y xY w)Nr   r   r   )ioStringIOrI   r   r2   message_from_filer   r)   fs     r   test_message_from_filez,TestPolicyPropagation.test_message_from_file`  sA    KK+,##M8<##Admm< =<<   "AA c                     t        j                  d      }| j                  t        d      5  t	        j
                  || j                         d d d        y # 1 sw Y   y xY w)Nr   r   r   )r   BytesIOrI   r   r2   message_from_binary_filer   r   s     r   test_message_from_binary_filez3TestPolicyPropagation.test_message_from_binary_filee  sA    JJ+,##M8<**1T]]C =<<r  c                     t         j                  j                  | j                        }| j	                  t
        d      5  |j                  d       d d d        y # 1 sw Y   y xY w)Nr   r   r   )r2   parserParserr   rI   r   parsestrr)   ps     r   test_parserz!TestPolicyPropagation.test_parserl  sF    LLt}}5##M8<JJ*+ =<<   AA%c                     t         j                  j                  | j                        }| j	                  t
        d      5  |j                  d       d d d        y # 1 sw Y   y xY w)Nr   r   r   )r2   r  BytesParserr   rI   r   
parsebytesr  s     r   test_bytes_parserz'TestPolicyPropagation.test_bytes_parserq  sF    LL$$DMM$:##M8<LL-. =<<r  Nc                     |(t         j                  j                  j                         n|| _        t        j                  || j                        S )Nr   )r2   r!   r^   rP   r   )r)   sourcer!   s      r   	_make_msgzTestPolicyPropagation._make_msgz  s9    6<nell**002&((DDr   c                 p    | j                         }| j                  |j                  | j                         y r   )r  assertIsr!   r)   rD   s     r   (test_parser_propagates_policy_to_messagez>TestPolicyPropagation.test_parser_propagates_policy_to_message~  s$    nncjj$++.r   c                     | j                  t        j                  d            }|j                         D ](  }| j	                  |j
                  | j
                         * y )Na+              Subject: mime test
            MIME-Version: 1.0
            Content-Type: multipart/mixed, boundary="XXX"

            --XXX
            Content-Type: text/plain

            test
            --XXX
            Content-Type: text/plain

            test2
            --XXX--
            )r  textwrapdedentwalkr  r!   )r)   rD   parts      r   -test_parser_propagates_policy_to_sub_messageszCTestPolicyPropagation.test_parser_propagates_policy_to_sub_messages  sH    nnX__ .   HHJDMM$++t{{3 r   c                 B   | j                  dt        j                  j                  j	                  d            }t        j                         }t        j                  j                  |      }|j                  |       | j                  |j                         d       y NzSubject: test
To: foo

X)r   r   zSubject: testXTo: fooXX)r  r2   r!   r^   rP   r   r   	generator	Generatorflattenr&   getvalue)r)   rD   rl   gs       r   +test_message_policy_propagates_to_generatorzATestPolicyPropagation.test_message_policy_propagates_to_generator  su    nn9$)LL$8$8$>$>s$>$K  MKKMOO%%a(			#'@Ar   c                     | j                  dt        j                  j                  j	                  d            }| j                  |j                         d       y r!  )r  r2   r!   r^   rP   r&   r   r  s     r   %test_message_policy_used_by_as_stringz;TestPolicyPropagation.test_message_policy_used_by_as_string  sK    nn9$)LL$8$8$>$>s$>$K  M*CDr   )r   N)r{   r|   r}   r2   r!   r@   r   r   r   r  r  r  r  r  r  r  r(  r*  rO   r   r   r   r   K  sS    
=5<<&& =<
;
=
D,
/E/4&BEr   r   c                       e Zd Zd Zy)TestConcretePoliciesc                     t         j                  j                         }| j                  t        |j
                  dd       y )NFromzspam
egg@foo.py)r2   r!   r3   r>   
ValueErrorr=   )r)   instances     r   (test_header_store_parse_rejects_newlinesz=TestConcretePolicies.test_header_store_parse_rejects_newlines  s3    <<++-*"55 "4	6r   N)r{   r|   r}   r1  rO   r   r   r,  r,    s    6r   r,  __main__)r   r4   r  unittestemail.errorsr2   email.policyemail.parseremail.generatoremail.messager   r   TestCaser   r   r   r   r,  r{   mainrO   r   r   <module>r;     s    	          
pX&& pn		I 	UEH-- UEp68,, 6 zHMMO r   