
    )+Civ"                     h   S SK r S SKrS SKJr   S SKJr  S SKr	S SK
Jr   S SKr S SKrS SKJr  S SKJrJrJrJrJrJr  S SKJr  \" \5      R4                  r " S S	\R8                  5      r\S
:X  a  \R>                  " 5         gg! \ a	    S SKJr   N~f = f! \ a    Sr N}f = f! \ a    Sr Nf = f)    N)Path)patch)Image)wrapper)decodeDecodedRect
ZBarSymbolEXTERNAL_DEPENDENCIESORIENTATION_AVAILABLE)PyZbarErrorc                      \ rS rSr\" SS\" SSSSS9/ S	Q\(       a  S
OSSS9\" SS\" SSSSS9/ SQ\(       a  S
OSSS9/r\" SS\" SSSSS9/ SQ\(       a  S
OSSS9/r\" SS\" SSSSS9/ SQ\(       a  S
OSSS9/r	\" SS\" SSSSS9/ S Q\(       a  S
OSSS9\" SS\" S!S"S#S#S9/ S$Q\(       a  S%OSSS9/r
\S& 5       r\S' 5       rS( rS) rS* rS+ rS, rS- rS. rS/ rS0 rS1 r\R2                  " \SL S25      S3 5       r\R2                  " \SL S45      S5 5       r\" S6S7S89S9 5       rS: r \" S;S7S89S< 5       r!\" S=S7S89S> 5       r"\" S?S7S89S@ 5       r#SA r$SB r%SCr&g)D
TestDecode$   s   ForameniferaCODE128%   &  iD  L   )lefttopwidthheight))r   i'  )r   iq  )i  ir  )r   r   UPNM   )datatyperectpolygonorientationqualitys   Rana temporaria   r   i  )r"      r"   K   )  r   r'   r   s   Hello Goodbyer&   )r#   r%   )r'   J   r(   s   ThalassiodraconQRCODE      ))r+   r+   )r+      )r-   r-   )r-   r+   r$   )r   r   r   r    r!      
      ))r.   q   )     )iz  r1   )r2   r/             ))r4   i`  )   in  )      ).   r5   RIGHTc                     S S 5       u  U l         U l        U l        U l        U l        S U l        [        U S5      (       d  U R                  U l        g g )Nc              3      #    U  H7  n[         R                  " [        [        R	                  U5      5      5      v   M9     g 7fN)r   openstrTESTDATAjoinpath).0fnames     R/home/james-whalen/.local/lib/python3.13/site-packages/pyzbar/tests/test_pyzbar.py	<genexpr>(TestDecode.setUpClass.<locals>.<genexpr>d   s:      ^
 k  JJs8,,U3455js   ?A)code128.pngzcode128_null_character.pngz
qrcode.pngzqrcode_rotated.pngz	empty.pngassertRaisesRegex)	code128code128_null_characterqrcodeqrcode_rotatedemptymaxDiffhasattrassertRaisesRegexprI   clss    rE   
setUpClassTestDecode.setUpClassb   s[    ^
 k^
ZS/S=OQTQZ  s/00$'$:$:C! 1    c                 J    S =U l         =U l        =U l        =U l        U l        g r>   )rJ   rK   rL   rM   rN   rR   s    rE   tearDownClassTestDecode.tearDownClassp   s)    aeeec0e3:e@RUXU^rV   c                 f    [        U R                  5      nU R                  U R                  U5        g)z#Read both barcodes in `code128.png`N)r   rJ   assertEqualEXPECTED_CODE128selfress     rE   test_decode_code128TestDecode.test_decode_code128t   s&    T\\"..4rV   c                 f    [        U R                  5      nU R                  U R                  U5        g)zHRead barcode in `code128_null_character.png` containing a null characterN)r   rK   r[   EXPECTED_CODE128_NULL_CHARACTERr]   s     rE   "test_decode_code128_null_character-TestDecode.test_decode_code128_null_charactery   s(    T001==sCrV   c                 f    [        U R                  5      nU R                  U R                  U5        g)zRead barcode in `qrcode.png`N)r   rL   r[   EXPECTED_QRCODEr]   s     rE   test_decode_qrcodeTestDecode.test_decode_qrcode~   s&    T[[!--s3rV   c                 f    [        U R                  5      nU R                  U R                  U5        g)z$Read barcode in `qrcode_rotated.png`N)r   rM   r[   EXPECTED_QRCODE_ROTATEDr]   s     rE   test_decode_qrcode_rotated%TestDecode.test_decode_qrcode_rotated   s*     T(()55s;rV   c                     [        U R                  [        R                  /S9nU R	                  U R
                  U5        g)z!Read only qrcodes in `qrcode.png`symbolsN)r   rL   r
   r*   r[   rg   r]   s     rE   test_symbolsTestDecode.test_symbols   s1    T[[:+<+<*=>--s3rV   c                 n    [        U R                  [        R                  /S9nU R	                  / U5        g)z!Read only code128 in `qrcode.png`ro   N)r   rL   r
   r   r[   r]   s     rE   test_symbols_not_present#TestDecode.test_symbols_not_present   s+    T[[:+=+=*>?S!rV   c                     U R                   R                  5       R                  S5      R                  5       nU R                   R                  u  p#[        XU45      nU R                  U R                  U5        g)zRead barcodes in pixelsLN)rJ   copyconverttobytessizer   r[   r\   )r^   pixelsr   r   r_   s        rE   test_decode_tupleTestDecode.test_decode_tuple   s^    ""$,,S199;))fV,-..4rV   c                     U R                   R                  5       nU R                   R                  u  p#U R                  [        [
        XU45        g r>   )rJ   rz   r{   assertRaisesr   r   )r^   r|   r   r   s       rE   test_unsupported_bppTestDecode.test_unsupported_bpp   s<    %%'))+vv/FGrV   c                 R    [        U R                  5      nU R                  / U5        g)zCDo not show any output for an image that does not contain a barcodeN)r   rN   r[   r]   s     rE   
test_emptyTestDecode.test_empty   s     TZZ S!rV   c                     [        [        R                  " U R                  5      5      nU R	                  U R
                  U5        g)z4Read image using Pillow and convert to numpy.ndarrayN)r   npasarrayrJ   r[   r\   r]   s     rE   test_decode_numpyTestDecode.test_decode_numpy   s/    RZZ-...4rV   zimageio not installedc                     [        [        R                  " [        R	                  S5      5      5      nU R                  U R                  U5        g)zRead image using imageiorH   N)r   imageioimreadrA   rB   r[   r\   r]   s     rE   test_decode_imageioTestDecode.test_decode_imageio   s8     W^^H$5$5m$DEF..4rV   zOpenCV not installedc           	          [        [        R                  " [        [        R                  S5      5      5      5      nU R                  U R                  U5        g)zRead image using OpenCVrH   N)r   cv2r   r@   rA   rB   r[   r\   r]   s     rE   test_decode_opencvTestDecode.test_decode_opencv   s=     SZZH$5$5m$D EFG..4rV   z%pyzbar.pyzbar.zbar_image_first_symbolT)autospecc                     S nX!l         [        [        R                  " U R                  5      5      nU R
                  S   R                  SS9/U R
                  SS -   nU R                  XC5        g)z.The type of the first symbol is not recognisedc                 b    [         R                  " U 5      nU(       a  SUR                  l        U$ )N)r   zbar_image_first_symbolcontentsr   )imagesymbols     rE   'zbar_image_first_symbol_set_symbol_typeYTestDecode.test_unrecognised_symbol_type.<locals>.zbar_image_first_symbol_set_symbol_type   s&    44U;F')$MrV   r   zUnrecognised type [-1])r   r$   N)side_effectr   r   r   rJ   r\   _replacer[   )r^   r   r   r_   expecteds        rE   test_unrecognised_symbol_type(TestDecode.test_unrecognised_symbol_type   sr    	 /V+RZZ-. !!!$--3K-L
!!!"%& 	'rV   c                    S[         R                  " 5       :X  aD  U R                  S[        [        5      5        U R                  [        S [         5       5      5        U R                  [        S [         5       5      5        g)zExternal dependenciesWindows   c              3   @   #    U  H  nS UR                   ;   v   M     g7f)libiconvN_namerC   ds     rE   rF   8TestDecode.test_external_dependencies.<locals>.<genexpr>   s     I3HaJ!'')3H   c              3   @   #    U  H  nS UR                   ;   v   M     g7f)libzbarNr   r   s     rE   rF   r      s     D.C	QWW$.Cr   N)platformsystemr[   lenr   
assertTrueany)r^   s    rE   test_external_dependencies%TestDecode.test_external_dependencies   s_    ))Q$9 :;OOI3HII 	D.CDD	
rV   zpyzbar.pyzbar.zbar_image_createc                 ~    S Ul         U R                  [        S[        U R                  5        UR                  5         g )NzCould not create zbar imagereturn_valuerI   r   r   rJ   assert_called_once_with)r^   zbar_image_creates     rE   test_zbar_image_create_fail&TestDecode.test_zbar_image_create_fail   s5    )-&6	
 	113rV   z'pyzbar.pyzbar.zbar_image_scanner_createc                 ~    S Ul         U R                  [        S[        U R                  5        UR                  5         g )NzCould not create image scannerr   )r^   zbar_image_scanner_creates     rE   #test_zbar_image_scanner_create_fail.TestDecode.test_zbar_image_scanner_create_fail   s5    15!.964<<	
 	"99;rV   zpyzbar.pyzbar.zbar_scan_imagec                     SUl         U R                  [        S[        U R                  5        U R                  SUR                  5        g )Nr   zUnsupported image formatr$   )r   rI   r   r   rJ   r[   
call_count)r^   zbar_scan_images     rE   test_zbar_scan_image_fail$TestDecode.test_zbar_scan_image_fail   s>    ')$3VT\\	
 	O667rV   c                     [        [        S5      5      SS4nU R                  [        S[        U5        U R                  [        [        U5        g )N      z;Unsupported bits-per-pixel \[16\]. Only \[8\] is supported.)listrangerI   r   r   r   r^   r   s     rE   test_unsupported_bits_per_pixel*TestDecode.test_unsupported_bits_per_pixel   sE    U9%&1-JD	

 	+vt4rV   c                 j    [        [        S5      5      SS4nU R                  [        S[        U5        g )Nr/   r   zZInconsistent dimensions: image data of 10 bytes is not divisible by \(width x height = 9\))r   r   rI   r   r   r   s     rE   test_inconsistent_dimensions'TestDecode.test_inconsistent_dimensions   s3    U2YA&7 D	
rV    )'__name__
__module____qualname____firstlineno__r   r	   r   r\   rc   rg   rk   classmethodrT   rX   r`   rd   rh   rl   rq   rt   r}   r   r   r   unittestskipIfr   r   r   r   r   r   r   r   r   r   r   r   __static_attributes__r   rV   rE   r   r   $   sH    23c"=B 54	
 	#1!3r:: 54	
( 	"1!3r:: 54	
	'# 	22S=@ 54	
	O 	#3Bc#>C 54	
 	#23c#>B#8d	
& ; ; f f5
D
4
<4
"
5H
"
5
 __W_&=>5 ?5
 __SD["895 :5
 2TB( C("	
 ,t<4 =4 4tD< E< *T:8 ;85

rV   r   __main__) r   r   pathlibr   unittest.mockr   ImportErrormocknumpyr   PILr   r   r   pyzbarr   pyzbar.pyzbarr   r   r	   r
   r   r   pyzbar.pyzbar_errorr   __file__parentrA   TestCaser   r   mainr   rV   rE   <module>r      s      #
     , >  Z
"" Z
z zMMO s    
C
  Gs3   B B B& BBB#"B#&B10B1