
    6bh/                         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 dlmZ  G d dej                        Z
 G d dej                        Zedk(  r ej                          yy)	    N)support)	os_helperc                   *    e Zd Zd Zd Zd Zd Zd Zy)FileCompareTestCasec                    t         j                  | _        t         j                  dz   | _        t         j                  dz   | _        d}| j                  | j                  | j                  fD ]*  }t        |dd      5 }|j                  |       d d d        , t        | j                  dd      5 }|j                  d       d d d        t        j                         | _	        y # 1 sw Y   xY w# 1 sw Y   /xY w)	Nz-samez-diffContents of file go here.
wutf-8encodingza+zAn extra line.
)
r   TESTFNname	name_same	name_diffopenwritetempfile
gettempdirdir)selfdatar   outputs       ;/opt/python-3.12.12/usr/lib/python3.12/test/test_filecmp.pysetUpzFileCompareTestCase.setUp   s    $$	"))G3"))G3,YY?DdC'2fT" 32 @ $..$9VLL+, :&&( 32 :9s   <C$0C0$C-	0C9c                     t        j                  | j                         t        j                  | j                         t        j                  | j                         y N)osunlinkr   r   r   r   s    r   tearDownzFileCompareTestCase.tearDown   s2    
		$))
		$..!
		$..!    c                    | j                  t        j                  | j                  | j                        d       | j                  t        j                  | j                  | j                  d      d       | j                  t        j                  | j                  | j                        d       | j                  t        j                  | j                  | j                  d      d       y )NzComparing file to itself failsFshallowz&Comparing file to identical file fails)
assertTruefilecmpcmpr   r   r   s    r   test_matchingz!FileCompareTestCase.test_matching   s    DIItyy98	:DIItyy%H8	:DIIt~~>@	BDIIt~~uM@	Br!   c                     | j                  t        j                  | j                  | j                        d       | j                  t        j                  | j                  | j
                        d       y )Nz!Mismatched files compare as equalz#File and directory compare as equal)assertFalser&   r'   r   r   r   r   s    r   test_differentz"FileCompareTestCase.test_different(   sN    TYY?7	9TYY99	;r!   c                 4   t        j                  | j                  | j                  d      }t        j                  | j                  | j                  d      }t        j
                          | j                  t        t         j                        dk(  d       y )NFr#   r   z+Cache not cleared after calling clear_cache)	r&   r'   r   r   r   clear_cacher%   len_cache)r   first_comparesecond_compares      r   test_cache_clearz$FileCompareTestCase.test_cache_clear.   sb    DIIt~~uM TYYNGNN+q0E	Gr!   N)__name__
