
    dafr@                         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      6/root/Python-3.12.4/Lib/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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, Z1y)-PolicyAPITestsTN   
8bitFN)max_line_lengthlinesepcte_typeraise_on_defectmangle_from_message_factory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_defaultsB   s     $ 3 3 5 	?FH'~~/ ?e\\d\; ?$$WVT%:E&./5vf~?? ??	?? ?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_coveredJ   s     $ 3 3 5 		MFHF M\\d\; M,&wu||/G/G'N"'"4"46 	M M dH&>&E&Ed&KMM MM		MM M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	TypeErrorr1   r    Policystr	exceptionr5   )r(   cmmsgabstract_methodsmethods        r   test_abczPolicyAPITests.test_abcV   sl    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_immutableb   s     $ 3 3 5 	"FH  0++ND<NO 0FD$/0 00 ''8KL "!
" "		"0 0" "s   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_clonedj   sx     &*]]%8%8%: 	9!K3;<4D$J<L<&[&&66F  9!!'&$"789	9<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(   rQ   s     r   *test_reject_non_policy_keyword_when_calledz9PolicyAPITests.test_reject_non_policy_keyword_when_calleds   st    == 	+K""9- CTBC""9- +T*+ +	+C C+ +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   r1   r    defaultrO   r   r#   r%   r&   )r(   r)   p1p2addedr!   r*   s          r   test_policy_additionz#PolicyAPITests.test_policy_additionz   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   r1   messageEmailMessager    r]   rO   r%   r8   )r(   expected_asciiexpected_utf8rC   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 )Nrc   rd   re   r   rZ   rf   )r(   r)   rC   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__rx   rN   r   r   Dummyrs      s    "r   r}   )objectr1   r    r2   register_defectr%   rv   )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   ru   rw   s    r   rx   zPolicyAPITests.MyObj.__init__   s	    DLr   Nry   rN   r   r   MyObjr      s    	r   r   c                       e Zd Zy)PolicyAPITests.MyDefectNrz   r{   r|   rN   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   rH   r1   r    stricthandle_defectr(   rK   r   s      r   #test_handle_defect_raises_on_strictz2PolicyAPITests.test_handle_defect_raises_on_strict   s`    jjl45##DMM3HI 	;LL--c6:	; 	; 	;s   +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   r1   r    r]   r   r%   rv   )r(   rK   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 )Nrv   )superrx   )r(   argskw	__class__s      r   rx   z PolicyAPITests.MyPolicy.__init__   s    Gd5B5"5r   c                 :    | j                   j                  |       y r   )rv   append)r(   r   r   s      r   r   z'PolicyAPITests.MyPolicy.register_defect   s    LL'r   )rz   r{   r|   rv   rx   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   rH   r   r   r   s      r   ,test_overridden_register_defect_still_raisesz;PolicyAPITests.test_overridden_register_defect_still_raises   se    jjl45##DMM3HI 	KMM$M/==c6J	K 	K 	Ks   #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%   rv   )r(   rK   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)
r1   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)rz   r{   r|   r   r   parserN   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 NrK   r   )
r1   r    r2   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   )r1   r    r2   rO   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   )r1   r    r2   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)r1   r    r]   r   r%   r   r2   __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   rZ   re   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?=
)r1   r    r]   rO   r8   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)      	   )maxlenrZ   re   )	r$   r1   r    r]   rO   r=   errorsHeaderParseErrorr8   )r(   subjectr   r    s       r   test_short_maxlen_errorz&PolicyAPITests.test_short_maxlen_error  s     P 	4FV, 4--33F3K&&u||'D'DE 4KK	7344 4	44 44 4s$   AB .BB BB  B)	)2rz   r{   r|   longMessagecompat32_defaultsr   r\   r   r1   r    r2   r   r   rg   rh   
new_policycompat32r   r]   SMTPSMTPUTF8HTTPr   r"   r+   r6   rF   rL   rS   rW   ra   rn   rp   r   r   	Exceptionr   r   r   r   r   r   r   r   r   r   r   r   r   r   rN   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*4r   r   c                       e Zd Zy)TestExceptionNr   rN   r   r   r   r   .  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.badmethod7  s    ''r   N)	rz   r{   r|   r   r8   r9   header_fetch_parserr;   r<   rN   r   r   r   r   6  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    )rH   r   r1   message_from_stringr   rw   s    r   test_message_from_stringz.TestPolicyPropagation.test_message_from_string<  s?    ##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   )rH   r   r1   message_from_bytesr   rw   s    r   test_message_from_bytesz-TestPolicyPropagation.test_message_from_bytesA  s?    ##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StringIOrH   r   r1   message_from_filer   r(   fs     r   test_message_from_filez,TestPolicyPropagation.test_message_from_fileF  sJ    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   BytesIOrH   r   r1   message_from_binary_filer   r   s     r   test_message_from_binary_filez3TestPolicyPropagation.test_message_from_binary_fileK  sN    JJ+,##M8< 	D**1T]]C	D 	D 	D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   )r1   parserParserr   rH   r   parsestrr(   ps     r   test_parserz!TestPolicyPropagation.test_parserR  sO    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   )r1   r   BytesParserr   rH   r   
parsebytesr   s     r   test_bytes_parserz'TestPolicyPropagation.test_bytes_parserW  sO    LL$$DMM$:##M8< 	/LL-.	/ 	/ 	/r  Nc                     |(t         j                  j                  j                         n|| _        t        j                  || j                        S )Nr   )r1   r    r]   rO   r   )r(   sourcer    s      r   	_make_msgzTestPolicyPropagation._make_msg`  s9    6<nell**002&((DDr   c                 p    | j                         }| j                  |j                  | j                         y r   )r
  assertIsr    r(   rC   s     r   (test_parser_propagates_policy_to_messagez>TestPolicyPropagation.test_parser_propagates_policy_to_messaged  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(   rC   parts      r   -test_parser_propagates_policy_to_sub_messageszCTestPolicyPropagation.test_parser_propagates_policy_to_sub_messagesh  sM    nnX__ .   HHJ 	4DMM$++t{{3	4r   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
  r1   r    r]   rO   r   r   	generator	Generatorflattenr%   getvalue)r(   rC   rk   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
  r1   r    r]   rO   r%   	as_stringr  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)rz   r{   r|   r1   r    r?   r   r   r   r   r   r  r  r
  r  r  r  r   rN   r   r   r   r   1  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)r1   r    r2   r=   
ValueErrorr<   )r(   instances     r   (test_header_store_parse_rejects_newlinesz=TestConcretePolicies.test_header_store_parse_rejects_newlines  s3    <<++-*"55 "4	6r   N)rz   r{   r|   r'  rN   r   r   r"  r"    s    6r   r"  __main__)r   r3   r  unittestemail.errorsr1   email.policyemail.parseremail.generatoremail.messager   r   TestCaser   r   r   r   r"  rz   mainrN   r   r   <module>r1     s    	          
V4X&& V4z	I 	UEH-- UEp68,, 6 zHMMO r   