__module____qualname__r   r    r(   r+   r2    r!   r   r   r      s    )"
B;Gr!   r   c                   T    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zy)DirCompareTestCasec                    t        j                         }t        j                  j	                  |d      | _        t        j                  j	                  |d      | _        t        j                  j	                  |d      | _        t        j                  j	                  | j                  d      | _        t        j                  j                  d      t        j                  j                  d      k(  | _
        d}| j
                  | j                  | j                  | j                  fD ]  }t        j                  |d       t        j                  |       t        j                  j	                  |d	      }t        j                  |       | j                  r|| j                  u rd
}nd}t        t        j                  j	                  ||      dd      5 }|j                  |       d d d         t        t        j                  j	                  | j                  d      dd      5 }|j                  d       d d d        y # 1 sw Y   %xY w# 1 sw Y   y xY w)Nr   zdir-samezdir-diff.hgAar   TsubdirFiLefiler	   r
   r   file2zAn extra file.
)r   r   r   pathjoinr   dir_samedir_diffdir_ignorednormcasecaseinsensitiveshutilrmtreemkdirr   r   )r   tmpdirr   r   subdir_pathfnr   s          r   r   zDirCompareTestCase.setUp6   s   $$&77<<.VZ8VZ8 77<<u=!ww//48H8H8MM,HHdmmT]]D<L<LMCMM#t$HHSM'',,sH5KHH[!##t}}(<bggll3+S7CvT" DC N "'',,t}}g6gNRXLL+, ON DC ONs   I'II	Ic                 ~    | j                   | j                  | j                  fD ]  }t        j                  |        y r   )r   rC   rD   rH   rI   )r   r   s     r   r    zDirCompareTestCase.tearDownQ   s+    HHdmmT]];CMM# <r!   c                 D    | j                  dt        j                         y )Nr:   )assertInr&   DEFAULT_IGNORESr   s    r   test_default_ignoresz'DirCompareTestCase.test_default_ignoresU   s    eW445r!   c                 X   | j                  t        j                  | j                  | j                  dg      dgg g fk(  d       | j                  t        j                  | j                  | j                  dg      dgg g fk(  d       | j                  t        j                  | j                  | j                  dgd      dgg g fk(  d       | j                  t        j                  | j                  | j                  dgd      d       t        t        j                  j                  | j                  d      dd	      5 }|j                  d
       d d d        | j                  t        j                  | j                  | j                  ddg      dgdgg fk(  d       y # 1 sw Y   OxY w)Nr?   z#Comparing directory to itself failsz!Comparing directory to same failsFr#   r@   r	   r
   r   Different contents.
z&Comparing mismatched directories fails)r%   r&   cmpfilesr   rC   r   r   rA   rB   r   r*   )r   r   s     r   test_cmpfilesz DirCompareTestCase.test_cmpfilesX   sx   ((488fXF 2r*+=	? 	((4==6(K 2r*+;	=
 	((488fX168 2r*+ >	? 	((4==6(168;	=
 "'',,txx13IVLL01 J 	))$((DMM&,g%68Xy"-. =	> JIs    F  F)c           	      R   dt         dz   dfdddz  dffD ]  \  }}| j                  | j                  | j                  fD ]Y  }| j	                  d| |	      5  t        j                  | j                  ||g      }| j                  |g g |gf       d d d        [  y # 1 sw Y   hxY w)
N) zNUL bytes filenamerX   z filename with embedded NUL bytes)u	   .py'surrogate codes (MUSICAL SYMBOL G CLEF)r<   @B zvery long filenamez
cmpfiles: )	other_dir)__file__r   rC   rD   subTestr&   rU   assertTupleEqual)r   r?   descr[   ress        r   test_cmpfiles_invalid_namesz.DirCompareTestCase.test_cmpfiles_invalid_namesr   s     + BCJ9_23	
JD$ #hht}}E	\\Jtf"5\K!**488YGC))#B/?@ LK F
 LKs   9BB&c           	      |   ddt         j                   ddfdddz  dffD ]  \  }}t        j                  | j                  |      }t        j                  || j                        }d	D ]  }| j                  d
| |      5  | j                  t        t        f      5  t        ||       d d d        d d d        | j                  d| |      5  | j                  t        t        f      5  t        ||       d d d        d d d          y # 1 sw Y   exY w# 1 sw Y   ixY w# 1 sw Y   .xY w# 1 sw Y   xY w)N)rX   zNUL bytes dirnameTopzMid zdirname with embedded NUL bytes)u   rY   r<   rZ   zvery long dirname)	left_list
right_list	left_only
right_onlycommonzdircmp(ok, bad): )targetzdircmp(bad, ok): )
r   sepr&   dircmpr   r]   assertRaisesOSError
ValueErrorgetattr)r   bad_dirr_   d1d2ri   s         r   test_dircmp_invalid_namesz,DirCompareTestCase.test_dircmp_invalid_names   s"   )266('"$EFG9_12	
MGT '2B2B
 \\$5dV"<V\L**GZ+@AF+ B M \\$5dV"<V\L**GZ+@AF+ B ML
 BA ML BA MLsH   DD	*DD2,D&	9D2DDD#&D/+D22D;c                 N    	 | j                  t        |      t        |             y r   )assertEqualsorted)r   actualexpecteds      r   _assert_listsz DirCompareTestCase._assert_lists   s    >)9:r!   c                    | j                   | j                  }}t        j                  ||      }| j	                  |j
                  |       | j	                  |j                  |       | j                  r=| j                  |j                  ddg       | j                  |j                  ddg       n<| j                  |j                  ddg       | j                  |j                  ddg       | j                  |j                  ddg       | j                  |j                  dg       | j	                  |j                  g        | j	                  |j                  g        | j	                  |j                  dg       | j	                  |j                   g        dj#                  | j                   | j                        ddg}| j%                  |j&                  |       | j                   | j(                  }}t        j                  ||      }| j	                  |j
                  |       | j	                  |j                  |       | j                  |j                  ddg       | j                  |j                  g d       | j                  |j                  ddg       | j                  |j                  dg       | j	                  |j                  g        | j	                  |j                  dg       | j	                  |j                  dg       | j	                  |j                   g        dj#                  | j                   | j(                        d	j#                  | j(                        ddg}| j%                  |j&                  |       | j                   | j(                  }}t+        j,                  t.        j0                  j3                  | j(                  d      t.        j0                  j3                  | j                   d             t        j                  ||      }| j	                  |j
                  |       | j	                  |j                  |       | j                  |j                  g d       | j                  |j                  ddg       | j                  |j                  ddg       | j	                  |j                  dg       | j	                  |j                  g        | j	                  |j                  dg       | j	                  |j                   g        dj#                  | j                   | j(                        d	j#                  | j                         ddg}| j%                  |j&                  |       t5        t.        j0                  j3                  | j(                  d      d
d      5 }|j7                  d       d d d        t        j                  | j                   | j(                        }| j	                  |j                  dg       | j	                  |j                   dg       dj#                  | j                   | j(                        dddg}| j%                  |j&                  |       y # 1 sw Y   xY w)Nr?   r=   r>   
diff {} {}Identical files : ['file']"Common subdirectories : ['subdir'])r?   r@   r=   r@   zOnly in {} : ['file2']r	   r
   r   rT   zDiffering files : ['file2'])r   rC   r&   rk   ru   leftrightrG   ry   rd   re   rh   common_dirsrf   rg   
same_files
diff_filesformat_assert_reportreportrD   rH   mover   rA   rB   r   r   )r   left_dir	right_dirdexpected_reportr   s         r   test_dircmpzDirCompareTestCase.test_dircmp   s   "hh)NN8Y/*),q{{VX,>?q||fh-?@q{{VX,>?q||fh-?@188fh%781==8*5b)r*x0r*$--8(0

 	AHHo6 #hh)NN8Y/*),1;;(:;1<<)DE188fh%781==8*5b)y1x0r*$--8$++DMM:(0	
 	AHHo6 #hh)GGLL0GGLL7+	
 NN8Y/*),1;;(CD1<<&();<188fh%78wi0r*x0r*$--8$++DHH5(0	
 	AHHo6 "'',,t}}g6gNRXLL01 ONN488T]]3x0y1$--8()0	
 	AHHo6 ONs   8Y==Zc                    	  G d dt         j                        } || j                  | j                        }|j                  }| j                  t        |j                               dg       |d   }| j                  t        |      |       y )Nc                       e Zd Zy)=DirCompareTestCase.test_dircmp_subdirs_type.<locals>.MyDirCmpN)r3   r4   r5   r6   r!   r   MyDirCmpr      s    r!   r   r=   )	r&   rk   r   rD   subdirsru   listkeystype)r   r   r   sub_dirssub_dcmps        r   test_dircmp_subdirs_typez+DirCompareTestCase.test_dircmp_subdirs_type   sm    =	w~~ 	TXXt}}-99hmmo.
;H%h2r!   c                    | j                   | j                  }}t        j                  ||      }t        j
                  j                  |d      }t        j
                  j                  |d      }dj                  | j                   | j                        ddddj                  ||      g}| j                  |j                  |       y Nr=   r{   r|   r}    )
r   rC   r&   rk   r   rA   rB   r   r   report_partial_closurer   r   r   r   left_subdirright_subdirr   s          r   test_report_partial_closurez.DirCompareTestCase.test_report_partial_closure   s    "hh)NN8Y/ggll8X6ww||Ix8$--8(0\:
 	A44oFr!   c                    | j                   | j                  }}t        j                  ||      }t        j
                  j                  |d      }t        j
                  j                  |d      }dj                  | j                   | j                        ddddj                  ||      g}| j                  |j                  |       y r   )
r   rC   r&   rk   r   rA   rB   r   r   report_full_closurer   s          r   test_report_full_closurez+DirCompareTestCase.test_report_full_closure  s    "hh)NN8Y/ggll8X6ww||Ix8$--8(0\:
 	A11?Cr!   c                     t        j                         5 } |        |j                         j                         j	                  d      }| j                  ||       d d d        y # 1 sw Y   y xY w)N
)r   captured_stdoutgetvaluestripsplitru   )r   dircmp_reportexpected_report_linesstdoutreport_liness        r   r   z!DirCompareTestCase._assert_report  sR    $$&&O!??,224::4@L\+@A '&&s   AA%%A.N)r3   r4   r5   r   r    rR   rV   ra   rs   ry   r   r   r   r   r   r6   r!   r   r8   r8   5   sD    -66>4A,*;
R7h3GDBr!   r8   __main__)r&   r   rH   r   unittesttestr   test.supportr   TestCaser   r8   r3   mainr6   r!   r   <module>r      s`     	     "(G(++ (GTbB** bBJ zHMMO r!   