
    &hX                       S SK r S SKrS SKrS SKrS SKrS SKJr  S SKJr  S SKJr  S SK	J
r
  S SKJr  \R                  " S5      =rr\R                  " S5      =rrS	rS
 rS rS rS rSDS jrS r " S S5      r " S S\R4                  5      r " S S\R4                  5      r " S S5      r " S S\\5      r " S S5      r " S S\5      r  " S S\ \5      r! " S  S!\5      r" " S" S#\"\5      r# " S$ S%\5      r$ " S& S'\$\5      r% " S( S)\5      r& " S* S+\&\5      r'S S /S,S /S,S,/S S,/4r(/ S-Qr)S.S /S/S /S/S./S0S./S0S//S/S//S/S0/S.S0/S.S//S S//S S./S.S./4r* " S1 S25      r+ " S3 S4\+\5      r, " S5 S65      r- " S7 S8\-\5      r. " S9 S:5      r/ " S; S<\/\5      r0 " S= S>5      r1 " S? S@\1\5      r2 " SA SB\R4                  5      r3\4SC:X  a  \Rj                  " 5         gg)E    N)draw)draw_py)SRCALPHA)
test_utils)Vector2redgreen	topleftmidtoptoprightmidrightbottomright	midbottom
bottomleftmidleftcenterc                    [        U5       Vs/ s H  o0R                  US45      PM     nn[        U5       Vs/ s H  oPR                  SU45      PM     nn[        U5       Vs/ s H  oPR                  US-
  U45      PM     nn[        U5       Vs/ s H  o0R                  X2S-
  45      PM     nnXFXx/$ s  snf s  snf s  snf s  snf )zJReturns a list containing lists with the values of the surface's
borders.
r      )rangeget_at)	surfacewidthheightx
border_topyborder_leftborder_rightborder_bottoms	            N/var/www/auris/envauris/lib/python3.13/site-packages/pygame/tests/draw_test.pyget_border_valuesr"      s     38,?,Q..!Q(,J?38=A=a>>1a&)=KA<A&MJMqNNEAIq>2MLJ>CElKl^^Q
O4lMK\AA @AJKs   B6B;$C Cc                 V    U R                  5       u  pSUS-
  S4US-
  US-
  4SUS-
  44$ )zeReturns a tuple with the corner positions of the given surface.

Clockwise from the top left corner.
r   r   r   r   )get_size)r   r   r   s      r!   cornersr&   +   s@    
 $$&MEUQYNUQY
$;a!_MM    c           	          U R                   U R                  U R                  U R                  U R                  U R
                  U R                  U R                  U R                  4	$ )zReturns a tuple with each corner, mid, and the center for a given rect.

Clockwise from the top left corner and ending with the center point.
r
   )rects    r!   rect_corners_mids_and_centerr*   4   sO     	
 
r'   c              #     #    U R                  5       u  pUS-
  US-
  pC[        U5       H  nUS4nX`R                  U5      4v   M     [        SU5       H  nX74nX`R                  U5      4v   M     [        US-
  SS5       H  nXT4nX`R                  U5      4v   M     [        US-
  SS5       H  nSU4nX`R                  U5      4v   M     g7f)zdYields each border position and its color for a given surface.

Clockwise from the top left corner.
r   r   N)r%   r   r   )r   r   r   rightbottomr   posr   s           r!   border_pos_and_colorr0   F   s     
 $$&MEAIvz6 5\!f>>#&&&  1fj>>#&&&  519b"%k>>#&&& & 6A:q"%!f>>#&&& &s   CCc           	      "   U R                   nUc3  [        U R                  5       5      n[        U R                  5       5      nO@[        UR                  UR
                  5      n[        UR                  UR                  5      nU R                  5         U(       a-  U VVs/ s H  ov  H  o" Xx45      U:X  d  M  Xx4PM     M     n	nnO,U VVs/ s H  ov  H  o" Xx45      U:w  d  M  Xx4PM     M     n	nnU R                  5         U	$ s  snnf s  snnf )a  Get all the points of a given color on the surface within the given
bounds.

If bounds_rect is None the full surface is checked.
If match_color is True, all points matching the color are returned,
    otherwise all points not matching the color are returned.
)
r   r   	get_width
get_heightleftr-   topr.   lockunlock)
r   colorbounds_rectmatch_colorr   x_rangey_ranger   r   ptss
             r!   get_color_pointsr>   f   s     ^^F))+,**,-((+*;*;<););<LLN&Sw!161&>U;RvvvwS&Sw!161&>U;RvvvwSNNJ TSs   D8DD%Dc                    U R                  5       R                  u  p4X4peSu  pxU R                  n	U R                  5         [	        U5       HP  n
[	        U5       H>  nU	" X45      U:w  d  M  [        X5      n[        X5      n[        X5      n[        X5      nM@     MR     U R                  5         SU:X  a  [        R                  " US5      $ [        R                  " XV4Xu-
  S-   X-
  S-   45      $ )zCreate a rect to bound all the pixels that don't match surf_color.

The default_pos parameter is used to position the bounding rect for the
case where all pixels match the surf_color.
r,   r,   r,   r$   r   )
get_clipsizer   r6   r   minmaxr7   pygameRect)r   
surf_colordefault_posr   r   xminyminxmaxymaxr   r   r   s               r!   create_bounding_rectrM      s     $$&++ME$JD^^FLLN6]uAqf~+1|1|1|1|   NN	Tz{{;//;;|dkAot{Q%GHHr'   c                       \ rS rSrSrSrSrg)InvalidBool   z!To help test invalid bool values.N )__name__
__module____qualname____firstlineno____doc____bool____static_attributes__rQ   r'   r!   rO   rO      s
    +Hr'   rO   c                   \   \ rS rSrSr\" \R                  5      r\" \R                  5      r
\" \R                  5      r\" \R                  5      r\" \R                  5      r\" \R"                  5      r\" \R&                  5      r\" \R*                  5      r\" \R.                  5      rSrg)DrawTestCase   z)Base class to test draw module functions.rQ   N)rR   rS   rT   rU   rV   staticmethodr   r)   	draw_rectpolygondraw_polygoncircledraw_circleellipsedraw_ellipsearcdraw_arcline	draw_linelines
draw_linesaalinedraw_aalineaalinesdraw_aalinesrX   rQ   r'   r!   rZ   rZ      s    3TYY'I-Lt{{+K-LDHH%HTYY'Idjj)Jt{{+K-Lr'   rZ   c                       \ rS rSrSr\" \R                  5      r\" \R                  5      r\" \R                  5      r	\" \R                  5      r
\" \R                  5      rSrg)PythonDrawTestCase   z,Base class to test draw_py module functions.rQ   N)rR   rS   rT   rU   rV   r\   r   r_   rg   ri   rk   rm   rX   rQ   r'   r!   ro   ro      sY    6   4 45L W../Ig001Jw223K 4 45Lr'   ro   c                       \ rS rSrSrS rS rS rS rS r	S r
S	 rS
 rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS r S r!S r"g!)"DrawEllipseMixin   z^Mixin tests for drawing ellipses.

This class contains all the general ellipse drawing tests.
c                     U R                  [        R                  " S5      S[        R                  " SS5      S5      nU R	                  U[        R                  5        g)z.Ensures draw ellipse accepts the correct args.   rv   r   
   r   2   r$   rv      r   Nrc   rE   SurfacerF   assertIsInstanceselfr9   s     r!   test_ellipse__args#DrawEllipseMixin.test_ellipse__args   sF    ''NN6"NFKK4OQR
 	k6;;7r'   c                     U R                  [        R                  " S5      S[        R                  " SS5      5      nU R	                  U[        R                  5        g)z6Ensures draw ellipse accepts the args without a width.r{   r{   r   r   r   c   r   r   Nr|   r   s     r!    test_ellipse__args_without_width1DrawEllipseMixin.test_ellipse__args_without_width   sC    ''NN6"M6;;vv3N
 	k6;;7r'   c           	         U R                  [        R                  " S5      S[        R                  " SS5      S5      nU R	                  U[        R                  5        U R                  U[        R                  " SSSS5      5        g	)
z:Ensures draw ellipse accepts the args with negative width.ru   rw   r{   rv   rz   r,   r{   rv   r   N)rc   rE   r}   rF   r~   assertEqualr   s     r!   &test_ellipse__args_with_negative_width7DrawEllipseMixin.test_ellipse__args_with_negative_width   se    ''NN6"NFKK4OQS
 	k6;;7fkk!Q1&=>r'   c                    [         R                  " SS5      nU R                  [         R                  " S5      SXR                  S-  S-   5      nU R                  U[         R                  5        U R                  [         R                  " S5      SXR                  S-  S-   5      nU R                  U[         R                  5        g)zXEnsures draw ellipse accepts the args with
width > rect.w // 2 and width > rect.h // 2.
r$      r   ru   rw   r{   r   N)rE   rF   rc   r}   wr~   hr   r)   r9   s      r!   'test_ellipse__args_with_width_gt_radius8DrawEllipseMixin.test_ellipse__args_with_width_gt_radius   s     {{66*''NN6"ND&&A+/
 	k6;;7''NN6"ND&&A+/
 	k6;;7r'   c                 6   [         R                  " S5      [         R                  " S5      [         R                  " SS5      SS.[         R                  " S5      SS	S
./nU H5  nU R                  " S0 UD6nU R                  U[         R                  5        M7     g)zNEnsures draw ellipse accepts the correct kwargs
with and without a width arg.
r   yellowr$   rz   r   r   r8   r)   r   r{   r   r   rx      r   r   r   r   r   r8   r)   NrQ   )rE   r}   ColorrF   rc   r~   r   kwargs_listkwargsr9   s       r!   test_ellipse__kwargs%DrawEllipseMixin.test_ellipse__kwargs   s     ">>&1h/FF3	 ">>&1$$
 "F++5f5K!!+v{{; "r'   c           	          U R                  S[        R                  " S5      S[        R                  " SS5      S9nU R	                  U[        R                  5        g)z6Ensures draw ellipse's kwargs are not order dependent.r   r{   rv   rz   r   r   r   r   )r8   r   r   r)   Nr|   r   s     r!   &test_ellipse__kwargs_order_independent7DrawEllipseMixin.test_ellipse__kwargs_order_independent  sM    ''NN6*VV,	 ( 
 	k6;;7r'   c                    [         R                  " S5      nU R                  [        5         U R	                  U[         R
                  " S5      5      nSSS5        U R                  [        5         U R	                  U5      nSSS5        U R                  [        5         U R	                  5       nSSS5        g! , (       d  f       Nl= f! , (       d  f       NN= f! , (       d  f       g= f)z7Ensures draw ellipse detects any missing required args.r   r   N)rE   r}   assertRaises	TypeErrorrc   r   r   r   r9   s      r!   test_ellipse__args_missing+DrawEllipseMixin.test_ellipse__args_missing  s    ..(y)++GV\\%5HIK * y)++G4K * y)++-K *) *) *) *)#   'B90C
C9
C

C
C)c                 Z   [         R                  " S5      [         R                  " S5      [         R                  " SS5      SS.nS HO  n[	        U5      nUR                  U5        U R                  [        5         U R                  " S	0 UD6nSSS5        MQ     g! , (       d  f       Mc  = f)
z9Ensures draw ellipse detects any missing required kwargs.r   r{   r   r   r   r{   r   r)   r8   r   NrQ   )	rE   r}   r   rF   dictpopr   r   rc   r   r   nameinvalid_kwargsr9   s        r!   test_ellipse__kwargs_missing-DrawEllipseMixin.test_ellipse__kwargs_missing$  s     ~~f-\\%(KK/	
 1D!&\Nt$""9-"//A.A .-	 1 .-s   ;B
B*	c                    [         R                  " S5      n[         R                  " S5      n[         R                  " SS5      nU R	                  [
        5         U R                  XUS5      nSSS5        U R	                  [
        5         U R                  XSS5      nSSS5        U R	                  [
        5         U R                  USUS	5      nSSS5        U R	                  [
        5         U R                  X2US
5      nSSS5        g! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       Nb= f! , (       d  f       g= f)z/Ensures draw ellipse detects invalid arg types.r   bluer   1Nr   r{   rv   r      r   ffffff@r   r{   rE   r}   r   rF   r   r   rc   r   r   r8   r)   r9   s        r!   test_ellipse__arg_invalid_types0DrawEllipseMixin.test_ellipse__arg_invalid_types4  s    ..(V${{66*y)++GD#FK * y)++GOQOK * y)++GS$BK * y)++DqAK *) *) *) *) *)s0   D

D;D,-D=

D
D),
D:=
Ec                 n   [         R                  " S5      n[         R                  " S5      n[         R                  " SS5      n[         R                  UUSS.USUSS.UUSSS.XUS	S./nU H3  nU R	                  [
        5         U R                  " S0 UD6nS
S
S
5        M5     g
! , (       d  f       MG  = f)z1Ensures draw ellipse detects invalid kwarg types.ru   r	   r   r   r   r   r   r   r   r   r   皙?NrQ   r   r   r   r8   r)   r   r   r9   s          r!   !test_ellipse__kwarg_invalid_types2DrawEllipseMixin.test_ellipse__kwarg_invalid_typesJ  s    ..(W%{{66* ">>	 #	 #!	  L'
, "F""9-"//9&9 .- "--s   B%%
B4	c                 <   [         R                  " S5      n[         R                  " S5      n[         R                  " SS5      nUUUSSS.XUSS./nU H3  nU R	                  [
        5         U R                  " S	0 UD6nSSS5        M5     g! , (       d  f       MG  = f)
z1Ensures draw ellipse detects invalid kwarg names.r   cyanr   r   r   )r   r8   r)   r   invalidr   r8   r)   r   NrQ   r   r   s          r!    test_ellipse__kwarg_invalid_name1DrawEllipseMixin.test_ellipse__kwarg_invalid_namei  s    ..(V${{66* #  !L	
 "F""9-"//9&9 .- "--s   ,B
B	c                    [         R                  " S5      nSn[         R                  " SS5      nSnXX4S.nS H  nUR                  U5        SU:X  a  U R                  " U40 UD6nOISU:X  a  U R                  " X40 UD6nO/S	U:X  a  U R                  " XU40 UD6nOU R                  " XX440 UD6nU R                  U[         R                  5        M     g
)z9Ensures draw ellipse accepts a combination of args/kwargsrv   r      r   r   r   r   r   r   r   r   r8   r)   N)rE   r}   rF   r   rc   r~   r   r   r8   r)   r   r   r   r9   s           r!   test_ellipse__args_and_kwargs.DrawEllipseMixin.test_ellipse__args_and_kwargs}  s    ..( {{66*$dS9DJJtD "//B6BD"//I&I4"//OO"//VvV!!+v{{; :r'   c                    Sn[         R                  " S5      n[         R                  " S5      nSnUU[         R                  " US5      SS.nS Hu  nUR	                  U5        XeS	'   US
:  a  UOUnU R
                  " S0 UD6nU R                  UR                  U5      U5        U R                  U[         R                  5        Mw     g)z4Ensures draw ellipse accepts different width values.r   whiterv   r   rx   r      r   rz   Nr   ir,   r   r   rx   i  r   r   rQ   	rE   r   r}   rF   fillrc   r   r   r~   	r   r/   surface_colorr   r8   r   r   expected_colorr9   s	            r!    test_ellipse__valid_width_values1DrawEllipseMixin.test_ellipse__valid_width_values  s    W-..(!KKV,	
 6ELL'#7O&+qjUmN++5f5KW^^C0.A!!+v{{; 6r'   c                    Sn[         R                  " S5      n[         R                  " S5      n[         R                  " S5      nXBSSS.n[         R                  " US5      US	4US   US
   S
S
44nU Hk  nUR	                  U5        XuS'   U R
                  " S0 UD6nU R                  UR                  U5      U5        U R                  U[         R                  5        Mm     g)z4Ensures draw ellipse accepts different rect formats.r   r   blackr   Nr   r   r   rv   r   r   r)   rQ   r   	r   r/   r   r   r   r   rectsr)   r9   s	            r!    test_ellipse__valid_rect_formats1DrawEllipseMixin.test_ellipse__valid_rect_formats  s    e,W-..($tVWXS&)C=3q63q61a:PQDLL'!6N++5f5KW^^C0.A!!+v{{; r'   c                 "   Sn[         R                  " S5      n[         R                  " S5      n[         R                  " S5      nUS[         R                  " US5      SS.nS	S
UR	                  U5      U4nU H  nUR                  U5        XuS'   [        U[        5      (       a  UR                  U5      nOUnU R                  " S0 UD6n	U R                  UR                  U5      U5        U R                  U	[         R                  5        M     g)z5Ensures draw ellipse accepts different color formats.r   r	   r   r   Nr   r   r   r   r   r   r   r   r   r   r8   rQ   )rE   r   r}   rF   map_rgbr   
isinstanceint	unmap_rgbrc   r   r   r~   )
r   r/   green_colorr   r   r   redsr8   r   r9   s
             r!   !test_ellipse__valid_color_formats2DrawEllipseMixin.test_ellipse__valid_color_formats  s    ll7+W-..(KKV,	
 OOK(	
 ELL'#7O%%%!(!2!25!9!,++5f5KW^^C0.A!!+v{{; r'   c                    Sn[         R                  " S5      nUS[         R                  " US5      SS.nSU4 H7  nXCS'   U R                  [        5         U R
                  " S	0 UD6nSSS5        M9     g! , (       d  f       MK  = f)
z=Ensures draw ellipse handles invalid color formats correctly.r   r   rv   Nr   r   r   r   r8   rQ   )rE   r}   rF   r   r   rc   r   r/   r   r   r   r9   s         r!   #test_ellipse__invalid_color_formats4DrawEllipseMixin.test_ellipse__invalid_color_formats  s|    ..(KKV,	
  #GnN,7O""9-"//9&9 .- - .-   A55
B	c           
         ^ ^
 / SQn/ SQnSm
U
U 4S jnU
U 4S jnU H,  u  pVS H!  nU" XVU5        U H  u  pU" XVXxU	5        M     M#     M.     g)zTests ellipses of differing sizes on surfaces of differing sizes.

Checks if the number of sides touching the border of the surface is
correct.
)r$   r   r   r   )r   r   r   r   r   r   r   )r         r   c                    > [         R                  " X45      nTR                  UTSSX4U5        [        X0U5      nU H  nTR	                  TU;   5        M     g)z4Test for ellipses with the same size as the surface.r   N)rE   r}   rc   r"   
assertTrue)r   r   border_widthr   bordersborderr8   r   s         r!   	same_size0DrawEllipseMixin.test_ellipse.<locals>.same_size  sV    nne_5Gguq!U.C\R (?G!0 "r'   c           	         > [         R                  " X45      nT
R                  UT	X4U S-
  US-
  4U5        [        XPU5      nU Vs/ s H  nT	U;   PM
     snR	                  S5      nT
R                  US5        gs  snf )z;Test for ellipses that aren't the same size as the surface.r   Tr{   N)rE   r}   rc   r"   countr   )r   r   r  r4   r5   r   r  r	  sides_touchingr8   r   s            r!   not_same_size4DrawEllipseMixin.test_ellipse.<locals>.not_same_size  s    nne_5GEAIvz BL (?G =DDG&evoGDJJ4PN^Q/ Es   A:r   NrQ   )r   left_topsizesr
  r  r   r   r  r4   r5   r8   s   `         @r!   test_ellipseDrawEllipseMixin.test_ellipse  sX     40 		1	0 #ME &%6!)ID!%SI "* !' #r'   c                    SnSnSn[        SU-  5      n[        SU-  5      n[        R                  " X45      nU R                  USSSX4U5        Sn[	        U5       H   nUR                  XH45      S:X  d  M  US-  nM"     [	        U5       H   n	UR                  X45      S:X  d  M  US-  nM"     U R                  XsS-  5        g)z5Test for big ellipse that could overflow in algorithmi  r   g?r   r   r   r   r   N)r   rE   r}   rc   r   r   r   )
r   r   r   r	  x_value_testy_value_testr   colored_pixelsr   r   s
             r!   test_ellipse__big_ellipse*DrawEllipseMixin.test_ellipse__big_ellipse  s    3<(3<(..%1';Au0EvNvA~~|/0K?!#  uA~~q/0K?!#  	!4r'   c                 0   [         R                  " S5      n[         R                  " S5      n[         R                  " S5      n[         R                  " SS5      nUR	                  5       R
                  Ul        [        S[        UR                  6 S-  S-
  5       GH  nUR                  U5        U R                  X1XE5        UR                  5         UR                  nUR                  nUR                  U-   S-
  n[        XxS-   5       H%  n	U R                  UR                  Xi45      X5        M'     U R                  UR                  XgS-
  45      X%5        U R                  UR                  XhS-   45      X%5        UR                  nUR                   U-
  nUR                   S-
  n[        XxS-   5       H%  n	U R                  UR                  Xi45      X5        M'     U R                  UR                  XgS-
  45      X%5        U R                  UR                  XhS-   45      X%5        UR"                  n
UR"                  U-   S-
  nUR$                  n	[        XS-   5       H%  nU R                  UR                  Xi45      X5        M'     U R                  UR                  U
S-
  U	45      X%5        U R                  UR                  US-   U	45      X%5        UR&                  U-
  n
UR&                  S-
  nUR$                  n	[        XS-   5       H%  nU R                  UR                  Xi45      X5        M'     U R                  UR                  U
S-
  U	45      X%5        U R                  UR                  US-   U	45      X%5        UR)                  5         GM     g)	z1Ensures a thick lined ellipse is drawn correctly.r   r   (   r  r$   )      r   r{   N)rE   r   r}   rF   get_rectr   r   rC   rB   r   rc   r6   centerxr5   r   r   r.   r4   centeryr-   r7   )r   ellipse_colorr   r   r)   	thicknessr   y_starty_endr   x_startx_ends               r!   test_ellipse__thick_line)DrawEllipseMixin.test_ellipse__thick_line*  s   X.W-..*{{68,&&(//
 q#tyy/Q"6":;ILL'gdFLLN AhhGHHy(1,E7AI.  !7R / W^^Q!,<=}XW^^Q	N;]V AkkI-GKK!OE7AI.  !7R / W^^Q!,<=}XW^^Q	N;]V iiGII	)A-EA7AI.  !7R / W^^Wq[!,<=}XW^^UQYN;]V jj9,GJJNEA7AI.  !7R / W^^Wq[!,<=}XW^^UQYN;]VNNo <r'   c                    SnSn[         R                  " US-   U45      n[         R                  " SSX5      n[        SSS5       H  nUR	                  S5        U R                  USXE5        [        U5       H  nSnS	n[        US-   5       Hu  n	U(       d*  UR                  X45      [         R                  " S5      :X  d5  U(       d  M=  UR                  X45      [         R                  " S5      :X  d  Mi  U(       + nUS-  nMw     Xe:  d  XbU-
  S-
  :  a  U R                  US
5        M  U R                  US5        M     M     g )NP   F   r   r   %   r   BLACKREDFr{   r   )	rE   r}   rF   r   r   rc   r   r   r   )
r   r   r   r   r)   r%  r   number_of_changesdrawn_pixelr   s
             r!   test_ellipse__no_holes'DrawEllipseMixin.test_ellipse__no_holesn  s   ..%!)V!45{{1a/q"aILL!gud>6]$%!#uqy)A'#NNA62fll56II&;#NNA62fll76KK*5o)Q.) * =A(:Q(>$>$$%6:$$%6: # )r'   c                    [         R                  " S5      n[         R                  " S5      n[         R                  " S5      n[         R                  " SS5      nUR	                  5       R
                  Ul        [        UR                  6 S-   S-  n[        XUS-   5       GH  nUR                  U5        U R                  X1XF5        UR                  5         [        UR                  UR                  5       H0  nU R                  UR                  UR                   U45      U5        M2     [        UR"                  UR$                  5       H/  nU R                  UR                  XR&                  45      U5        M1     U R                  UR                  UR                   UR                  S-
  45      U5        U R                  UR                  UR                   UR                  S-   45      U5        U R                  UR                  UR"                  S-
  UR&                  45      U5        U R                  UR                  UR$                  S-   UR&                  45      U5        UR)                  5         GM     g	)
zCEnsures an ellipse with max width (and greater) is drawn correctly.r   r   r  r$   )r     r   r{   rv   N)rE   r   r}   rF   r!  r   rC   rB   r   r   rc   r6   r5   r.   r   r   r"  r4   r-   r#  r7   )	r   r$  r   r   r)   max_thicknessr%  r   r   s	            r!   test_ellipse__max_width(DrawEllipseMixin.test_ellipse__max_width  s   X.W-..*{{68,&&(//dii1,2}a.?@ILL'gdFLLN 488T[[1  q0A!BMR 2 499djj1  LL0A!BMR 2 dhhl;<m dkkAo>?
 		At||<=} 

Q=> NN? Ar'   c           	      *  ^ UR                  5       u  mnUR                  5         U4S j[        U5       5        HF  nUR                  U5      (       a  UnOUnU R	                  UR                  U5      USU SU 35        MH     UR                  5         g )Nc              3   P   >#    U  H  n[        T5        H  o"U4v   M
     M     g 7fNr   ).0r   r   surf_ws      r!   	<genexpr>@DrawEllipseMixin._check_1_pixel_sized_ellipse.<locals>.<genexpr>  s     IMq5=aF=FM   #&zcollide_rect=z, pos=)r%   r6   r   collidepointr   r   r7   )	r   r   collide_rectr   r$  surf_hr/   r   r@  s	           @r!   _check_1_pixel_sized_ellipse-DrawEllipseMixin._check_1_pixel_sized_ellipse  s    
 !))+IE&MIC ((--!.!.s#~VC59 J 	r'   c                 B   [         R                  " S5      n[         R                  " S5      nSu  p4[         R                  " X445      n[         R                  " SS5      nUR	                  5       nSnUn	Un
US-  nUS-  n[        SS	5       H  nXl        Xl        US
-   * nUS-  * nXMS-  -
  nX4X4X4UU4X4X4X4X4UU4X4X4X4X4U	U4X44nU HF  nUR                  U5        UUl        UUl        U R                  XQU5        U R                  XWX!5        MH     M     g)zqEnsures an ellipse with a width of 1 is drawn correctly.

An ellipse with a width of 1 pixel is a vertical line.
r   r   rx   r   r$   r   r,   r{      rx   r   N)rE   r   r}   rF   copyr   r   r   r   rc   rG  )r   r$  r   r@  rF  r   r)   rE  off_left	off_right
off_bottomcenter_xcenter_y	ellipse_hoff_tophalf_off_tophalf_off_bottom	positionsrect_poss                      r!   test_ellipse__1_pixel_width,DrawEllipseMixin.test_ellipse__1_pixel_width  sk   
 U+W-..&!12{{66*yy{ 	
Q;Q; q"I&NF "A&G&!^,L$Q7O
 #($?+&#($?+&$)%O,'I$ &]+''/$!!'$?11= &; &r'   c                 x   [         R                  " S5      n[         R                  " S5      nSu  p4[         R                  " X445      n[         R                  " SSUS-   45      nSSUS-  S	4US-
  S	4US	44nU H>  nUR	                  U5        Xl        U R                  XQU5        U R                  XVX!5        M@     g
)zEnsures an ellipse with a width of 1 is drawn correctly
when spanning the height of the surface.

An ellipse with a width of 1 pixel is a vertical line.
r   r   rJ  r$   r   r{   r@   r   r,   r,   NrE   r   r}   rF   r   r   rc   rG  	r   r$  r   r@  rF  r   r)   rV  rW  s	            r!   ,test_ellipse__1_pixel_width_spanning_surface=DrawEllipseMixin.test_ellipse__1_pixel_width_spanning_surface  s     U+W-..&!12{{6Avz?3 q["aZRL
	 "HLL'#Lgd;--} "r'   c                 B   [         R                  " S5      n[         R                  " S5      nSu  p4[         R                  " X445      n[         R                  " SS5      nUR	                  5       nUnSn	Un
US-  nUS-  n[        SS	5       H  nXl        Xl        US
-   * nUS-  * nX=S-  -
  nX4X4X4UU	4X4X4X4X4UU4X4X4X4X4UU
4X44nU HF  nUR                  U5        UUl        UUl        U R                  XQU5        U R                  XWX!5        MH     M     g)zuEnsures an ellipse with a height of 1 is drawn correctly.

An ellipse with a height of 1 pixel is a horizontal line.
r   r   r   rx   r$   r   r,   r{   rK  rx   r   N)rE   r   r}   rF   rL  r   r   r   r   rc   rG  )r   r$  r   r@  rF  r   r)   rE  rN  rS  rO  rP  rQ  	ellipse_wrM  half_off_lefthalf_off_rightrV  rW  s                      r!   test_ellipse__1_pixel_height-DrawEllipseMixin.test_ellipse__1_pixel_height'  sk   
 U+W-..&!12{{66*yy{ 	
Q;Q; q"I&NF #Q'H'1n-M#A~6N
 #(#)$$)$*%&+&,'I$ &]+''/$!!'$?11= &; &r'   c                 x   [         R                  " S5      n[         R                  " S5      nSu  p4[         R                  " X445      n[         R                  " SUS-   S45      nSSS	US-  4S	US-
  4S	U44nU H>  nUR	                  U5        Xl        U R                  XQU5        U R                  XVX!5        M@     g
)zEnsures an ellipse with a height of 1 is drawn correctly
when spanning the width of the surface.

An ellipse with a height of 1 pixel is a horizontal line.
r   r   ra  r$   r{   r   r@   r,   r   r,   Nr\  r]  s	            r!   -test_ellipse__1_pixel_height_spanning_surface>DrawEllipseMixin.test_ellipse__1_pixel_height_spanning_surfaced  s     U+W-..&!12{{6FQJ?3 1!L
	 "HLL'#Lgd;--} "r'   c                    [         R                  " S5      n[         R                  " S5      nSu  p4[         R                  " X445      n[         R                  " SS5      nSnUnSn	Un
SnUS-
  nSnUS-
  nUS	-  nUS	-  nXy4X}4UU4X~4Xz4X4X4UU4X4X4X4X4UU4X4X4X4X4UU4X4X4X4X4UU4X4X44nU H?  nUR	                  U5        UUl        U R                  XQU5        U R                  XVX!5        MA     g
)zEnsures an ellipse with a width and height of 1 is drawn correctly.

An ellipse with a width and height of 1 pixel is a single pixel.
r   r   rx   rx   r$   r   r,   r   r   r{   Nr\  )r   r$  r   r@  rF  r   r)   rM  rN  rS  rO  	left_edge
right_edgetop_edgebottom_edgerP  rQ  rV  rW  s                      r!   &test_ellipse__1_pixel_width_and_height7DrawEllipseMixin.test_ellipse__1_pixel_width_and_height  sw   
 U+W-..&!12{{66* 	
	aZ
qjQ;Q;
  x #" !!$# x #"!""%$ !!$#3
	8 "HLL'#DLgd;--} "r'   c                 z   [         R                  " S5      n[         R                  " S5      nS=p4S=pVX44XV44n[         R                  " SSS5      nUR                  5       n	U	R	                  US-  S	-   US-  S	-   5      n
[        U	5      [        U
5      -    H  n[         H  nU H  u  p[         R                  " S
X45      n[        XU5        SS	SS[        X5      4 HO  nUR                  U5        U R                  XUU5      n[        XUR                  5      nU R                  UU5        MQ     M     M     M     g)zEnsures draw ellipse returns the correct bounding rect.

Tests ellipses on and off the surface and a range of width/thickness
values.
r   r   r      r   r   r       r{   r   r$   rv   N)rE   r   r}   r!  inflater*   RECT_POSITION_ATTRIBUTESrF   setattrrC   r   rc   rM   r   r   )r   r$  rG   	min_width
min_height	max_width
max_heightr  r   	surf_rectbig_rectr/   attrr   r   ellipse_rectr%  bounding_rectexpected_rects                      r!   test_ellipse__bounding_rect,DrawEllipseMixin.test_ellipse__bounding_rect  s@    U+\\'*
!""	!""	(9*AB..1b1$$&	 $$Y]Q%6
Q8JK/
(23C
 1%*ME#);;v#GLL4&'Aq#e2D%E	Z0(,(9(9#L)) )=#1E1E) ((F &F	 &+ 13r'   c                 <  ^ S=nm[         R                  " S5      n[         R                  " S5      n[         R                  " UT45      nUR                  U5        [         R                  " SS5      nUR                  5       R                  Ul        UR                  5       nS H  n[        U5       H  nXl        UR                  S5        UR                  U5        U R                  XBXg5        [        XBU5      n	UR                  U5        UR                  U5        U R                  XBXg5        UR                  5         U4S j[        U5       5        H.  n
X;   a  UnOUnU R                  UR                  U
5      X5        M0     UR!                  5         M     M     g)	zeEnsures draw ellipse respects a surface's clip area.

Tests drawing the ellipse filled and unfilled.
r   r   r	   r$      r  r   Nc              3   P   >#    U  H  n[        T5        H  o!U4v   M
     M     g 7fr=  r>  r?  r   r   surfhs      r!   rA  >DrawEllipseMixin.test_ellipse__surface_clip.<locals>.<genexpr>       N<auAq66<rC  )rE   r   r}   r   rF   r!  r   rL  r*   set_cliprc   r>   r6   r   r   r   r7   )r   surfwr$  r   r   	clip_rectpos_rectr   r   expected_ptsptr   r  s               @r!   test_ellipse__surface_clip+DrawEllipseMixin.test_ellipse__surface_clip  sT   
 U+W-..%0]#KK1	"++-44	>>#E6yA #)  &]+!!'(J/	R ]+  +!!'(J O5<NB))6)6$$W^^B%7L O  9 B r'   rQ   N)#rR   rS   rT   rU   rV   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r*  r4  r9  rG  rX  r^  re  ri  rq  r  r  rX   rQ   r'   r!   rr   rr      s    
88?8"<.	8.B B,:>:(<,<.<$<B:"'JR5&BH;2(T2;z@;z@>@)GV-!r'   rr   c                       \ rS rSrSrSrg)DrawEllipseTesti  zTest draw module function ellipse.

This class inherits the general tests from DrawEllipseMixin. It is also
the class to add any draw.ellipse specific tests to.
rQ   NrR   rS   rT   rU   rV   rX   rQ   r'   r!   r  r        r'   r  c                   <    \ rS rSrSrSr\S 5       r\S 5       rSr	g)BaseLineMixini5  zMixin base for drawing various lines.

This class contains general helper methods and setup for testing the
different types of lines.
)r   r  r   )r   r   r   )r   r   r   )r   r   r   )r   r   r   r   r   r   c                      / n S Hk  nS Hb  nS[         4 HS  n[        R                  R                  XU5      nU R	                  U5        U R	                  UR                  5       5        MU     Md     Mm     U $ )N))1   r  ry   ry   )      r  rv  r   )r   rE   displayset_modeappendconvert_alpha)surfacesrB   depthflagsr   s        r!   _create_surfacesBaseLineMixin._create_surfacesG  si     (D(]E$nn55d5IGOOG,OOG$9$9$;< + ) ) r'   c              #      #    [        U 5       H?  nXR                  U R                  4;   a  M   U R                  U4v   XR                  4v   MA     g 7fr=  )r*   r   r   )r)   r  s     r!   _rect_linesBaseLineMixin._rect_linesS  sH      /t4BllDKK00<<$$||$$ 5s   AArQ   N)
rR   rS   rT   rU   rV   COLORSr\   r  r  rX   rQ   r'   r!   r  r  5  s6    	F 	 	 % %r'   r  c                       \ rS rSrSrS rS rS rS rS r	S r
S	 rS
 rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rSrg)	LineMixinib  zfMixin test for drawing a single line.

This class contains all the general single line drawing tests.
c                     U R                  [        R                  " S5      SSSS5      nU R                  U[        R                  5        g)z+Ensures draw line accepts the correct args.ru   rw   r$   r   r   Nrg   rE   r}   r~   rF   r   s     r!   test_line__argsLineMixin.test_line__argsh  s:    nnNN6"NFFA
 	k6;;7r'   c                     U R                  [        R                  " S5      SSS5      nU R                  U[        R                  5        g)z3Ensures draw line accepts the args without a width.r   r   r   r   ry   r$   Nr  r   s     r!   test_line__args_without_width'LineMixin.test_line__args_without_widthp  s8    nnNN6"M66
 	k6;;7r'   c                     [         R                  " S5      n[         R                  " S5      nSnSnUUUUSS.UUUUS./nU H5  nU R                  " S	0 UD6nU R	                  U[         R
                  5        M7     g)
zKEnsures draw line accepts the correct kwargs
with and without a width arg.
r   r   r   r   r   r   r8   	start_posend_posr   r   r8   r  r  NrQ   )rE   r}   r   rg   r~   rF   r   r   r8   r  r  r   r   r9   s           r!   test_line__kwargsLineMixin.test_line__kwargsx  s     ..(X&	 #&" #&"	
  "F..262K!!+v{{; "r'   c           	          U R                  SSSS[        R                  " S5      S9nU R                  U[        R                  5        g)z3Ensures draw line's kwargs are not order dependent.r   r   r{   rx   r   r   rz   )r  r  r   r8   r   Nr  r   s     r!   #test_line__kwargs_order_independent-LineMixin.test_line__kwargs_order_independent  sC    nnNN6* % 
 	k6;;7r'   c                 \   [         R                  " S5      n[         R                  " S5      nU R                  [        5         U R                  XS5      nSSS5        U R                  [        5         U R                  X5      nSSS5        U R                  [        5         U R                  U5      nSSS5        U R                  [        5         U R                  5       nSSS5        g! , (       d  f       N= f! , (       d  f       N}= f! , (       d  f       N_= f! , (       d  f       g= f)z4Ensures draw line detects any missing required args.r   r   r$   NrE   r}   r   r   r   rg   r   r   r8   r9   s       r!   test_line__args_missing!LineMixin.test_line__args_missing  s    ..(V$y)..@K * y)..8K * y)..1K * y)..*K *) *) *) *) *)0   C*2C;!DD*
C8;
D	
D
D+c                 2   [         R                  " S5      [         R                  " S5      SSSS.nS HO  n[        U5      nUR	                  U5        U R                  [        5         U R                  " S	0 UD6nSSS5        MQ     g! , (       d  f       Mc  = f)
z6Ensures draw line detects any missing required kwargs.rz   r   r   r   r   r  r  r  r8   r   NrQ   )rE   r}   r   r   r   r   r   rg   r   s        r!   test_line__kwargs_missing#LineMixin.test_line__kwargs_missing  s     ~~f-\\%(
 AD!&\Nt$""9-"nn>~> .-	 A .-   'B
B	c                    [         R                  " S5      n[         R                  " S5      nSnSnU R                  [        5         U R                  XX4S5      nSSS5        U R                  [        5         U R                  XUS5      nSSS5        U R                  [        5         U R                  XSU5      nSSS5        U R                  [        5         U R                  US	X45      nSSS5        U R                  [        5         U R                  S
X#U5      nSSS5        g! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       Ns= f! , (       d  f       g= f)z,Ensures draw line detects invalid arg types.r   r   r   r   r   Nr   r   r   r   r{   rv   r   r  r   r   r8   r  r  r9   s         r!   test_line__arg_invalid_types&LineMixin.test_line__arg_invalid_types  s   ..(V$	y)..SQK * y)..INK * y)..wGK * y)..#yJK * y)..uQK *)! *) *) *) *) *)s<   D'7D8(E	E
E+'
D58
E	
E
E(+
E9c           
      d   [         R                  " S5      n[         R                  " S5      nSnSnSn[         R                  UUUUS.USUUUS.UUSUUS.UUUS	US.UUUUS
S./nU H3  nU R                  [        5         U R
                  " S0 UD6nSSS5        M5     g! , (       d  f       MG  = f)z.Ensures draw line detects invalid kwarg types.ru   r	   r   r{   r   r   r  r   r   r   333333?NrQ   r  )	r   r   r8   r  r  r   r   r   r9   s	            r!   test_line__kwarg_invalid_types(LineMixin.test_line__kwarg_invalid_types  s    ..(W%	 ">>&" #&" #&" #& #&";$
L "F""9-"nn6v6 .- "--    B  
B/	c                    [         R                  " S5      n[         R                  " S5      nSnSnUUUUSSS.UUUUSS./nU H3  nU R                  [        5         U R
                  " S	0 UD6nSSS5        M5     g! , (       d  f       MG  = f)
z.Ensures draw line detects invalid kwarg names.r   r   r   r  r   )r   r8   r  r  r   r   r   r8   r  r  r   NrQ   r  r  s           r!   test_line__kwarg_invalid_name'LineMixin.test_line__kwarg_invalid_name  s    ..(V$	 #&" #&"
$ "F""9-"nn6v6 .- "--   A<<
B	c                    [         R                  " S5      nSnSnSnSnUUUUUS.nS H  nUR                  U5        SU:X  a  U R                  " U40 UD6nOeSU:X  a  U R                  " X40 UD6nOKS	U:X  a  U R                  " XU40 UD6nO0S
U:X  a  U R                  " XX440 UD6nOU R                  " XX4U40 UD6nU R	                  U[         R
                  5        M     g)z6Ensures draw line accepts a combination of args/kwargsrz   r   r   r   r   r  r   r8   r  r  N)rE   r}   r   rg   r~   rF   )	r   r   r8   r  r  r   r   r   r9   s	            r!   test_line__args_and_kwargs$LineMixin.test_line__args_and_kwargs+  s    ..( 	"
 JDJJtD "nnW??D"nnWFvF$"nnWYQ&Qd""nnI:@ #nnIAG !!+v{{;% Jr'   c                    [         R                  " S5      n[         R                  " S5      n[         R                  " S5      nSnUUUSSS.nS Hu  nUR                  U5        XeS	'   US
:  a  UOUnU R                  " S0 UD6nU R                  UR                  U5      U5        U R                  U[         R                  5        Mw     g)z1Ensures draw line accepts different width values.r   r   r   r   r   Nr  ir   r,   r   r   rx   d   r   r   rQ   )	rE   r   r}   r   rg   r   r   r~   rF   	r   
line_colorr   r   r/   r   r   r   r9   s	            r!   test_line__valid_width_values'LineMixin.test_line__valid_width_valuesN  s    \\(+
W-..(
 4ELL'#7O+019Z-N..262KW^^C0.A!!+v{{; 4r'   c                    [         R                  " S5      n[         R                  " S5      n[         R                  " S5      nUUSSSS.nSu  pVXV4US	-   U4XVS	-   4US	-   US	-   44 H  n[        [        [
        4 Hs  nUR                  U5        U" U5      US
'   U R                  " S0 UD6n	U R                  UR                  XV45      U5        U R                  U	[         R                  5        Mu     M     g)z6Ensures draw line accepts different start_pos formats.r   r   r   Nr   r{   r  r   皙?r  rQ   rE   r   r}   tuplelistr   r   rg   r   r   r~   rF   )
r   r   r   r   r   r   r   r  seq_typer9   s
             r!   "test_line__valid_start_pos_formats,LineMixin.test_line__valid_start_pos_formatsf  s    e,W-..(#
  &1s7A,Gq3wC>PQI"D'2]+&.y&9{#"nn6v6  !7H%%k6;;? 3 Rr'   c                    [         R                  " S5      n[         R                  " S5      n[         R                  " S5      nUUSSSS.nSu  pVXV4US	-   U4XVS	-   4US	-   US	-   44 H  n[        [        [
        4 Hs  nUR                  U5        U" U5      US
'   U R                  " S0 UD6n	U R                  UR                  XV45      U5        U R                  U	[         R                  5        Mu     M     g)z4Ensures draw line accepts different end_pos formats.r   r   r   r   Nr{   r  r   g?r  rQ   r  )
r   r   r   r   r   r   r   r  r  r9   s
             r!    test_line__valid_end_pos_formats*LineMixin.test_line__valid_end_pos_formats  s    e,W-..(#
  S!qc'lQWa#g<NOG"D'2]+$,W$5y!"nn6v6  !7H%%k6;;? 3 Pr'   c                    [         R                  " S5      [         R                  " S5      SSSS.nSSS	S
S1S
S04nU H7  nX1S'   U R                  [        5         U R
                  " S0 UD6nSSS5        M9     g! , (       d  f       MK  = f)z>Ensures draw line handles invalid start_pos formats correctly.r   r   Nr   r   r  r{   r{   r   r   r{   r   r{   r  rQ   r  r   r   start_pos_fmtsr  r9   s        r!   $test_line__invalid_start_pos_formats.LineMixin.test_line__invalid_start_pos_formats  s     ~~f-\\%(
 FF
 (I"+;""9-"nn6v6 .- ( .-   A::
B		c                    [         R                  " S5      [         R                  " S5      SSSS.nSSS	S
S1S
S04nU H7  nX1S'   U R                  [        5         U R
                  " S0 UD6nSSS5        M9     g! , (       d  f       MK  = f)z<Ensures draw line handles invalid end_pos formats correctly.r   r   r   Nr   r  r  r  r  r{   r  rQ   r  r   r   end_pos_fmtsr  r9   s        r!   "test_line__invalid_end_pos_formats,LineMixin.test_line__invalid_end_pos_formats  s     ~~f-\\%(
 FF
 $G '9""9-"nn6v6 .- $ .-r  c                    [         R                  " S5      n[         R                  " S5      n[         R                  " S5      nSnUSUSSS.nS	S
UR                  U5      U4nU H  nUR	                  U5        XuS'   [        U[        5      (       a  UR                  U5      nOUnU R                  " S0 UD6n	U R                  UR                  U5      U5        U R                  U	[         R                  5        M     g)z2Ensures draw line accepts different color formats.r	   r   r   r   Nr   rv   r  r   r   r8   rQ   )rE   r   r}   r   r   r   r   r   rg   r   r   r~   rF   
r   r   r   r   r/   r   greensr8   r   r9   s
             r!   test_line__valid_color_formats(LineMixin.test_line__valid_color_formats  s    ll7+W-..(
 OOK(	
 ELL'#7O%%%!(!2!25!9!,..262KW^^C0.A!!+v{{; r'   c                     [         R                  " S5      SSSSS.nSU 4 H7  nX!S'   U R                  [        5         U R                  " S	0 UD6nSSS5        M9     g! , (       d  f       MK  = f)
z:Ensures draw line handles invalid color formats correctly.r   Nr   r   r   r  r   r8   rQ   )rE   r}   r   r   rg   r   r   r   r9   s       r!    test_line__invalid_color_formats*LineMixin.test_line__invalid_color_formats  sj     ~~f-
  #DkN,7O""9-"nn6v6 .- * .-   A
A,	c                     SnU R                  5        HN  nU R                   H;  nU R                  X#US5        U R                  UR	                  U5      USU 35        M=     MP     g)z-Tests if the line drawn is the correct color.r$   r   pos=Nr  r  rg   r   r   r   r/   r   r   s       r!   test_line__colorLineMixin.test_line__color  sY    ,,.G"&++wVD  !4nSElS #. /r'   c           	        ^^^ SmSmSmU R                  5        Hh  nU R                   HU  nU R                  XTT4TT4S5        UUU4S jS 5        H(  nU R                  UR	                  U5      USU 35        M*     MW     Mj     g)z6Ensures a thick line is drawn using the correct color.r   rx   c              3   H   >#    U  H  nTT4  H  o"TU-   4v   M     M     g 7fr=  rQ   )r?  ir   from_xto_xr   s      r!   rA  <LineMixin.test_line__color_with_thickness.<locals>.<genexpr>  s#     S
1VTNqAJNJ
s   ")r   r{   r  Nr  )r   r   r   r/   r  r  r   s       @@@r!   test_line__color_with_thickness)LineMixin.test_line__color_with_thickness  s    ,,.G"&++wdAYPQRS
SC$$W^^C%8.DQTPU,W T #. /r'   c                     SnU R                  5        Hf  nUR                  5       nU R                  X!SUS-
  S45        [        U5       H,  nUS4nU R	                  UR                  U5      USU 35        M.     Mh     g)z*Tests if the line drawn contains any gaps.r  r$   r   r   r  Nr  r2   rg   r   r   r   r   r   r   r   r   r/   s         r!   test_line__gapsLineMixin.test_line__gaps  sx    (,,.G%%'ENN7FUQYNK5\!f  !4nSElS "	 /r'   c           	      X   SnSnU R                  5        H  nUR                  5       S-
  nUS-  nUS-  nU R                  X1SUSU-   4U5        [        US-   5       HG  n[        SS5       H4  nXxUS-   S-  -   4n	U R	                  UR                  U	5      USU	 35        M6     MI     M     g	)
z/Ensures a thick line is drawn without any gaps.r  r   r   r   r   rv   r  r{   r  Nr  )
r   r   r%  r   r   r   r   r   r   r/   s
             r!   test_line__gaps_with_thickness(LineMixin.test_line__gaps_with_thickness  s    (	,,.G%%'!+E
AAANN7FQAJ	R1q5\q!AAEa<01C$$W^^C%8.DQTPU,W % " /r'   c                    [        U [        5      (       a  U R                  S5        [        R                  " S5      n[        R                  " S5      nS=p4[        R
                  " SX445      nUS-   US-   4US-
  US-
  44 H  n[        R                  " USS5      nUR                  5       n[        U5       H  n	Xl	        [        S	S5       H  n
U R                  U5       Hv  u  pUR                  U5        U R                  XqXU
5      nSU
:  a  [        XrU5      nO[        R
                  " US5      nU R                  UUS
R!                  XXj5      5        Mx     M     M     M     g)zEnsures draw line returns the correct bounding rect.

Tests lines with endpoints on and off the surface and a range of
width/thickness values.
z1bounding rects not supported in draw_py.draw_liner   r   r   r$   r   r   rv  r,   z'start={}, end={}, size={}, thickness={}N)r   ro   skipTestrE   r   rF   r}   r!  r*   r   r   r  r   rg   rM   r   format)r   r  rG   r   r   helper_rectrB   r   r~  r/   r%  startendr  r  s                  r!   test_line__bounding_rect"LineMixin.test_line__bounding_rect*  sW    d.//MMMN\\%(
\\'*
kk&5/: ai!,uqy&1*.EFDnnT1b1G((*I 4I>%(" "'r1I&*&6&6{&C
Z0(,#Y) y= -A 'U-M
 -3KKv,FM(())ELL %D# 'D ".	 ? Gr'   c           	        ^ S=nm[         R                  " S5      n[         R                  " S5      n[         R                  " UT45      nUR                  U5        [         R                  " SS5      nUR                  5       R                  Ul        UR                  5       nS GH%  n[        U5       GH  nXl        UR                  S5        UR                  U5        U R                  XBUR                  UR                  U5        [        XBU5      n	UR                  U5        UR                  U5        U R                  XBUR                  UR                  U5        UR                  5         U4S j[        U5       5        H.  n
X;   a  UnOUnU R!                  UR#                  U
5      X5        M0     UR%                  5         GM     GM(     g)	z1Ensures draw line respects a surface's clip area.r   r   r	   r$   r  r   Nc              3   P   >#    U  H  n[        T5        H  o!U4v   M
     M     g 7fr=  r>  r  s      r!   rA  4LineMixin.test_line__surface_clip.<locals>.<genexpr>  r  rC  )rE   r   r}   r   rF   r!  r   rL  r*   r  rg   r   r   r>   r6   r   r   r   r7   )r   r  r  r   r   r  r  r%  r   r  r  r   r  s               @r!   test_line__surface_clip!LineMixin.test_line__surface_clip_  su   \\%(
W-..%0]#KK1	"++-44	>>#I6yA #)  &]+(:L:Li  0YO ]+  +(:L:Li  O5<NB))3)6$$W^^B%7L O  A B  r'   rQ   N)rR   rS   rT   rU   rV   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r!  r%  r-  r2  rX   rQ   r'   r!   r  r  b  s    
88<:
8+"?"R6/7b78!<F<0@4@47070 <D7 T	X	TX3j.!r'   r  c                   *    \ rS rSrSrS rS rS rSrg)DrawLineTesti  zTest draw module function line.

This class inherits the general tests from LineMixin. It is also the class
to add any draw.line specific tests to.
c           	      B   S GH  n[         R                  " SSU5      nUR                  [         R                  " SSS5      5        U R	                  U[         R                  " SSS5      SSS5        U R                  UR                  S5      R                  SS	5        UR                  [         R                  " SSS5      5        U R	                  U[         R                  " SSS5      SSS5        U R                  UR                  S5      R                  SS
5        GM     gztest color component order)r  rv  r   rv   r   r   r   r   r   r   zthere should be red herezthere should be blue hereN)	rE   r}   r   r   rg   assertGreaterr   rbr   r  r   s      r!   test_line_endianness!DrawLineTest.test_line_endianness  s    EnnVQ6GLLaA./NN7FLLa$;VVQOw~~f577<VWLLaA./NN7FLLAs$;VVQOw~~f577<WX r'   c                 B   SU l         [        R                  " U R                   [        R                  5      U l        SU l        [        R                  " U R                  U R
                  SS5      nU R                  UR                  SS5        [        R                  " U5       H8  nU R                  U R                  R                  U5      U R
                  5        M:     [        R                  " U5       H8  nU R                  U R                  R                  U5      U R
                  5        M:     SnSnXD4nU R                   S	   U-
  US
   4nUS	   U R                   S
   U-
  4nUS	   US
   4nUS	   U-   US
   4n	US	   US	   S-   4n
XX4Xg4Xv4X4XV4Xe4XW4Xu4XY4X4XZ4X4XU4/nU GHs  u  pU SU 3nUS	   US	   ::  a  UnUnOUnUnU R                  R                  S5        [        R                  " U R                  SXU5      nS	=nn[!        US	   US	   -
  5      [!        US
   US
   -
  5      :  a  S
nOS
n[#        U5       H  nUS	   UU-  -   US
   UU-  -   4nU R                  U R                  R                  U5      SU5        US	   UU-  -   US
   UU-  -   4nU R                  U R                  R                  U5      SU5        M     US	   S
-
  US
   4nU R                  U R                  R                  U5      SU5        US	   UU-  -   US
   UU-  -   4nU R                  U R                  R                  U5      SU5        US	   UU-  -   US
   UU-  -   4nU R                  U R                  R                  U5      SU5        US	   US	   :  a  US	   nOUS	   nUS
   US
   :  a  US
   nOUS
   n[!        US	   US	   -
  5      S
-   UUS
-
  -  -   n[!        US
   US
   -
  5      S
-   UUS
-
  -  -   nUSU 3-  nU R                  UUUUU4U5        GMv     g )Ni@     r   r  r     r   )rA  r      z3end point arg should be (or at least was) inclusiver{   r   r   r   z - r   r  z, )	surf_sizerE   r}   r   surfr8   r   rf   r   r-   r   rect_area_ptsr   rect_outer_boundsassertNotEqualr   absr   )r   drawnr  
line_widthoffsetar;  cdefrh   p1p2msgplowphighrecxincyincr  prxryr   r   s                             r!   	test_lineDrawLineTest.test_line  si   #NN4>>6??C	%
		$))TZZBKKS	

 **51BTYY--b14::> 2 ..u5B		 0 0 4djjA 6 
^^A'1.qT4>>!$v-.qT1Q4LqTF]AaD!qT1Q4!8FFFFFFFFFFFFF
  FBDB4.C!u1~IINN9%))DII
KCOD42a52a5=!C11$66:&UTAX%r!utax'78  !1!1!!4osKUTAX%r!utax'78  !1!1!!4osK ' a1d1g&ATYY--a0)SAa4*,,d1gz8I.IJATYY--a0)SAqD:--uQx$:K/KLATYY--a0)SA!ur!u}UU!ur!u}UUBqEBqEM"Q&a)@@ABqEBqEM"Q&a)@@ARu:CS2r1a.#6a r'   c                    ^ ^^^^ SmSm[         R                  " TT4[         R                  5      mU4S jmUU UUU4S jnU" SS5        U" SS5        U" SS5        g )NrA  c                    > / SQnSn[        U VVs/ s H$  u  pETR                  X-   X-   45      U:X  d  M"  SPM&     snn5      $ s  snnf )N)r   r   rh  r[  )r   r   r   r   r   )lenr   )r   r   offsetsWHITEdxdyrF  s         r!   white_surrounded_pixels@DrawLineTest.test_line_for_gaps.<locals>.white_surrounded_pixels  sJ    8G(E!(SvrDKK8H,IU,RS Ss
   !A
A
c                 ,  > TR                  S5        [        R                  R                  TSXS5        Sn[	        ST	S-
  5       HK  n[	        STS-
  5       H5  nTR                  X445      U:X  d  M  TR                  T" X45      S:  5        M7     MM     g )Nr   r  r   r   r   r   r   r   rv   )r   rE   r   rf   r   r   r  )
r+  r,  r0  r   r   r   r   rF  rg  r   s
        r!   check_white_line9DrawLineTest.test_line_for_gaps.<locals>.check_white_line  s    IIi KKT?EC"E1eai(q&1*-A{{A6*e3(?(E(IJ . )r'   r  )   r   )r   x   )      )rE   r}   r   )r   rk  r   rF  rg  r   s   ` @@@@r!   test_line_for_gapsDrawLineTest.test_line_for_gaps  sX     ~~ufov?		K 	K 	8,8,:.r'   )r8   rF  rE  N)	rR   rS   rT   rU   rV   r=  r^  rq  rX   rQ   r'   r!   r5  r5    s    Y\7|/r'   r5  c                       \ rS rSrSrS rS rS rS rS r	S r
S	 rS
 rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rSrg)
LinesMixini.  zXMixin test for drawing lines.

This class contains all the general lines drawing tests.
c                     U R                  [        R                  " S5      SSSS5      nU R                  U[        R                  5        g)z,Ensures draw lines accepts the correct args.ru   rw   Fr$   r   r   Nri   rE   r}   r~   rF   r   s     r!   test_lines__argsLinesMixin.test_lines__args4  s;    ooNN6"NE;KQ
 	k6;;7r'   c                     U R                  [        R                  " S5      SSS5      nU R                  U[        R                  5        g)z4Ensures draw lines accepts the args without a width.r   r  Frv  Nrw  r   s     r!   test_lines__args_without_width)LinesMixin.test_lines__args_without_width<  s9    ooNN6"M5:J
 	k6;;7r'   c                     [         R                  " S5      n[         R                  " S5      nSnUUSUSS.XSUS./nU H5  nU R                  " S	0 UD6nU R	                  U[         R
                  5        M7     g)
zLEnsures draw lines accepts the correct kwargs
with and without a width arg.
r   r   r$   r   r   Fr   r   r8   closedpointsr   r   r8   r  r  NrQ   )rE   r}   r   ri   r~   rF   r   r   r8   r  r   r   r9   s          r!   test_lines__kwargsLinesMixin.test_lines__kwargsD  s     ..(X&) #   5FS	
 "F//3F3K!!+v{{; "r'   c           	          U R                  SSSS[        R                  " S5      S9nU R                  U[        R                  5        g)z4Ensures draw lines's kwargs are not order dependent.r   r~  r{   r  rz   )r  r  r   r8   r   Nrw  r   s     r!   $test_lines__kwargs_order_independent/LinesMixin.test_lines__kwargs_order_independent[  sC    oo+NN6* & 
 	k6;;7r'   c                 \   [         R                  " S5      n[         R                  " S5      nU R                  [        5         U R                  XS5      nSSS5        U R                  [        5         U R                  X5      nSSS5        U R                  [        5         U R                  U5      nSSS5        U R                  [        5         U R                  5       nSSS5        g! , (       d  f       N= f! , (       d  f       N}= f! , (       d  f       N_= f! , (       d  f       g= f)z5Ensures draw lines detects any missing required args.r   r   r   NrE   r}   r   r   r   ri   r  s       r!   test_lines__args_missing#LinesMixin.test_lines__args_missingg  s    ..(V$y)//'!<K * y)//'9K * y)//'2K * y)//+K *) *) *) *) *)r  c                 2   [         R                  " S5      [         R                  " S5      SSSS.nS HO  n[        U5      nUR	                  U5        U R                  [        5         U R                  " S0 UD6nSSS5        MQ     g! , (       d  f       Mc  = f)	z7Ensures draw lines detects any missing required kwargs.rz   r   r   r   r   r  r  r  r8   r   NrQ   )rE   r}   r   r   r   r   r   ri   r   s        r!   test_lines__kwargs_missing%LinesMixin.test_lines__kwargs_missingx  s     ~~f-\\%(&
 =D!&\Nt$""9-"oo?? .-	 = .-r  c                    [         R                  " S5      n[         R                  " S5      nSnSnU R                  [        5         U R                  XX4S5      nSSS5        U R                  [        5         U R                  XUS5      nSSS5        U R                  [        5         U R                  X[        5       U5      nSSS5        U R                  [        5         U R                  USX45      nSSS5        U R                  [        5         U R                  S	X#U5      nSSS5        g! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       Ns= f! , (       d  f       g= f)
z-Ensures draw lines detects invalid arg types.r   r   r   r   r   r   Nr   r   r  )rE   r}   r   r   r   ri   rO   r   r   r8   r  r  r9   s         r!   test_lines__arg_invalid_types(LinesMixin.test_lines__arg_invalid_types  s   ..(V$!y)//'&#NK * y)//'&)LK * y)//'+-PK * y)//'3GK * y)//,vNK *)! *) *) *) *) *)<   D/7E (E!E"E3/
D= 
E
E"
E03
Fc                 X   [         R                  " S5      [         R                  " S5      SSSS.n[         R                  S[        5       SS	S.nS HD  n[	        U5      nX#   XC'   U R                  [        5         U R                  " S0 UD6nS
S
S
5        MF     g
! , (       d  f       MX  = f)z/Ensures draw lines detects invalid kwarg types.ru   r	   Fr  r   r  r   r   r  NrQ   )rE   r}   r   rO   r   r   r   ri   r   valid_kwargsr   kwargr   r9   s         r!   test_lines__kwarg_invalid_types*LinesMixin.test_lines__kwarg_invalid_types  s     ~~f-\\'*&
 ~~!m
 GE,'F*1FM""9-"oo77 .-	 G .-s   :B
B)	c                    [         R                  " S5      n[         R                  " S5      nSnSnUUUUSSS.UUUUSS./nU H3  nU R                  [        5         U R
                  " S0 UD6nSSS5        M5     g! , (       d  f       MG  = f)	z/Ensures draw lines detects invalid kwarg names.r   r   r   r  )r   r8   r  r  r   r   r   r8   r  r  r   NrQ   r  r   r   r8   r  r  r   r   r9   s           r!   test_lines__kwarg_invalid_name)LinesMixin.test_lines__kwarg_invalid_name  s    ..(V$! #   #  
$ "F""9-"oo77 .- "--r  c                    [         R                  " S5      nSnSnSnSnUUUUUS.nS H  nUR                  U5        SU:X  a  U R                  " U40 UD6nOeSU:X  a  U R                  " X40 UD6nOKS	U:X  a  U R                  " XU40 UD6nO0S
U:X  a  U R                  " XX440 UD6nOU R                  " XX4U40 UD6nU R	                  U[         R
                  5        M     g)z7Ensures draw lines accepts a combination of args/kwargsrz   r   r   r  r   r  r   r8   r  r  N)rE   r}   r   ri   r~   rF   )	r   r   r8   r  r  r   r   r   r9   s	            r!   test_lines__args_and_kwargs&LinesMixin.test_lines__args_and_kwargs  s    ..( !
 FDJJtD "oog@@D"oogGGT!"oogfOOT!"oogfWPVW"ooFE=C !!+v{{;! Fr'   c                    [         R                  " S5      n[         R                  " S5      n[         R                  " S5      nSnUUSUS4SS.nS	 Hu  nUR                  U5        XeS
'   US:  a  UOUnU R                  " S0 UD6nU R                  UR                  U5      U5        U R                  U[         R                  5        Mw     g)z2Ensures draw lines accepts different width values.r   r   r   r   Fr   Nr  r  r   r   rQ   	rE   r   r}   r   ri   r   r   r~   rF   r  s	            r!   test_lines__valid_width_values)LinesMixin.test_lines__valid_width_values  s    \\(+
W-..(Fm
 4ELL'#7O+019Z-N//3F3KW^^C0.A!!+v{{; 4r'   c           	         Sn[         R                  " S5      n[         R                  " S5      nUUSSSS.n[        [        [        [        4[        [        [        [        4[
        [
        [
        [
        4[        [
        [        [
        44nSn[        [        4nU H  nU H  n	U	S	   n
[        U	5       VVs/ s H  u  pX   " U5      PM     nnnU Hr  nUR                  U5        U" U5      US
'   U R                  " S0 UD6nU R                  UR                  U
5      U5        U R                  U[         R                  5        Mt     M     M     gs  snnf )z4Ensures draw lines accepts different points formats.r   r   r   FNr   r  r   r   r   r   )r   )皙@r    @r  )r   r  r   r  rQ   )rE   r   r}   r  r  r   	enumerater   ri   r   r   r~   rF   r   r   r   r   r   point_typespoint_values	seq_types
point_typevalues	check_posr  r  r  r  r9   s                   r!   test_lines__valid_points_format*LinesMixin.test_lines__valid_points_format  s.   *W-..(#
 E5%(4t$gw07E7+	

 DM	%J&"1I	9B69JK9J*-+9JK )HLL/'/'7F8$"&//";F";K$$W^^I%>O))+v{{C !*	 ' & Ls   8E
c           	      0   [         R                  " S5      [         R                  " S5      SSSS.nSSS	S
SS14S
SSS.4S
S1SSS.4nU H7  nX1S'   U R                  [        5         U R
                  " S0 UD6nSSS5        M9     g! , (       d  f       MK  = f)z<Ensures draw lines handles invalid points formats correctly.r   r   FNr   r  r   r  r   r{   r{   r{   r   r{   2r   r{   rv   r   r   r   r   r   r  rQ   r  r   r   points_fmtsr  r9   s        r!   "test_lines__invalid_points_formats-LinesMixin.test_lines__invalid_points_formats>  s     ~~f-\\%(
 aVq\"VaL
 "F%8""9-"oo77 .- " .-   &B
B	c                 :   [         R                  " S5      [         R                  " S5      SSSS.n/ S4 HQ  n[        [        4 H>  nU" U5      US'   U R                  [        5         U R                  " S	0 UD6nSSS5        M@     MS     g! , (       d  f       MV  = f)
z;Ensures draw lines handles invalid points values correctly.r   r   FNr   r  r   r  rQ   )rE   r}   r   r  r  r   
ValueErrorri   r   r   r  r  r9   s        r!   !test_lines__invalid_points_values,LinesMixin.test_lines__invalid_points_valuesX  s     ~~f-\\%(
 9oF"DM#+F#3x &&z2"&//";F";K 32 * & 32s   'B
Bc                    [         R                  " S5      n[         R                  " S5      n[         R                  " S5      nSnUUSSSS.nS	SS
SSSS/S4nSSSS/ S4nXg-    Hv  nUR                  U5        XS'   U(       a  UOUn	U R                  " S0 UD6n
U R                  UR                  U5      U	5        U R                  U
[         R                  5        Mx     g)z3Ensures draw lines accepts different closed values.r   r   r   r   N)r   r   ru   r   r   r  rx   r  @r   r   T r   rQ   Fr  r  r   r  r   r   r/   r   true_valuesfalse_valuesr  r   r9   s              r!   test_lines__valid_closed_values*LinesMixin.test_lines__valid_closed_valuesi  s    \\&)
W-..(6
 1b#sD1#t<b!RU3!0FLL'%8+1Z}N//3F3KW^^C0.A!!+v{{; 1r'   c                    [         R                  " S5      n[         R                  " S5      n[         R                  " S5      nSnUSSUS4SS	.nS
SUR                  U5      U4nU H  nUR	                  U5        XuS'   [        U[        5      (       a  UR                  U5      nOUnU R                  " S0 UD6n	U R                  UR                  U5      U5        U R                  U	[         R                  5        M     g)z3Ensures draw lines accepts different color formats.r	   r   r   r   NFr   rv   r  r   r   r8   rQ   )rE   r   r}   r   r   r   r   r   ri   r   r   r~   rF   r  s
             r!   test_lines__valid_color_formats*LinesMixin.test_lines__valid_color_formats  s    ll7+W-..(Fm
 OOK(	
 ELL'#7O%%%!(!2!25!9!,//3F3KW^^C0.A!!+v{{; r'   c                     [         R                  " S5      SSSSS.nSU 4 H7  nX!S'   U R                  [        5         U R                  " S	0 UD6nSSS5        M9     g! , (       d  f       MK  = f)
z;Ensures draw lines handles invalid color formats correctly.r   NFr   r   r   r  r   r8   rQ   )rE   r}   r   r   ri   r  s       r!   !test_lines__invalid_color_formats,LinesMixin.test_lines__invalid_color_formats  sj     ~~f-&
  #DkN,7O""9-"oo77 .- * .-r  c           
          U R                  5        H[  nU R                   HH  nU R                  XS[        U5      5        [	        U5       H  u  p4U R                  XBSU 35        M     MJ     M]     g)zTests if the lines drawn are the correct color.

Draws lines around the border of the given surface and checks if all
borders of the surface only contain the given color.
Tr  N)r  r  ri   r&   r0   r   r   r   r   r/   r8   s        r!   test_lines__colorLinesMixin.test_lines__color  sb     ,,.G"&++ww?OP"6w"?JC$$Ud3%LI #@ #. /r'   c                     S=pU R                  5        H  nUR                  5       S-
  nUR                  5       S-
  nX4XB4XE4X44nU R                   H  nU R	                  X7SUS5        S H  n[        XS-   5       H8  n	X%4 H.  n
XU-   4nU R                  UR                  U5      USU 35        M0     M:     [        X%S-   5       H8  n
X4 H.  n	X-   U
4nU R                  UR                  U5      USU 35        M0     M:     M     M     M     g)z6Ensures thick lines are drawn using the correct color.r   Trv   r,   r   r   r   r  N)r  r2   r3   r  ri   r   r   r   )r   x_lefty_topr   x_righty_bottom	endpointsr   tr   r   r/   s               r!    test_lines__color_with_thickness+LinesMixin.test_lines__color_with_thickness  s1   ,,.G'')A-G))+a/H #"	I #'++y!L#A"6Q;7"'!2A#$!e*C ,, 's 3 ."&se "3 8 #5Q,7"(!2A#$5!*C ,, 's 3 ."&se "3 8 $ #. /r'   c           	          SnU R                  5        HH  nU R                  X!S[        U5      5        [        U5       H  u  p4U R	                  XASU 35        M     MJ     g)zTests if the lines drawn contain any gaps.

Draws lines around the border of the given surface and checks if
all borders of the surface contain any gaps.
r  Tr  N)r  ri   r&   r0   r   r   r   r   r/   r8   s        r!   test_lines__gapsLinesMixin.test_lines__gaps  sX     ),,.GOOGT77;KL27;
  $seE < /r'   c           	      J   SnS=p#U R                  5        GH	  nUR                  5       S-
  S-  nUS-  nX&-   nX5-   nX#4Xs4Xx44n	U R                  XASU	S5        [        X'S-   5       Hk  n
S Hb  nXU-   4nU R	                  UR                  U5      USU 35        XU-   U
S-
  S-  -   4nU R	                  UR                  U5      USU 35        Md     Mm     [        X8S-   5       H7  nS H.  nX{-   U4nU R	                  UR                  U5      USU 35        M0     M9     GM     g	)
z/Ensures thick lines are drawn without any gaps.r  r   r  Trv   r   r  r  N)r  r2   ri   r   r   r   )r   r   r  r  r   r   r   r  r  r  r   r  r/   r   s                 r!   test_lines__gaps_with_thickness*LinesMixin.test_lines__gaps_with_thickness  sL   (,,.G""$r)a/AAAjGyH 7*:W<OPIOOGT9aH6Q;/#Aai.C$$W^^C%8.DQTPU,WaiAEa<89C$$W^^C%8.DQTPU,W	 $ 0 5Q,/#A";*C$$W^^C%8.DQTPU,W $ 0 /r'   c                    [         R                  " S5      n[         R                  " S5      nS=p4[         R                  " SX445      nUS-   US-   4US-
  US-
  44 H  n[         R                  " USS5      nUR	                  5       n[        U5       H  n	Xl        UR                  UR                  UR                  4n
U
S   n	[        SS5       Hk  nS	 Hb  nUR                  U5        U R                  XqXU5      nSU:  a  [        XrU	5      nO[         R                  " U	S5      nU R                  X5        Md     Mm     M     M     g
)zEnsures draw lines returns the correct bounding rect.

Tests lines with endpoints on and off the surface and a range of
width/thickness values.
r   r   r   r$   r   r   rv  r,   TFN)rE   r   rF   r}   r!  r*   r   r   r   r   r   r   ri   rM   r   )r   r  rG   r   r   r  rB   r   r~  r/   r=   r%  r  r  r  s                  r!   test_lines__bounding_rect$LinesMixin.test_lines__bounding_rect	  s9    \\%(
\\'*
;;v7 ai!,uqy&1*.EFDnnT1b1G((*I 4I>"%''(:K:KL!f "'r1I"/Z0(,#i) y= -A 'S-M
 -3KKV,DM((F# #0 ". ? Gr'   c           
        ^ S=nm[         R                  " S5      n[         R                  " S5      n[         R                  " UT45      nUR                  U5        [         R                  " SS5      nUR                  5       R                  Ul        UR                  5       n[        U5       GH  nXvl        UR                  UR                  UR                  4nS H  n	S H  n
UR                  S5        UR                  U5        U R                  XBXU
5        [        XBU5      nUR                  U5        UR                  U5        U R                  XBXU
5        UR                  5         U4S	 j[        U5       5        H.  nX;   a  UnOUnU R!                  UR#                  U5      X5        M0     UR%                  5         M     M     GM     g)
z2Ensures draw lines respects a surface's clip area.r   r   r	   r$   r  r  r   Nc              3   P   >#    U  H  n[        T5        H  o!U4v   M
     M     g 7fr=  r>  r  s      r!   rA  6LinesMixin.test_lines__surface_clip.<locals>.<genexpr>]	  s     R|!U5\1v\v|rC  )rE   r   r}   r   rF   r!  r   rL  r*   r   r   r  ri   r>   r6   r   r   r   r7   )r   r  r  r   r   r  r  r   r=   r  r%  r  r  r   r  s                 @r!   test_lines__surface_clip#LinesMixin.test_lines__surface_clip7	  sw   \\%(
W-..%0]#KK1	"++-44	>># 39=F$O??HOOX5G5GHC'!'I $$T*LL/OOGiP#3G#SL LL/$$Y/OOGiPLLN SuU|R--7N-:N(();^P S NN$7 "( (	 >r'   rQ   N)rR   rS   rT   rU   rV   rx  r{  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rX   rQ   r'   r!   rt  rt  .  s    
88<.
8,"@"O68288<B<0*DX84<"<6 <D8 JBFX.-G^.%r'   rt  c                       \ rS rSrSrSrg)DrawLinesTestir	  zTest draw module function lines.

This class inherits the general tests from LinesMixin. It is also the class
to add any draw.lines specific tests to.
rQ   Nr  rQ   r'   r!   r  r  r	  r  r'   r  c                       \ rS rSrSrS rS rS rS rS r	S r
S	 rS
 rS rS rS rS rS rS rS rS rS rS rS rS rS rSrg)AALineMixini}	  zjMixin test for drawing a single aaline.

This class contains all the general single aaline drawing tests.
c                     U R                  [        R                  " S5      SSSS5      nU R                  U[        R                  5        g)z-Ensures draw aaline accepts the correct args.ru   rw   r$   r   r   Nrk   rE   r}   r~   rF   r   s     r!   test_aaline__argsAALineMixin.test_aaline__args	  s<    &&NN6"NFFA
 	k6;;7r'   c                     U R                  [        R                  " S5      SSS5      nU R                  U[        R                  5        g)z5Ensures draw aaline accepts the args without a blend.r   r  r$   Nr  r   s     r!   test_aaline__args_without_blend+AALineMixin.test_aaline__args_without_blend	  s:    &&NN6"M66
 	k6;;7r'   c                 l   [         R                  " SS9 n[         R                  " S5        U R                  [        R
                  " S5      SSSS5        U R                  [        U5      S5        U R                  [        US	   R                  [        5      5        S
S
S
5        g
! , (       d  f       g
= f);From pygame 2, blend=False should raise DeprecationWarning.Trecordalwaysr   r  r$   Fr   r,   N)warningscatch_warningssimplefilterrk   rE   r}   r   rb  r  
issubclasscategoryDeprecationWarningr   r   s     r!   test_aaline__blend_warning&AALineMixin.test_aaline__blend_warning	  s    $$D1Q!!(+v&vvu SVQ'OOJqu~~7IJK 211   BB%%
B3c                     [         R                  " S5      n[         R                  " S5      nSnSnUUUUS./nU H5  nU R                  " S0 UD6nU R	                  U[         R
                  5        M7     g)z.Ensures draw aaline accepts the correct kwargsr   r   r   r   r  NrQ   )rE   r}   r   rk   r~   rF   r  s           r!   test_aaline__kwargsAALineMixin.test_aaline__kwargs	  su    ..(X&	 #&"	
 "F**4V4K!!+v{{; "r'   c                     U R                  SSS[        R                  " S5      S9nU R                  U[        R                  5        g)z5Ensures draw aaline's kwargs are not order dependent.r   r   r  rz   )r  r  r8   r   Nr  r   s     r!   %test_aaline__kwargs_order_independent1AALineMixin.test_aaline__kwargs_order_independent	  sB    &&NN6*	 ' 
 	k6;;7r'   c                 \   [         R                  " S5      n[         R                  " S5      nU R                  [        5         U R                  XS5      nSSS5        U R                  [        5         U R                  X5      nSSS5        U R                  [        5         U R                  U5      nSSS5        U R                  [        5         U R                  5       nSSS5        g! , (       d  f       N= f! , (       d  f       N}= f! , (       d  f       N_= f! , (       d  f       g= f)z6Ensures draw aaline detects any missing required args.r   r   r$   NrE   r}   r   r   r   rk   r  s       r!   test_aaline__args_missing%AALineMixin.test_aaline__args_missing	      ..(V$y)**76BK * y)**7:K * y)**73K * y)**,K *) *) *) *) *)r  c                 0   [         R                  " S5      [         R                  " S5      SSS.nS HO  n[        U5      nUR	                  U5        U R                  [        5         U R                  " S0 UD6nSSS5        MQ     g! , (       d  f       Mc  = f)	z8Ensures draw aaline detects any missing required kwargs.rz   r   r   r   r  r  NrQ   )rE   r}   r   r   r   r   r   rk   r   s        r!   test_aaline__kwargs_missing'AALineMixin.test_aaline__kwargs_missing	  s     ~~f-\\%(	
 AD!&\Nt$""9-"..@@ .-	 A .-r  c                 t   [         R                  " S5      n[         R                  " S5      nSnSnU R                  [        5         U R                  XUS5      nSSS5        U R                  [        5         U R                  XSU5      nSSS5        U R                  [        5         U R                  USX45      nSSS5        U R                  [        5         U R                  S	X#U5      nSSS5        g! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       Nb= f! , (       d  f       g= f)
z.Ensures draw aaline detects invalid arg types.r   r   r   r   r   Nr  zinvalid-colorr  )rE   r}   r   r   r   rk   r  r  s         r!   test_aaline__arg_invalid_types*AALineMixin.test_aaline__arg_invalid_types	  s    ..(V$	y)**79iPK * y)**74IK * z***7OYXK + y)**<7SK *) *) *) +* *)s0   C67D(DD)6
D
D
D&)
D7c                 J   [         R                  " S5      n[         R                  " S5      nSnSn[         R                  UUUS.USUUS.UUSUS.UUUSS./nU H3  nU R                  [        5         U R
                  " S
0 UD6nS	S	S	5        M5     g	! , (       d  f       MG  = f)z0Ensures draw aaline detects invalid kwarg types.ru   r	   r   r  r  r   r   r  NrQ   r  r  s           r!    test_aaline__kwarg_invalid_types,AALineMixin.test_aaline__kwarg_invalid_types	  s    ..(W%	 ">>&"	 #&"	 #&"	 #&	'
6 "F""9-"..88 .- "--s   3B
B"	c                    [         R                  " S5      n[         R                  " S5      nSnSnUUUUSS.UUUUSS./nU H3  nU R                  [        5         U R
                  " S0 UD6nSSS5        M5     g! , (       d  f       MG  = f)	z0Ensures draw aaline detects invalid kwarg names.r   r   r   r  r   r  NrQ   r  r  s           r!   test_aaline__kwarg_invalid_name+AALineMixin.test_aaline__kwarg_invalid_name
  s    ..(V$	 #&" #&"
" "F""9-"..88 .- "--   A;;
B
	c                    [         R                  " S5      nSnSnSnUUUUS.nS H  nUR                  U5        SU:X  a  U R                  " U40 UD6nOdSU:X  a  U R                  " X40 UD6nOJSU:X  a  U R                  " XU40 UD6nO/S	U:X  a  U R                  " XX440 UD6nOU R                  " XX440 UD6nU R	                  U[         R
                  5        M     g
)z8Ensures draw aaline accepts a combination of args/kwargsrz   r   r   r   r  r   r8   r  r  N)rE   r}   r   rk   r~   rF   )r   r   r8   r  r  r   r   r9   s           r!   test_aaline__args_and_kwargs(AALineMixin.test_aaline__args_and_kwargs7
  s    ..( 	"	
 ADJJtD "..wA&AD"..wHH$"..wySFSd""..I:@ #..I:@ !!+v{{;% Ar'   c                 (   [         R                  " S5      n[         R                  " S5      n[         R                  " S5      nUUSSS.nSu  pVXV4US-   U4XVS-   4US-   US-   44nU H  n[        [        [
        4 H  n	UR                  U5        U	" U5      US	'   U R                  " S0 UD6n
UR                  XV45      n[        U5       H  u  pU R                  X   S
-   X5        M     U R                  U
[         R                  U5        M     M     g)z8Ensures draw aaline accepts different start_pos formats.r   r   r   Nr   r  r   g{Gz?r  rK  rQ   rE   r   r}   r  r  r   r   rk   r   r  assertGreaterEqualr~   rF   )r   r   r   r   r   r   r   rV  r  r  r9   r8   r  	sub_colors                 r!   $test_aaline__valid_start_pos_formats0AALineMixin.test_aaline__valid_start_pos_formatsX
  s   e,W-..(#	
 Va$h]QDMAHa$h;OP	"I"D'2]+&.y&9{#"..88v.$-n$=LA ++EHqL)O %> %%k6;;	J 3 #r'   c                 (   [         R                  " S5      n[         R                  " S5      n[         R                  " S5      nUUSSS.nSu  pVXV4US-   U4XVS-   4US-   US-   44nU H  n[        [        [
        4 H  n	UR                  U5        U	" U5      US	'   U R                  " S0 UD6n
UR                  XV45      n[        U5       H  u  pU R                  X   S
-   X5        M     U R                  U
[         R                  U5        M     M     g)z6Ensures draw aaline accepts different end_pos formats.r   r   r   r   Nr  r   g{Gz?r     rQ   r2  )r   r   r   r   r   r   r   rV  r  r  r9   r8   r  r4  s                 r!   "test_aaline__valid_end_pos_formats.AALineMixin.test_aaline__valid_end_pos_formatst
  s   e,W-..(#	
 Va$h]QDMAHa$h;OP	 G"D'2]+$,W$5y!"..88v.$-n$=LA ++EHrM9N %> %%k6;;H 3 !r'   c                    [         R                  " S5      [         R                  " S5      SSS.nSSSS	S
1S	S
04nU H7  nX1S'   U R                  [        5         U R
                  " S0 UD6nSSS5        M9     g! , (       d  f       MK  = f)z@Ensures draw aaline handles invalid start_pos formats correctly.r   r   Nr   r  r  r  r  r{   r   r  rQ   r  r  s        r!   &test_aaline__invalid_start_pos_formats2AALineMixin.test_aaline__invalid_start_pos_formats
  s     ~~f-\\%(	
 FF
 (I"+;""9-"..88 .- ( .-   A99
B	c                    [         R                  " S5      [         R                  " S5      SSS.nSSSS	S
1S	S
04nU H7  nX1S'   U R                  [        5         U R
                  " S0 UD6nSSS5        M9     g! , (       d  f       MK  = f)z>Ensures draw aaline handles invalid end_pos formats correctly.r   r   r   Nr  r  r  r  r{   r   r  rQ   r  r  s        r!   $test_aaline__invalid_end_pos_formats0AALineMixin.test_aaline__invalid_end_pos_formats
  s     ~~f-\\%(	
 FF
 $G '9""9-"..88 .- $ .-r>  c                    [         R                  " S5      n[         R                  " S5      n[         R                  " S5      nSnUSUSS.nSS	UR                  U5      U4nU H  nUR	                  U5        XuS
'   [        U[        5      (       a  UR                  U5      nOUnU R                  " S0 UD6n	U R                  UR                  U5      U5        U R                  U	[         R                  5        M     g)z4Ensures draw aaline accepts different color formats.r	   r   r   r   Nr   r  r   r   r8   rQ   )rE   r   r}   r   r   r   r   r   rk   r   r   r~   rF   r  s
             r!    test_aaline__valid_color_formats,AALineMixin.test_aaline__valid_color_formats
  s    ll7+W-..(	
 OOK(	
 ELL'#7O%%%!(!2!25!9!,**4V4KW^^C0.A!!+v{{; r'   c                     [         R                  " S5      SSSS.nSU 4 H7  nX!S'   U R                  [        5         U R                  " S0 UD6nSSS5        M9     g! , (       d  f       MK  = f)	z<Ensures draw aaline handles invalid color formats correctly.r   Nr   r   r  r   r8   rQ   )rE   r}   r   r   rk   r  s       r!   "test_aaline__invalid_color_formats.AALineMixin.test_aaline__invalid_color_formats
  si     ~~f-	
  #DkN,7O""9-"..88 .- * .-   A
A+	c                     SnU R                  5        HN  nU R                   H;  nU R                  X#US5        U R                  UR	                  U5      USU 35        M=     MP     g)z/Tests if the aaline drawn is the correct color.r$   r   r  N)r  r  rk   r   r   r  s       r!   test_aaline__colorAALineMixin.test_aaline__color
  s[    ,,.G"&++  #vF  !4nSElS #. /r'   c                     SnU R                  5        Hf  nUR                  5       nU R                  X!SUS-
  S45        [        U5       H,  nUS4nU R	                  UR                  U5      USU 35        M.     Mh     g)z8Tests if the aaline drawn contains any gaps.

See: #512
r  r$   r   r   r  N)r  r2   rk   r   r   r   r   s         r!   test_aaline__gapsAALineMixin.test_aaline__gaps
  s|    
 ),,.G%%'EWfuqy!nM5\!f  !4nSElS "	 /r'   c           	         [         R                  " S5      n[         R                  " S5      nS=p4[         R                  " SX445      nUS-   US-   4US-
  US-
  44 H  n[         R                  " USS5      nUR	                  5       n[        U5       Hc  n	Xl        U R                  U5       HE  u  pUR                  U5        U R                  XqX5      n[        XrU
5      nU R                  X5        MG     Me     M     g)	zkEnsures draw aaline returns the correct bounding rect.

Tests lines with endpoints on and off the surface.
r   r   r   r$   r   r   rv  N)rE   r   rF   r}   r!  r*   r   r  r   rk   rM   r   )r   r  rG   r   r   r*  rB   r   r~  r/   r+  r,  r  r  s                 r!   test_aaline__bounding_rect&AALineMixin.test_aaline__bounding_rect  s    
 \\%(
\\&)
kk&5/: ai!,uqy&1*.EFDnnT1b1G((*I 4I>%(""&"2"2;"?JELL,$($4$4W%$UM %9e$TM$$]B #@ ? Gr'   c                   ^
 S=nm
[         R                  " S5      n[         R                  " S5      n[         R                  " UT
45      nUR                  U5        [         R                  " SS5      nUR                  5       R                  Ul        UR                  5       n[        U5       GH.  nXvl        UR                  S5        UR                  U5        U R                  XBUR                  UR                  5        [        XCUS5      nUR                  U5        UR                  U5        U R                  XBUR                  UR                  5        UR                  5         U
4S j[        U5       5        HL  n	X;   a#  U R!                  UR#                  U	5      X95        M+  U R%                  UR#                  U	5      X95        MN     UR'                  5         GM1     g)	z3Ensures draw aaline respects a surface's clip area.r   r   r	   r$   r  NFc              3   P   >#    U  H  n[        T5        H  o!U4v   M
     M     g 7fr=  r>  r  s      r!   rA  8AALineMixin.test_aaline__surface_clip.<locals>.<genexpr>J  s     J|!U5\1v\v|rC  )rE   r   r}   r   rF   r!  r   rL  r*   r  rk   r   r   r>   r6   r   rI  r   r   r7   )r   r  aaline_colorr   r   r  r  r   r  r  r  s             @r!   test_aaline__surface_clip%AALineMixin.test_aaline__surface_clip&  sr   ||E*W-..%0]#KK1	"++-44	>># 39=F$O T"LL'WHOOXEWEWX+GIuUL LL'Y'WHOOXEWEWXLLN KuU|J%''r(:MN$$W^^B%7K	 K NN9 >r'   rQ   N)rR   rS   rT   rU   rV   r  r  r  r  r  r  r"  r%  r(  r+  r/  r5  r9  r<  r@  rC  rF  rJ  rM  rP  rV  rX   rQ   r'   r!   r  r  }	  s|    
88L<(	8-"A T.#9J96<BK8I89.9.<B9TTCB*r'   r  c                   B    \ rS rSrSrS r SS jrS rS rS r	S r
S	rg
)DrawAALineTesti]  zTest draw module function aaline.

This class inherits the general tests from AALineMixin. It is also the
class to add any draw.aaline specific tests to.
c           	      B   S GH  n[         R                  " SSU5      nUR                  [         R                  " SSS5      5        U R	                  U[         R                  " SSS5      SSS5        U R                  UR                  S5      R                  SS	5        UR                  [         R                  " SSS5      5        U R	                  U[         R                  " SSS5      SSS5        U R                  UR                  S5      R                  SS
5        GM     gr7  )	rE   r}   r   r   rk   r9  r   r:  r;  r<  s      r!   test_aaline_endianness%DrawAALineTest.test_aaline_endiannessd  s    EnnVQ6GLLaA./Wfll31&=vvqQw~~f577<VWLLaA./Wfll1a&=vvqQw~~f577<WX r'   c                 l   ^ ^ U(       a  [         =X1'   X2'   UU 4S jnU" XU5        X:w  a
  U" X!U5        gg)z@Draw a line between two points and check colors of check_points.c                   > TR                  TR                  [        XS5        T H]  nUR                  U[        5      nTR                  XUS9   TR                  TR                  R                  U5      U5        S S S 5        M_     [        R                  " TR                  [        SS5        g ! , (       d  f       M  = f)NT)from_ptr  tor   r   rx   rx   r   )
rk   r   FG_GREENgetBG_REDsubTestr   r   r   r)   )
from_pointto_pointshouldr  r8   check_pointsr   s        r!   check_one_direction?DrawAALineTest._check_antialiasing.<locals>.check_one_directiony  s    T\\8Z4P"

2v.\\*\I$$T\\%8%8%<eD JI # IIdllFNA>	 JIs   ,B//
B>	N)rb  )r   rf  rg  rh  ri  set_endpointsrj  s   `   `  r!   _check_antialiasing"DrawAALineTest._check_antialiasingr  s>     4<<F!1		? 	J&9!f= "r'   c                   ^ ^ [         R                  " S5      T l        [        R                  " T R                  [
        SS5        [        SS5       VVs/ s H  n[        SS5        H  o!U4PM     M     snnmUU 4S jnU" SS/ 5        U" SS	/ 5        U" S
SS/5        U" SS/ 5        U" SSS/5        U" SS/ 5        U" SSS/5        U" SS/ 5        U" SSS/5        gs  snnf )z9test very short not anti aliased lines in all directions.rl  ra  r   rv   r  c                 b   > U Vs0 s H	  o3[         _M     nnTR                  XUT5        g s  snf r=  )rb  rm  )r_  to_ptother_pointsr  rh  ri  r   s        r!   check_both_directionsNDrawAALineTest.test_short_non_antialiased_lines.<locals>.check_both_directions  s0    -9:\r(l\F:$$WV\J ;s   ,r  r   rt  r   rt  r   rt  r   rK  r   r   rK  rK  rK  rK  r   )rt  rt  r   rK  NrE   r}   r   r   r)   rd  r   )r   r  jrs  ri  s   `   @r!    test_short_non_antialiased_lines/DrawAALineTest.test_short_non_antialiased_lines  s    
 ~~h/		$,,:(-aI1U1a[A[I	K
 	ffb1ffb1ffvh7 	ffb1ffvh7ffb1ffvh7ffb1ffvh7' Js   !Cc                   ^ ^ [         R                  " S5      T l        [        R                  " T R                  [
        SS5        [        SS5       VVs/ s H  n[        SS5        H  o!U4PM     M     snnmUU 4S jnSnSnS	nU" S
SXDS.5        U" SSXDS.5        U" S
SXDS.5        U" SSXDS.5        [        SS5       VVs/ s H  n[        SS5        H  o!U4PM     M     snnmUUUUUUS.nU" SSU5        UUUUUUS.nU" SSU5        UUUUUUS.nU" SSU5        UUUUUUS.nU" SSU5        g s  snnf s  snnf )Nrl  ra  r   rv   r  c                 ,   > TR                  XUT5        g r=  )rm  )r_  rq  rh  ri  r   s      r!   rs  KDrawAALineTest.test_short_line_anti_aliasing.<locals>.check_both_directions  s    $$WV\Jr'      r  r      ?   r   r  r  r   r   r{  )r   r  r  rx  ry  )r  r  r   r|  r{   	   r   r8  )rK  rv   r   r   rx  ru   rw  r   rt  rv   )r   r  r|  r   r  ry  r   rv  r8  ru  r}  )	r   r  r~  rs  brownreddishgreenishrh  ri  s	   `       @r!   test_short_line_anti_aliasing,DrawAALineTest.test_short_line_anti_aliasing  s   ~~h/		$,,:(-aI1U1a[A[I	K 
 	ffu.LMffu.LM 	ffu.LMffu.LM ).aI1U1a[A[I 
 	fff5 
 	fff5 
 	fff5 
 	fff5{ J( Js   !D7!D=c                 z   [         R                  " S5      U l        [        R                  " U R                  [
        SS5        [        S5       VVs/ s H  n[        S5        H  o!U4PM     M     nnnSnSnSnS[        0nU R                  S	S	XsS
S9  S[        0nU R                  SSXsS
S9  U[        S.nU R                  S	SXsS
S9  U[        US.nU R                  S	SXsS
S9  U[        S.nU R                  SS	XsS
S9  XFS.nU R                  S	SXsS
S9  [        SS5       VV	s0 s H  nS  H  oU	4U_M	     M     nnn	U R                  SSXsS
S9  U[        US.nU R                  SSXsS
S9  XFS.nU R                  SSXsS
S9  S VV	s0 s H  n[        SS5        H  oU	4U_M	     M     nnn	U R                  S	SXsS
S9  U[        US.nU R                  SSXsS
S9  U[        US.nU R                  S S!XsS
S9  XDXDS".nU R                  SS#XsS
S9  UUUUUUS$.nU R                  S%S&XsS
S9  g's  snnf s  sn	nf s  sn	nf )(z-Float coordinates should be blended smoothly.rl  ra  r   r   r  r  r  r   )      ?r{   F)rl  r   )gQ@g@)r   r   )r   r   rz   )      @r{   )r   r   r   )      ?r{   r{   )r{   r  )r   r  r   r   r   )r{   r  )r   r   )r{   r  )r  r   )r   r   ru   r  r  )r  r  )r   r   r   )r  r  )r  r  )r   r   rz   ru   )rv   r  )r   r   rz   ru   r   r   )r{   g      ?)r   g      
@N)	rE   r}   r   r   r)   rd  r   rb  rm  )
r   r  r~  ri  r  r  r  expectedr   r   s
             r!   $test_anti_aliasing_float_coordinates3DrawAALineTest.test_anti_aliasing_float_coordinates  s    ~~h/		$,,:(-aC1%(QA(C H%  he 	! 	
 H%  hE 	! 	
 "84  fhE 	! 	
 "8UC  he 	! 	
 "84  HhE 	! 	
 "4  iu 	! 	

 ,1A;G;a1FEMF;G  he 	! 	
 "8UC  he 	! 	
 "4  iu 	! 	
 ,2G6a5A;aFEM;F6G  he 	! 	

 "8UC  
H% 	! 	
 "8UC  
H% 	! 	
 "%O  he 	! 	

 
 	  y( 	! 	
a DF H  Hs    H+%H1	"H7c           	         [         R                  " S5      U l        [        R                  " U R                  [
        SS5        [        S5       VVs/ s H  n[        S5        H  o!U4PM     M     nnnSnSnSnSu  pxUUUUUUS	.n	S
 Hh  u  pUS   U
-   US   U-   4nUS   U
-   US   U-   4nU	R                  5        VVVs0 s H  u  u  pnX-   X-   4U_M     nnnnU R                  XUU5        Mj     gs  snnf s  snnnf )z:Ensures antialiasing works correct at a surface's borders.rl  ra  r   rx   r  r  r  )ru   rw  r  ))r   )r   r   )r   )r   r  )r   r$  )r   rK  )r   rt  )r  r  )r  r  )r  r  r   N)	rE   r}   r   r   r)   rd  r   itemsrm  )r   r  r~  ri  r  r  r  rf  rg  rh  re  rf  firstsecondr   r   r8   r  s                     r!   ,test_anti_aliasing_at_and_outside_the_border;DrawAALineTest.test_anti_aliasing_at_and_outside_the_borderD  s    ~~h/		$,,:(-b	E	159aA9	E-


FB qMB&
1(::Ea[2%x{R'77FEK\\^T^MFQE(%/^HT$$UHlK#
 F< Us    C6C<
r   N)T)rR   rS   rT   rU   rV   r[  rm  r  r  r  r  rX   rQ   r'   r!   rY  rY  ]  s2    Y IM>08:A6FX
t&Lr'   rY  c                       \ rS rSrSrS rS rS rS rS r	S r
S	 rS
 rS rS rS rS rS rS rS rS rS rS rS rS rS rSrg)AALinesMixinip  z\Mixin test for drawing aalines.

This class contains all the general aalines drawing tests.
c                     U R                  [        R                  " S5      SSSS5      nU R                  U[        R                  5        g)z.Ensures draw aalines accepts the correct args.ru   rw   Frv  r   Nrm   rE   r}   r~   rF   r   s     r!   test_aalines__argsAALinesMixin.test_aalines__argsv  s=    ''NN6"NE;KQ
 	k6;;7r'   c                     U R                  [        R                  " S5      SSS5      nU R                  U[        R                  5        g)z6Ensures draw aalines accepts the args without a blend.r   r  Frv  Nr  r   s     r!    test_aalines__args_without_blend-AALinesMixin.test_aalines__args_without_blend~  s;    ''NN6"M5:J
 	k6;;7r'   c                 l   [         R                  " SS9 n[         R                  " S5        U R                  [        R
                  " S5      SSSS5        U R                  [        U5      S5        U R                  [        US	   R                  [        5      5        S
S
S
5        g
! , (       d  f       g
= f)r  Tr	  r  r   r  Frv  r   r,   N)r  r  r  rm   rE   r}   r   rb  r  r  r  r  r  s     r!   test_aalines__blend_warning(AALinesMixin.test_aalines__blend_warning  s    $$D1Q!!(+v&u>NPU SVQ'OOJqu~~7IJK 211r  c                     [         R                  " S5      n[         R                  " S5      nSnXSUS./nU H5  nU R                  " S0 UD6nU R	                  U[         R
                  5        M7     g)z0Ensures draw aalines accepts the correct kwargs.r   r   r~  Fr  NrQ   )rE   r}   r   rm   r~   rF   r  s          r!   test_aalines__kwargs!AALinesMixin.test_aalines__kwargs  sg    ..(X&)5FS
 "F++5f5K!!+v{{; "r'   c                     U R                  SSS[        R                  " S5      S9nU R                  U[        R                  5        g)z6Ensures draw aalines's kwargs are not order dependent.r   r~  r  rz   )r  r  r8   r   Nr  r   s     r!   &test_aalines__kwargs_order_independent3AALinesMixin.test_aalines__kwargs_order_independent  sB    ''+NN6*	 ( 
 	k6;;7r'   c                 \   [         R                  " S5      n[         R                  " S5      nU R                  [        5         U R                  XS5      nSSS5        U R                  [        5         U R                  X5      nSSS5        U R                  [        5         U R                  U5      nSSS5        U R                  [        5         U R                  5       nSSS5        g! , (       d  f       N= f! , (       d  f       N}= f! , (       d  f       N_= f! , (       d  f       g= f)z7Ensures draw aalines detects any missing required args.r   r   r   NrE   r}   r   r   r   rm   r  s       r!   test_aalines__args_missing'AALinesMixin.test_aalines__args_missing  s    ..(V$y)++GA>K * y)++G;K * y)++G4K * y)++-K *) *) *) *) *)r  c                 0   [         R                  " S5      [         R                  " S5      SSS.nS HO  n[        U5      nUR	                  U5        U R                  [        5         U R                  " S0 UD6nSSS5        MQ     g! , (       d  f       Mc  = f)	z9Ensures draw aalines detects any missing required kwargs.rz   r   r   r  r  r  NrQ   )rE   r}   r   r   r   r   r   rm   r   s        r!   test_aalines__kwargs_missing)AALinesMixin.test_aalines__kwargs_missing  s~     ~~f-\\%(&	
 =D!&\Nt$""9-"//A.A .-	 = .-r  c                    [         R                  " S5      n[         R                  " S5      nSnSnU R                  [        5         U R                  XX4S5      nSSS5        U R                  [        5         U R                  XUS5      nSSS5        U R                  [        5         U R                  X[        5       U5      nSSS5        U R                  [        5         U R                  USX45      nSSS5        U R                  [        5         U R                  S	X#U5      nSSS5        g! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       Ns= f! , (       d  f       g= f)
z/Ensures draw aalines detects invalid arg types.r   r   r   r  r   Nr   r   r  )rE   r}   r   r   r   rm   rO   r  s         r!   test_aalines__arg_invalid_types,AALinesMixin.test_aalines__arg_invalid_types  s%   ..(V$!y)++GFCPK * y)++GFINK * y)++GKM6RK * y)++GS&IK * y)++L%PK *)! *) *) *) *) *)r  c                 T   [         R                  " S5      [         R                  " S5      SSS.n[         R                  S[        5       SS.nS HD  n[	        U5      nX#   XC'   U R                  [        5         U R                  " S	0 UD6nSSS5        MF     g! , (       d  f       MX  = f)
z1Ensures draw aalines detects invalid kwarg types.ru   r	   Fr  r  r   r   NrQ   )rE   r}   r   rO   r   r   r   rm   r  s         r!   !test_aalines__kwarg_invalid_types.AALinesMixin.test_aalines__kwarg_invalid_types  s     ~~f-\\'*&	
 ~~!m	
 >E,'F*1FM""9-"//9&9 .-	 > .-s   8B
B'	c                    [         R                  " S5      n[         R                  " S5      nSnSnUUUUSS.UUUUSS./nU H3  nU R                  [        5         U R
                  " S0 UD6nSSS5        M5     g! , (       d  f       MG  = f)z1Ensures draw aalines detects invalid kwarg names.r   r   r   r  r  NrQ   r  r  s           r!    test_aalines__kwarg_invalid_name-AALinesMixin.test_aalines__kwarg_invalid_name  s    ..(V$! #   #  
" "F""9-"//9&9 .- "--r-  c                    [         R                  " S5      nSnSnSnUUUUS.nS H  nUR                  U5        SU:X  a  U R                  " U40 UD6nOdSU:X  a  U R                  " X40 UD6nOJSU:X  a  U R                  " XU40 UD6nO/S	U:X  a  U R                  " XX440 UD6nOU R                  " XX440 UD6nU R	                  U[         R
                  5        M     g
)z9Ensures draw aalines accepts a combination of args/kwargsrz   r   r   r  r  r   r8   r  r  N)rE   r}   r   rm   r~   rF   )r   r   r8   r  r  r   r   r9   s           r!   test_aalines__args_and_kwargs*AALinesMixin.test_aalines__args_and_kwargs  s    ..( !	
 =DJJtD "//B6BD"//I&IT!"//Q&QT!"//F6< #//F6< !!+v{{;% =r'   c           	         Sn[         R                  " S5      n[         R                  " S5      nUUSSS.n[        [        [        [        4[        [        [        [        4[
        [
        [
        [
        4[        [
        [        [
        44nSn[        [        4nU H  nU H  n	U	S   n
[        U	5       VVs/ s H  u  pX   " U5      PM     nnnU Hr  nUR                  U5        U" U5      US	'   U R                  " S
0 UD6nU R                  UR                  U
5      U5        U R                  U[         R                  5        Mt     M     M     gs  snnf )z6Ensures draw aalines accepts different points formats.r   r   r   FNr  r  r   r  rQ   )rE   r   r}   r  r  r   r  r   rm   r   r   r~   rF   r  s                   r!   !test_aalines__valid_points_format.AALinesMixin.test_aalines__valid_points_format;  s-   *W-..(#	
 E5%(4t$gw07E7+	

 DM	%J&"1I	9B69JK9J*-+9JK )HLL/'/'7F8$"&"3"3"=f"=K$$W^^I%>O))+v{{C !*	 ' & L   7E
c           	      .   [         R                  " S5      [         R                  " S5      SSS.nSSSS	S
S14S	S
SS.4S	S1SSS.4nU H7  nX1S'   U R                  [        5         U R
                  " S0 UD6nSSS5        M9     g! , (       d  f       MK  = f)z>Ensures draw aalines handles invalid points formats correctly.r   r   FNr  r  r  r  r   r{   rv   r   r   r   r   r  r  rQ   r  r  s        r!   $test_aalines__invalid_points_formats1AALinesMixin.test_aalines__invalid_points_formatsf  s     ~~f-\\%(	
 aVq\"VaL
 "F%8""9-"//9&9 .- " .-s   %B
B	c                 8   [         R                  " S5      [         R                  " S5      SSS.n/ S4 HQ  n[        [        4 H>  nU" U5      US'   U R                  [        5         U R                  " S0 UD6nSSS5        M@     MS     g! , (       d  f       MV  = f)	z=Ensures draw aalines handles invalid points values correctly.r   r   FNr  r  r  rQ   )rE   r}   r   r  r  r   r  rm   r  s        r!   #test_aalines__invalid_points_values0AALinesMixin.test_aalines__invalid_points_values  s     ~~f-\\%(	
 9oF"DM#+F#3x &&z2"&"3"3"=f"=K 32 * & 32   &B


Bc                    [         R                  " S5      n[         R                  " S5      n[         R                  " S5      nSnUUSSS.nSS	S
SSSS/S4nSSSS/ S4nXg-    Hv  nUR                  U5        XS'   U(       a  UOUn	U R                  " S0 UD6n
U R                  UR                  U5      U	5        U R                  U
[         R                  5        Mx     g)z5Ensures draw aalines accepts different closed values.r   r   r  r   N)r   )r   r   r   r  r  r  r   rx   r  r  r  r   Tr  r   rQ   Fr  )	rE   r   r}   r   rm   r   r   r~   rF   r  s              r!   !test_aalines__valid_closed_values.AALinesMixin.test_aalines__valid_closed_values  s    \\&)
W-..(6	
 1b#sD1#t<b!RU3!0FLL'%8+1Z}N++5f5KW^^C0.A!!+v{{; 1r'   c                    [         R                  " S5      n[         R                  " S5      n[         R                  " S5      nSnUSSUS4S.nS	S
UR                  U5      U4nU H  nUR	                  U5        XuS'   [        U[        5      (       a  UR                  U5      nOUnU R                  " S0 UD6n	U R                  UR                  U5      U5        U R                  U	[         R                  5        M     g)z5Ensures draw aalines accepts different color formats.r	   r   r   r   NFr   r  r   r   r8   rQ   )rE   r   r}   r   r   r   r   r   rm   r   r   r~   rF   r  s
             r!   !test_aalines__valid_color_formats.AALinesMixin.test_aalines__valid_color_formats  s    ll7+W-..(Fm	
 OOK(	
 ELL'#7O%%%!(!2!25!9!,++5f5KW^^C0.A!!+v{{; r'   c                     [         R                  " S5      SSSS.nSU 4 H7  nX!S'   U R                  [        5         U R                  " S0 UD6nSSS5        M9     g! , (       d  f       MK  = f)	z=Ensures draw aalines handles invalid color formats correctly.r   NFr  r  r   r8   rQ   )rE   r}   r   r   rm   r  s       r!   #test_aalines__invalid_color_formats0AALinesMixin.test_aalines__invalid_color_formats  si     ~~f-&	
  #DkN,7O""9-"//9&9 .- * .-rH  c           
          U R                  5        H[  nU R                   HH  nU R                  XS[        U5      5        [	        U5       H  u  p4U R                  XBSU 35        M     MJ     M]     g)zTests if the aalines drawn are the correct color.

Draws aalines around the border of the given surface and checks if all
borders of the surface only contain the given color.
Tr  N)r  r  rm   r&   r0   r   r  s        r!   test_aalines__color AALinesMixin.test_aalines__color  sd     ,,.G"&++!!'4AQR"6w"?JC$$Ud3%LI #@ #. /r'   c           	          SnU R                  5        HH  nU R                  X!S[        U5      5        [        U5       H  u  p4U R	                  XASU 35        M     MJ     g)zTests if the aalines drawn contain any gaps.

Draws aalines around the border of the given surface and checks if
all borders of the surface contain any gaps.

See: #512
r  Tr  N)r  rm   r&   r0   r   r  s        r!   test_aalines__gapsAALinesMixin.test_aalines__gaps  sZ     ),,.GgtWW=MN27;
  $seE < /r'   c           	      *   [         R                  " S5      n[         R                  " S5      nS=p4[         R                  " SX445      nUS-   US-   4US-
  US-
  44 H  n[         R                  " USS5      nUR	                  5       n[        U5       Hz  n	Xl        UR                  UR                  UR                  4n
U
S   n	S HC  nUR                  U5        U R                  XqX5      n[        XrU	5      nU R                  X5        ME     M|     M     g	)
zEnsures draw aalines returns the correct bounding rect.

Tests lines with endpoints on and off the surface and blending
enabled and disabled.
r   r   r   r$   r   r   rv  r  N)rE   r   rF   r}   r!  r*   r   r   r   r   r   rm   rM   r   )r   r  rG   r   r   r  rB   r   r~  r/   r=   r  r  r  s                 r!   test_aalines__bounding_rect(AALinesMixin.test_aalines__bounding_rect  s    \\%(
\\&)
;;v7 ai!,uqy&1*.EFDnnT1b1G((*I 4I>"%''(:K:KL!f+FLL,$($5$5g6$WM %9c$RM$$]B , ? Gr'   c                   ^ S=nm[         R                  " S5      n[         R                  " S5      n[         R                  " UT45      nUR                  U5        [         R                  " SS5      nUR                  5       R                  Ul        UR                  5       n[        U5       GH0  nXvl        UR                  UR                  UR                  4nS H  n	UR                  S5        UR                  U5        U R                  XBX5        [        XCUS5      n
UR                  U5        UR                  U5        U R                  XBX5        UR                  5         U4S	 j[        U5       5        HL  nX;   a#  U R!                  UR#                  U5      X;5        M+  U R%                  UR#                  U5      X;5        MN     UR'                  5         M     GM3     g)
z4Ensures draw aalines respects a surface's clip area.r   r   r	   r$   r  r  NFc              3   P   >#    U  H  n[        T5        H  o!U4v   M
     M     g 7fr=  r>  r  s      r!   rA  :AALinesMixin.test_aalines__surface_clip.<locals>.<genexpr>A  r  rC  )rE   r   r}   r   rF   r!  r   rL  r*   r   r   r  rm   r>   r6   r   rI  r   r   r7   )r   r  rU  r   r   r  r  r   r=   r  r  r  r  s               @r!   test_aalines__surface_clip'AALinesMixin.test_aalines__surface_clip  s   ||E*W-..%0]#KK1	"++-44	>># 39=F$O??HOOX5G5GHC'   &]+!!'E/Iu  ]+  +!!'E O5<NB)++GNN2,>R(();]O	 O  9 ( >r'   rQ   N)rR   rS   rT   rU   rV   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rX   rQ   r'   r!   r  r  p  s{    
88L<	8."B Q6:.:6<B)DV:2> <4<B:JF#CJ-!r'   r  c                       \ rS rSrSrSrg)DrawAALinesTestiT  zTest draw module function aalines.

This class inherits the general tests from AALinesMixin. It is also the
class to add any draw.aalines specific tests to.
rQ   Nr  rQ   r'   r!   r  r  T  r  r'   r  rv   )r   rv   r   r8  r   r{   r   rK  c                       \ rS rSrSrS rS rS rS rS r	S r
S	 rS
 rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rSrg)DrawPolygonMixinip  z^Mixin tests for drawing polygons.

This class contains all the general polygon drawing tests.
c                 :    [         R                  " S5      U l        g )Nru  )rE   r}   r   r   s    r!   setUpDrawPolygonMixin.setUpv  s    ~~h/r'   c                     U R                  [        R                  " S5      SSS5      nU R                  U[        R                  5        g)z.Ensures draw polygon accepts the correct args.ru   rw   r~  r   Nr_   rE   r}   r~   rF   r   s     r!   test_polygon__args#DrawPolygonMixin.test_polygon__argsy  s;    ''NN6"N4La
 	k6;;7r'   c                     U R                  [        R                  " S5      SS5      nU R                  U[        R                  5        g)z6Ensures draw polygon accepts the args without a width.r   r  r~  Nr  r   s     r!    test_polygon__args_without_width1DrawPolygonMixin.test_polygon__args_without_width  s9    ''NN6"M3K
 	k6;;7r'   c                     [         R                  " S5      n[         R                  " S5      nSnXUSS.XUS./nU H5  nU R                  " S0 UD6nU R	                  U[         R
                  5        M7     g)	zNEnsures draw polygon accepts the correct kwargs
with and without a width arg.
r   r   r~  r   r   r8   r  r   )r   r8   r  NrQ   )rE   r}   r   r_   r~   rF   r  s          r!   test_polygon__kwargs%DrawPolygonMixin.test_polygon__kwargs  sq     ..(X&)6AN6B

 "F++5f5K!!+v{{; "r'   c                     U R                  S[        R                  " S5      SSS9nU R                  U[        R                  5        g)z6Ensures draw polygon's kwargs are not order dependent.r  rz   r   r   r   r   )r8   r   r   r  Nr  r   s     r!   &test_polygon__kwargs_order_independent7DrawPolygonMixin.test_polygon__kwargs_order_independent  sB    ''NN6*+	 ( 
 	k6;;7r'   c                    [         R                  " S5      n[         R                  " S5      nU R                  [        5         U R                  X5      nSSS5        U R                  [        5         U R                  U5      nSSS5        U R                  [        5         U R                  5       nSSS5        g! , (       d  f       Nl= f! , (       d  f       NN= f! , (       d  f       g= f)z7Ensures draw polygon detects any missing required args.r   r   NrE   r}   r   r   r   r_   r  s       r!   test_polygon__args_missing+DrawPolygonMixin.test_polygon__args_missing  s    ..(V$y)++G;K * y)++G4K * y)++-K *) *) *) *)s$   B:1C C:
C
C
C*c                 0   [         R                  " S5      [         R                  " S5      SSS.nS HO  n[        U5      nUR	                  U5        U R                  [        5         U R                  " S0 UD6nSSS5        MQ     g! , (       d  f       Mc  = f)	z9Ensures draw polygon detects any missing required kwargs.r   r   r  r   r  )r  r8   r   NrQ   )rE   r}   r   r   r   r   r   r_   r   s        r!   test_polygon__kwargs_missing-DrawPolygonMixin.test_polygon__kwargs_missing  s~     ~~f-\\%(.	
 3D!&\Nt$""9-"//A.A .-	 3 .-r  c                 l   [         R                  " S5      n[         R                  " S5      nSnU R                  [        5         U R                  XUS5      nSSS5        U R                  [        5         U R                  XS5      nSSS5        U R                  [        5         U R                  USU5      nSSS5        U R                  [        5         U R                  SX#5      nSSS5        g! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       Na= f! , (       d  f       g= f)	z/Ensures draw polygon detects invalid arg types.r   r   )r   r   r   r   Nr   r   r  r  )r   r   r8   r  r9   s        r!   test_polygon__arg_invalid_types0DrawPolygonMixin.test_polygon__arg_invalid_types  s    ..(V$)y)++GFCHK * y)++GIFK * y)++GS&AK * y)++L%HK *) *) *) *) *)s0   C25D%DD%2
D 
D
D"%
D3c                 H   [         R                  " S5      n[         R                  " S5      nSnSn[         R                  UUUS.USUUS.UUSUS.XUSS./nU H3  nU R                  [        5         U R
                  " S
0 UD6nS	S	S	5        M5     g	! , (       d  f       MG  = f)z1Ensures draw polygon detects invalid kwarg types.ru   r	   )r$   r   r  r   r  r   )r  r  r  r  NrQ   r  )r   r   r8   r  r   r   r   r9   s           r!   !test_polygon__kwarg_invalid_types2DrawPolygonMixin.test_polygon__kwarg_invalid_types  s    ..(W%) ">> 	 # 	 #,	  6CP'
, "F""9-"//9&9 .- "--s   2B
B!	c                    [         R                  " S5      n[         R                  " S5      nSnUUUSSS.XUSS./nU H3  nU R                  [        5         U R
                  " S0 UD6nSSS5        M5     g! , (       d  f       MG  = f)	z1Ensures draw polygon detects invalid kwarg names.r   r   )r   r   r   r   )r   r8   r  r   r   )r   r8   r  r   NrQ   r  r  s          r!    test_polygon__kwarg_invalid_name1DrawPolygonMixin.test_polygon__kwarg_invalid_name  s    ..(V$) #   6aP	
 "F""9-"//9&9 .- "--   A77
B	c                    [         R                  " S5      nSnSnSnXX4S.nS H  nUR                  U5        SU:X  a  U R                  " U40 UD6nOISU:X  a  U R                  " X40 UD6nO/SU:X  a  U R                  " XU40 UD6nOU R                  " XX440 UD6nU R	                  U[         R
                  5        M     g	)
z9Ensures draw polygon accepts a combination of args/kwargsr   r   r  r   r  r   r8   r  N)rE   r}   r   r_   r~   rF   )r   r   r8   r  r   r   r   r9   s           r!   test_polygon__args_and_kwargs.DrawPolygonMixin.test_polygon__args_and_kwargs  s    ..( )$W;DJJtD "//B6BD"//I&IT!"//Q&Q"//XQWX!!+v{{; <r'   c                 t   [         R                  " S5      n[         R                  " S5      nSnUUSSS.nUS   S   nS	 Hu  nUR                  U5        XdS
'   US:  a  UOUnU R                  " S0 UD6nU R                  UR                  U5      U5        U R                  U[         R                  5        Mw     g)z4Ensures draw polygon accepts different width values.r   r   r   r  Nr  r  r   r  r   rQ   )	rE   r   r}   r   r_   r   r   r~   rF   )	r   r   r   r8   r   r/   r   r   r9   s	            r!    test_polygon__valid_width_values1DrawPolygonMixin.test_polygon__valid_width_values#  s    W-..(!6	
 Xq!3ELL'#7O&+qjUmN++5f5KW^^C0.A!!+v{{; 4r'   c           	         Sn[         R                  " S5      n[         R                  " S5      nUUSSS.n[        [        [        [        4[        [        [        [        4[
        [
        [
        [
        4[        [
        [        [
        44nSn[        [        4nU H  nU H  n	U	S   n
[        U	5       VVs/ s H  u  pX   " U5      PM     nnnU Hr  nUR                  U5        U" U5      US'   U R                  " S	0 UD6nU R                  UR                  U
5      U5        U R                  U[         R                  5        Mt     M     M     gs  snnf )
z6Ensures draw polygon accepts different points formats.r   r   r   Nr   r  r  r  rQ   )rE   r   r}   r  r  r   r  r   r_   r   r   r~   rF   r  s                   r!   !test_polygon__valid_points_format2DrawPolygonMixin.test_polygon__valid_points_format:  s-   *W-..(#	
 E5%(4t$gw07E7+	

 DM	%J&"1I	9B69JK9J*-+9JK )HLL/'/'7F8$"&"3"3"=f"=K$$W^^I%>O))+v{{C !*	 ' & Lr  c                 6   [         R                  " S5      [         R                  " S5      SSS.nSSSS	S
SS14S	S
SSS.41 SkSSSSS.4nU H7  nX1S'   U R                  [        5         U R
                  " S0 UD6nSSS5        M9     g! , (       d  f       MK  = f)z>Ensures draw polygon handles invalid points formats correctly.r   r   Nr   r  )r   r   r  )r   r   r  )r   r   r  r   r   r{   rv   r   >   r   r   r   r   r   r   r  r  rQ   r  r  s        r!   $test_polygon__invalid_points_formats5DrawPolygonMixin.test_polygon__invalid_points_formatse  s     ~~f-\\%(	
 #'&VaV$Vq\*,aA!$
 "F%8""9-"//9&9 .- " .-s   )B		
B	c                 8   [         R                  " S5      [         R                  " S5      SSS.nSnU HQ  n[        [        4 H>  nU" U5      US'   U R                  [        5         U R                  " S0 UD6nSSS5        M@     MS     g! , (       d  f       MV  = f)	z=Ensures draw polygon handles invalid points values correctly.r   r   Nr   r  )rQ   r  )r   r   r  rQ   )rE   r}   r   r  r  r   r  r_   )r   r   r  r  r  r9   s         r!   #test_polygon__invalid_points_values4DrawPolygonMixin.test_polygon__invalid_points_values~  s     ~~f-\\%(	

 "F"DM#+F#3x &&z2"&"3"3"=f"=K 32 * " 32r  c                    [         R                  " S5      n[         R                  " S5      n[         R                  " S5      nUSSSS.nUS   S   nS	S
UR                  U5      U4nU H  nUR	                  U5        XtS'   [        U[        5      (       a  UR                  U5      nOUnU R                  " S0 UD6n	U R                  UR                  U5      U5        U R                  U	[         R                  5        M     g)z5Ensures draw polygon accepts different color formats.r	   r   r   Nr  r   r  r  r   r   r8   rQ   )rE   r   r}   r   r   r   r   r   r_   r   r   r~   rF   )
r   r   r   r   r   r/   r  r8   r   r9   s
             r!   !test_polygon__valid_color_formats2DrawPolygonMixin.test_polygon__valid_color_formats  s    ll7+W-..(6	
 Xq!OOK(	
 ELL'#7O%%%!(!2!25!9!,++5f5KW^^C0.A!!+v{{; r'   c                     [         R                  " S5      SSSS.nSU 4 H7  nX!S'   U R                  [        5         U R                  " S0 UD6nSSS5        M9     g! , (       d  f       MK  = f)	z=Ensures draw polygon handles invalid color formats correctly.r   Nr  r   r  r   r8   rQ   )rE   r}   r   r   r_   r  s       r!   #test_polygon__invalid_color_formats4DrawPolygonMixin.test_polygon__invalid_color_formats  si     ~~f-6	
  #DkN,7O""9-"//9&9 .- * .-rH  c                     U R                  U R                  [        [        S5        [	        S5       HE  n[	        S5       H3  nU R                  U R                  R                  X45      [        5        M5     MG     g )Nr   r   )r_   r   r1  SQUAREr   r   r   r   r   r   s      r!   test_draw_square!DrawPolygonMixin.test_draw_square  sY    $,,VQ7 qA1X  !4!4aV!<cB  r'   c           	         [         R                  R                  U R                  [        SS5        U R                  U R                  [        [        S5        [         H>  u  pU R                  U R                  R                  X45      [        [        X45      S9  M@     [        SS5       HF  n[        SS5       H3  nU R                  U R                  R                  X45      [        5        M5     MH     g )Nra  r   rU  r{   r   )rE   r   r)   r   r1  r_   GREENDIAMONDr   r   strr   r,  s      r!   test_draw_diamond"DrawPolygonMixin.test_draw_diamond  s    sNA>$,,w:DAT\\00!8%S![Q q!A1a[  !4!4aV!<eD ! r'   c           
         [         R                  R                  U R                  [        SS5        U R                  U R                  [        [         VVs/ s H	  u  pUS4PM     snnS5        Sn[        US-   5       H  nU R                  U R                  R                  US45      [        5        U R                  U R                  R                  US45      [        5        U R                  U R                  R                  US45      [        5        M     [         R                  R                  U R                  [        SS5        U R                  U R                  [        [         VVs/ s H	  u  pUS4PM     snnS5        [        US-   5       H  nU R                  U R                  R                  US45      [        5        U R                  U R                  R                  US45      [        5        U R                  U R                  R                  US45      [        5        M     [         R                  R                  U R                  [        SS5        U R                  U R                  [        [         VVs/ s H	  u  pESU4PM     snnS5        [        US-   5       H  nU R                  U R                  R                  SU45      [        5        U R                  U R                  R                  SU45      [        5        U R                  U R                  R                  SU45      [        5        M     [         R                  R                  U R                  [        SS5        U R                  U R                  [        [         VVs/ s H	  u  pESU4PM     snnS5        [        US-   5       H  nU R                  U R                  R                  SU45      [        5        U R                  U R                  R                  SU45      [        5        U R                  U R                  R                  SU45      [        5        M     g s  snnf s  snnf s  snnf s  snnf )	Nra  r   r{   rK  r   rv   r   r   )rE   r   r)   r   r1  r_   r1  CROSSr   r   r   )r   r   _y
cross_size_xr   s         r!    test_1_pixel_high_or_wide_shapes1DrawPolygonMixin.test_1_pixel_high_or_wide_shapes  s9   sNA>$,,E/JE51AE/JAN
zA~&AT\\00!Q8#>T\\00!Q8%@T\\00!Q8#> ' 	sNA>$,,E/JE51AE/JANzA~&AT\\00!Q8#>T\\00!Q8%@T\\00!Q8#> ' 	sNA>$,,E/JE52AE/JANzA~&AT\\00!Q8#>T\\00!Q8%@T\\00!Q8#> ' 	sNA>$,,E/JE52AE/JANzA~&AT\\00!Q8#>T\\00!Q8%@T\\00!Q8#> '/ 0K 0K 0K 0Ks   Q,QQ$Q*c           
         [         R                  R                  U R                  [        SS5        U R                  U R                  [        [        S5        [        SS5       Vs/ s H  oS4PM     sn[        SS5       Vs/ s H  nSU4PM	     sn-   n[        S5       H  n[        S5       H  nX4U;   a2  U R                  U R                  R                  X45      [        5        M<  U[        SS5      ;   a  US	:  d  U[        SS5      ;   a8  US	:  a2  U R                  U R                  R                  X45      [        5        M  U R                  U R                  R                  X45      [        5        M     M     [         R                  R                  U R                  [        SS5        U R                  U R                  [        [        S5        [        SS5       Vs/ s H  oS4PM     sn[        SS5       Vs/ s H  nSU4PM	     sn-   n[        S5       H  n[        S5       H  nU[        SS5      ;   a  US	:  d  U[        SS5      ;   aA  US	:  a;  U R                  U R                  R                  X45      [        [        X45      S
9  Mj  U R                  U R                  R                  X45      [        5        M     M     gs  snf s  snf s  snf s  snf )znon-regression on issue #234 : x and y where handled inconsistently.

Also, the result is/was different whether we fill or not the polygon.
ra  r   r   rK  rv   rx   r{   r   rt  r0  N)rE   r   r)   r   r1  r_   r1  r7  r   r   r   r3  )r   r   r   insides       r!   test_draw_symetric_cross)DrawPolygonMixin.test_draw_symetric_cross  s;    	sNA>$,,ua8"'1+.+Qa&+.%1+1N+Q1a&+1NNrA2Y6V#$$T\\%8%8!%@#F5A;&1q5a5A;6F1q5$$T\\%8%8!%@%H $$T\\%8%8!%@#F   	sNA>$,,ua8"'1+.+Qa&+.%1+1N+Q1a&+1NNrA2Yq!$QAq!4DQ$$++QF3UQF % 
 $$T\\%8%8!%@#F  ! /1N /1Ns   %KK$KKc                    [         R                  " S5      nSUR                  S-
  S4UR                  S-
  S4SSUR                  S-
  4SUR                  S-
  4/n[         R                  R                  U R                  [        SS5        U R                  U R                  [        USS S5        [        S	5       H4  nU R                  U R                  R                  US45      [        5        M6     [        SUR                  S-
  S-   5       H4  nU R                  U R                  R                  US45      [        5        M6     [         R                  R                  U R                  [        SS5        U R                  U R                  [        US5        [        SUR                  S-
  S-   5       H4  nU R                  U R                  R                  US45      [        5        M6     g)
znon-regression on issue #313)r   r   r   r   r$   r   r   r   r   r   Nr   )rE   rF   r   r   r   r)   r   r1  r_   r1  r   r   r   )r   r)   	path_datar   s       r!   test_illumine_shape$DrawPolygonMixin.test_illumine_shape  s   {{>*ZZ!^QZZ!^U#DKK!O$a 
	6 	sNA> 	$,,y!}a@rAT\\00!Q8%@ q$**q.1,-AT\\00!Q8%@ . 	sNA>$,,y!<q$**q.1,-AT\\00!Q8%@ .r'   c                 :   ^  T R                  [        U 4S j5        g )Nc                  H   > T R                  T R                  [        SS5      $ )N)r$   )r   r   ru  r   r   )r_   r   r1  r  s   r!   <lambda>6DrawPolygonMixin.test_invalid_points.<locals>.<lambda>I  s    D%%c#BAr'   )r   r   r  s   `r!   test_invalid_points$DrawPolygonMixin.test_invalid_pointsF  s    	
r'   c           
         [         R                  " S5      n[         R                  " S5      nS=p4S=pVX44XV44n[         R                  " SSS5      nUR                  5       n	U	R	                  US-  S	-   US-  S	-   5      n
[        U	5      [        U
5      -    H  n[         H  nU H  u  p[         R                  " S
X45      n[        XU5        UR                  UR                  UR                  4n[        S5       HL  nUR                  U5        U R                  XUU5      n[        XUS   5      nU R!                  UUSU 35        MN     M     M     M     g)zEnsures draw polygon returns the correct bounding rect.

Tests polygons on and off the surface and a range of width/thickness
values.
r   r   r   rt  ru  r   rv  r{   r   r$   r   
thickness=N)rE   r   r}   r!  rw  r*   rx  rF   ry  r   r   r   r   r   r_   rM   r   )r   polygon_colorrG   rz  r{  r|  r}  r  r   r~  r  r/   r  r   r   r  verticesr%  r  r  s                       r!   test_polygon__bounding_rect,DrawPolygonMixin.test_polygon__bounding_rectN  sc    U+\\'*
!""	!""	(9*AB..1b1$$&	 $$Y]Q%6
Q8JK/
(23C 1%*ME%{{6E?CHHC0 !((  ,, H &+1X	Z0(,(9(9#Hi) )=#!) (())(4 &. &+ 13r'   c                   ^ S=nm[         R                  " S5      n[         R                  " S5      n[         R                  " UT45      nUR                  U5        [         R                  " SS5      nUR                  5       R                  Ul        UR                  5       nS GH'  n[        U5       GH  nXl        UR                  UR                  UR                  UR                  4n	UR                  S5        UR                  U5        U R                  XBX5        [        XBU5      n
UR                  U5        UR                  U5        U R                  XBX5        UR!                  5         U4S j[#        U5       5        H.  nX;   a  UnOUnU R%                  UR'                  U5      X5        M0     UR)                  5         GM     GM*     g)	zeEnsures draw polygon respects a surface's clip area.

Tests drawing the polygon filled and unfilled.
r   r   r	   r$   r  rx   r   Nc              3   P   >#    U  H  n[        T5        H  o!U4v   M
     M     g 7fr=  r>  r  s      r!   rA  >DrawPolygonMixin.test_polygon__surface_clip.<locals>.<genexpr>  r  rC  )rE   r   r}   r   rF   r!  r   rL  r*   r   r   r   r   r  r_   r>   r6   r   r   r   r7   )r   r  rM  r   r   r  r  r   r   rN  r  r  r   r  s                @r!   test_polygon__surface_clip+DrawPolygonMixin.test_polygon__surface_clip  s   
 U+W-..%0]#KK0	"++-44	>>#E6yA #)$$%%((''	   &]+!!'(J/	R ]+  +!!'(J O5<NB))6)6$$W^^B%7L O  E B r'   c                   ^^ SnSnSnSnSnSnS=px[         R                  " Xx45      mSn	S	m[         R                  R                  TTS
S
Xx4S
5        UU4S jn
UU4S jnUU4S jnUU4S jnUU4S jnUU4S jnUU4S jnU R	                  TXX#45        U
" U 5        [         R                  R                  TTS
S
Xx4S
5        U R	                  TXX$45        U" U 5        U" U 5        [         R                  R                  TTS
S
Xx4S
5        U R	                  TXX%45        U" U 5        U" U 5        [         R                  R                  TTS
S
Xx4S
5        U R	                  TXX&45        U" U 5        U" U 5        g)za
Ensures draw polygon works correctly with large points.
Testing the drawings of filled polygons
)X  ry   )ry   rX  )  順 )p`y)r[  rZ  )rY  r\  i  r   rj  r   c                    > U R                  TR                  S5      T5        U R                  TR                  S5      T5        g )N)  ry   )ry   r^  r   r   r   r   r   s    r!   extreme_pointsGDrawPolygonMixin.test_polygon_large_coords_3989.<locals>.extreme_points  s5    W^^I6>W^^I6>r'   c                 H   > U R                  TR                  S5      T5        g )N)rX     r_  r`  s    r!   extreme_negative_passNDrawPolygonMixin.test_polygon_large_coords_3989.<locals>.extreme_negative_pass  s    W^^I6>r'   c                 H   > U R                  TR                  S5      T5        g )Nr  rI  r   r`  s    r!   extreme_negative_failNDrawPolygonMixin.test_polygon_large_coords_3989.<locals>.extreme_negative_fail  s    v 6>r'   c                 H   > U R                  TR                  S5      T5        g N)rX  rX  r_  r`  s    r!   extreme_x_passGDrawPolygonMixin.test_polygon_large_coords_3989.<locals>.extreme_x_pass      W^^J7?r'   c                 H   > U R                  TR                  S5      T5        g )N)r  r^  rh  r`  s    r!   extreme_x_failGDrawPolygonMixin.test_polygon_large_coords_3989.<locals>.extreme_x_fail      z :EBr'   c                 H   > U R                  TR                  S5      T5        g rl  r_  r`  s    r!   extreme_y_passGDrawPolygonMixin.test_polygon_large_coords_3989.<locals>.extreme_y_pass  ro  r'   c                 H   > U R                  TR                  S5      T5        g )N),  rx  rh  r`  s    r!   extreme_y_failGDrawPolygonMixin.test_polygon_large_coords_3989.<locals>.extreme_y_fail  rs  r'   N)rE   r}   r   r)   r_   )r   point_apoint_bextreme_points_coordsextreme_negative_coordsextreme_negative_xextreme_negative_yr@  rF  r	   ra  re  ri  rm  rq  ru  ry  r   r   s                    @@r!   test_polygon_large_coords_3989/DrawPolygonMixin.test_polygon_large_coords_3989  s}   
  /"3--..&!12 	%!Q)?C	?
	?	?	@	C	@	C
 	'5G*STt%!Q)?C'5G*UVd#d#%!Q)?C'5G*PQtt%!Q)?C'5G*PQttr'   r  N) rR   rS   rT   rU   rV   r  r  r  r  r  r  r	  r  r  r  r  r  r  r  r"  r%  r(  r-  r4  r;  r?  rC  rI  rO  rU  r  rX   rQ   r'   r!   r  r  p  s    
088<"	8.B I,:@:(<,<.)DV:2>,<B:CE?>!GF+AZ
5n3!nAr'   r  c                       \ rS rSrSrSrg)DrawPolygonTesti   zTest draw module function polygon.

This class inherits the general tests from DrawPolygonMixin. It is also
the class to add any draw.polygon specific tests to.
rQ   Nr  rQ   r'   r!   r  r     r  r'   r  c                       \ rS rSrSrS rS rS rS rS r	S r
S	 rS
 rS rS rS rS rS rS rS rS rS rS rS rS rSrg)DrawRectMixini  zXMixin tests for drawing rects.

This class contains all the general rect drawing tests.
c                     U R                  [        R                  " S5      S[        R                  " SS5      SSSSSS	5	      nU R	                  U[        R                  5        g
)z+Ensures draw rect accepts the correct args.r   )r   rx   r      r$   r   r{   r   rv   r   r   Nr]   rE   r}   rF   r~   r   s     r!   test_rect__argsDrawRectMixin.test_rect__args  sU    nnNN6"KK'

 	k6;;7r'   c                     U R                  [        R                  " S5      S[        R                  " SS5      5      nU R	                  U[        R                  5        g)z?Ensures draw rect accepts the args without a width and borders.r  rj  r$   r   Nr  r   s     r!   test_rect__args_without_width+DrawRectMixin.test_rect__args_without_width,  sA    nnNN6"NFKK4O
 	k6;;7r'   c           
      @   [         R                  " S5      [         R                  " S5      [         R                  " SS5      SSSSS	S
S.	[         R                  " S5      SSS./nU H5  nU R                  " S0 UD6nU R                  U[         R                  5        M7     g)z]Ensures draw rect accepts the correct kwargs
with and without a width and border_radius arg.
r  r   r$   r   r   rx   r   r   r8  r   	r   r8   r)   r   border_radiusborder_top_left_radiusborder_top_right_radiusborder_bottom_left_radiusborder_bottom_right_radius)r   r  rA  r   r   NrQ   )rE   r}   r   rF   r]   r~   r   s       r!   test_rect__kwargsDrawRectMixin.test_rect__kwargs4  s     ">>&1e,FF3!#*++--/./
 ">>&1&$
& "F..262K!!+v{{; "r'   c                     U R                  SS[        R                  " S5      SSSS[        R                  " SS5      S	S
9	nU R	                  U[        R                  5        g)z3Ensures draw rect's kwargs are not order dependent.)r   r   r{   rx   r   r   r  r   r   r$   r8  )	r8   r  r   r  r   r  r  r)   r  Nr  r   s     r!   #test_rect__kwargs_order_independent1DrawRectMixin.test_rect__kwargs_order_independentP  sZ    nnNN6*#$$&'(VV,&( % 

 	k6;;7r'   c                    [         R                  " S5      nU R                  [        5         U R	                  U[         R
                  " S5      5      nSSS5        U R                  [        5         U R	                  U5      nSSS5        U R                  [        5         U R	                  5       nSSS5        g! , (       d  f       Nl= f! , (       d  f       NN= f! , (       d  f       g= f)z4Ensures draw rect detects any missing required args.r   r   N)rE   r}   r   r   r]   r   r   s      r!   test_rect__args_missing%DrawRectMixin.test_rect__args_missing`  s    ..(y)..&,,w2GHK * y)..1K * y)..*K *) *) *) *)r   c           
      d   [         R                  " S5      [         R                  " S5      [         R                  " SS5      SSSSSS	S
.	nS HO  n[	        U5      nUR                  U5        U R                  [        5         U R                  " S0 UD6nSSS5        MQ     g! , (       d  f       Mc  = f)z6Ensures draw rect detects any missing required kwargs.r   r   r$   r   r   rx   r   r8  r   r  r   NrQ   )	rE   r}   r   rF   r   r   r   r   r]   r   s        r!   test_rect__kwargs_missing'DrawRectMixin.test_rect__kwargs_missingm  s     ~~f-\\%(KK/&''))+*+

 1D!&\Nt$""9-"nn>~> .-	 1 .-r  c           	      >   [         R                  " S5      n[         R                  " S5      n[         R                  " SS5      nU R	                  [
        5         U R                  XUSSS9nSSS5        U R	                  [
        5         U R                  XUSSS9nSSS5        U R	                  [
        5         U R                  XUSSS	9nSSS5        U R	                  [
        5         U R                  XUSS
S9nSSS5        U R	                  [
        5         U R                  XUSS5      nSSS5        U R	                  [
        5         U R                  XUSS5      nSSS5        U R	                  [
        5         U R                  XSSS5      nSSS5        U R	                  [
        5         U R                  USUSS5      nSSS5        U R	                  [
        5         U R                  X2USS5      nSSS5        g! , (       d  f       GN= f! , (       d  f       GN}= f! , (       d  f       GN_= f! , (       d  f       GNA= f! , (       d  f       GN!= f! , (       d  f       GN= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       g= f)z,Ensures draw rect detects invalid arg types.ru   r   r   r{   rad)r  N)r  )r  r   )r  r  r   r   rK  r   rv   r  rx   rE   r}   r   rF   r   r   r]   r   s        r!   test_rect__arg_invalid_types*DrawRectMixin.test_rect__arg_invalid_types  s   ..(W%{{66*y)..aE ) K * y)..a5 ) K * y)..a ) K * y)..a ) K * y)..q%HK * y)..sAFK * y)..AqIK * y)..#tQBK * y)..dArBK *)Q *) *) *) *) *) *) *) *) *)sl   H 	H9H$)H6II=I,/I="J 
H
H!$
H36
I
I
I),
I:=
J
Jc                    [         R                  " S5      n[         R                  " S5      n[         R                  " SS5      n[         R                  UUSSSSS	S
S.	USUSSSSS	S
S.	UUSSSSSS	S
S.	UUUSSSSS	S
S.	UUUSSSSS	S
S.	UUUSSSSS	S
S.	UUUSSSSS	S
S.	UUUSSSSSS
S.	UUUSSSSS	SS.	/	nU H3  nU R	                  [
        5         U R                  " S0 UD6nSSS5        M5     g! , (       d  f       MG  = f)z.Ensures draw rect detects invalid kwarg types.r   r   r$   r   r   rx   r   r   r8  r   r  r   )r   r   r{   r   g      %@      @rN  rO  rP  NrQ   r  r   s          r!   test_rect__kwarg_invalid_types,DrawRectMixin.test_rect__kwarg_invalid_types  s   ..(U#{{66* ">>!#*++--/./
 #!#*++--/./
 #!!#*++--/./
 #!#*++--/./
 #!%*++--/./
 #!#*-+--/./
 #!#*++.-/./
 #!#*++--0./
 #!#*++--/.1
sd
L "F""9-"nn6v6 .- "--s   C11
D 	c                 F   [         R                  " S5      n[         R                  " S5      n[         R                  " SS5      nUUUSSSSS	S
SS.
XUSS./nU H3  nU R	                  [
        5         U R                  " S0 UD6nSSS5        M5     g! , (       d  f       MG  = f)z.Ensures draw rect detects invalid kwarg names.r   r	   r$   ru   r   rx   r   r   r8  r   )
r   r8   r)   r   r  r  r  r  r  r   r   NrQ   r  r   s          r!   test_rect__kwarg_invalid_name+DrawRectMixin.test_rect__kwarg_invalid_name#  s    ..(W%{{66* #!#*++--/./  !L
  "F""9-"nn6v6 .- "--s   1B
B 	c                    [         R                  " S5      nSn[         R                  " SS5      nSnXX4S.nS H  nUR                  U5        SU:X  a  U R                  " U40 UD6nOISU:X  a  U R                  " X40 UD6nO/S	U:X  a  U R                  " XU40 UD6nOU R                  " XX440 UD6nU R                  U[         R                  5        M     g
)z6Ensures draw rect accepts a combination of args/kwargsr   )r   r   r   r   r   )r{   r   r   r   r   r8   r)   N)rE   r}   rF   r   r]   r~   r   s           r!   test_rect__args_and_kwargs(DrawRectMixin.test_rect__args_and_kwargs<  s    ..("{{66*$dS9DJJtD "nnW??D"nnWFvF4"nnWTLVL"nnWTSFS!!+v{{; :r'   c                    Sn[         R                  " S5      n[         R                  " S5      nSnUU[         R                  " US5      SS.nS Hu  nUR	                  U5        XeS	'   US
:  a  UOUnU R
                  " S0 UD6nU R                  UR                  U5      U5        U R                  U[         R                  5        Mw     g)z1Ensures draw rect accepts different width values.r   r   r   )r   r{   rv   r   r   Nr   r   r   r   rQ   	rE   r   r}   rF   r   r]   r   r   r~   r   s	            r!   test_rect__valid_width_values+DrawRectMixin.test_rect__valid_width_valuesQ  s    W-..(KKV,	
 6ELL'#7O&+qjUmN..262KW^^C0.A!!+v{{; 6r'   c                    Sn[         R                  " S5      n[         R                  " S5      n[         R                  " S5      nXBSSS.n[         R                  " US5      US4US   US	   S
S
4US/4nU Hk  nUR	                  U5        XuS'   U R
                  " S0 UD6nU R                  UR                  U5      U5        U R                  U[         R                  5        Mm     g)z1Ensures draw rect accepts different rect formats.r   r   r   r   Nr   r   r   r   rv   r  r)   rQ   r  r   s	            r!   test_rect__valid_rect_formats+DrawRectMixin.test_rect__valid_rect_formatsh  s    h/W-..($tVWXKKV$&MVSVQ"*	
 DLL'!6N..262KW^^C0.A!!+v{{; r'   c                 (   [         R                  " S5      [         R                  " S5      SSS.n/ S/SS// SQ/ S	Q1 S
k/ SQ4nU H7  nX1S'   U R                  [        5         U R
                  " S0 UD6nSSS5        M9     g! , (       d  f       MK  = f)z9Ensures draw rect handles invalid rect formats correctly.r   r   Nr   r   r   r{   r   r   >   r   r{   rv   r   )r   r{   rv   4r)   rQ   )rE   r}   r   r   r   r]   )r   r   invalid_fmtsr)   r9   s        r!   test_rect__invalid_rect_formats-DrawRectMixin.test_rect__invalid_rect_formats  s     ~~f-\\%(	
 CF
 !D!6N""9-"nn6v6 .- ! .-s   "B
B	c                 "   Sn[         R                  " S5      n[         R                  " S5      n[         R                  " S5      nUS[         R                  " US5      SS.nSS	UR	                  U5      U4nU H  nUR                  U5        XuS
'   [        U[        5      (       a  UR                  U5      nOUnU R                  " S0 UD6n	U R                  UR                  U5      U5        U R                  U	[         R                  5        M     g)z2Ensures draw rect accepts different color formats.r   r   r   r   Nrv   r   r  r   r   r   r   r8   rQ   )rE   r   r}   rF   r   r   r   r   r   r]   r   r   r~   )
r   r/   	red_colorr   r   r   r   r8   r   r9   s
             r!   test_rect__valid_color_formats,DrawRectMixin.test_rect__valid_color_formats  s    LL'	W-..(KKV,	
 -wy/I9UELL'#7O%%%!(!2!25!9!*..262KW^^C0.A!!+v{{; r'   c                    Sn[         R                  " S5      nUS[         R                  " US5      SS.nSU 4 H7  nXCS'   U R                  [        5         U R
                  " S0 UD6nSSS5        M9     g! , (       d  f       MK  = f)	z:Ensures draw rect handles invalid color formats correctly.r   r   Nr   r   r   r8   rQ   )rE   r}   rF   r   r   r]   r   s         r!    test_rect__invalid_color_formats.DrawRectMixin.test_rect__invalid_color_formats  sz    ..(KKV,	
  #DkN,7O""9-"nn6v6 .- * .-r   c                    S=u  U l         U l        U l        [        R                  " U R                  [        R
                  5      U l        SU l        [        R                  " SSSS5      nU R                  U R                  U R                  US5      nU R                  X!5        [        R                  " U5       H9  nU R                  R                  U5      nU R                  X@R                  5        M;     [        R                  " U5       H9  nU R                  R                  U5      nU R                  X@R                  5        M;     [        R                   " S5      nU R                  R#                  U5        [        R                  " SSU R                   S	-
  S5      n[        R                  " SS
SU R                  S-
  5      nU R                  U R                  U R                  US5      nU R                  X&5        UR$                  u  pUR&                  u  pU R                  U R                  R                  US-
  U	45      U5        U R                  U R                  R                  X-   U	45      U5        [)        XU
-   5       H9  nU R                  U R                  R                  X45      U R                  5        M;     U R                  U R                  U R                  US5      nU R                  X'5        UR$                  u  pUR&                  u  pU R                  U R                  R                  XS-
  45      U5        U R                  U R                  R                  XU-   45      U5        [)        XU-   5       H9  nU R                  U R                  R                  X45      U R                  5        M;     g )Nr@  rB  rx   rd  r   r   r   r   r{   rv   r   )r@  rF  rE  rE   r}   r   rF  r8   rF   r]   r   r   rG  r   rH  rI  r   r   r   rB   r   )r   r)   rK  r  color_at_ptbgcolorhrectvrectr   r   r   r   r  s                r!   test_rect__fillDrawRectMixin.test_rect__fill  s   4>> T[4>NN4>>6??C	%
{{2r2r*tyy$**dA>% **40B))**2.K[**5 1 ..t4B))**2.KZZ8 5 ,,w'		wAq$++/15Aq!T[[1_5tyy$**eQ?&}}zz))1q5!*5w?))15!*5w?qa%ATYY--qf5tzzB ! tyy$**eQ?&}}zz))1!e*5w?))1!e*5w?qa%ATYY--qf5tzzB !r'   c                 V   [         R                  " S[         R                  5      U l        SU l        [         R
                  " SSSS5      nU R                  U R                  U R                  US5      nU R                  X!5        [        R                  " U5       H9  nU R                  R                  U5      nU R                  X@R                  5        M;     [        R                  " U5       H9  nU R                  R                  U5      nU R                  X@R                  5        M;     g )Nr@  rB  rx   8   r   r   )rE   r}   r   rF  r8   rF   r]   r   r   rect_perimeter_ptsr   rH  rI  )r   r)   rK  r  r  s        r!   test_rect__one_pixel_lines(DrawRectMixin.test_rect__one_pixel_lines  s    NN:v?	%
{{2r2r*tyy$**dA>% //6B))**2.K[**5 7 ..u5B))**2.KZZ8 6r'   c           
         [         R                  " S5      nUR                  S5        [         R                  " SSS5      nSnSnSn[         R                  R                  X[         R                  " SSX45      U5        [        U5       H  nU R                  UR                  Xf45      U5        U R                  UR                  X6-
  S-
  U45      U5        U R                  UR                  XdU-
  S-
  45      U5        U R                  UR                  X6-
  S-
  XF-
  S-
  45      U5        M     U R                  UR                  XU45      S	5        U R                  UR                  X5-
  S-
  U45      S	5        U R                  UR                  XTU-
  S-
  45      S	5        U R                  UR                  X5-
  S-
  XE-
  S-
  45      S	5        g )
Nr  r  r   r   r-  ry   rx   r   r   r   )
rE   r}   r   r   r   r)   rF   r   r   r   )r   r   r8   
rect_widthrect_heightrL  r  s          r!   test_rect__draw_line_width(DrawRectMixin.test_rect__draw_line_width  s   ..,WS#s+

FKK1jF
	
 z"AW^^QF3U;W^^Z^a-?,CDeLW^^Qa!0C,DEuM
 2KOa4GHI5	 # 	(@A9MNNJ3a7DEy	
 	NNJj(@1(DEF		
 	NNJ3a79QTU9UVW	
r'   c           
      x   [         R                  " S5      n[         R                  " S5      nS=p4S=pVX44XV44n[         R                  " SSS5      nUR                  5       n	U	R	                  US-  S	-   US-  S	-   5      n
[        U	5      [        U
5      -    H  n[         H  nU H  u  p[         R                  " S
X45      n[        XU5        [        S5       HS  nUR                  U5        U R                  XUU5      n[        XUR                  5      nU R                  UUSU 35        MU     M     M     M     g)zEnsures draw rect returns the correct bounding rect.

Tests rects on and off the surface and a range of width/thickness
values.
r   r   r   rt  ru  r   rv  r{   r   r$   r   rL  N)rE   r   r}   r!  rw  r*   rx  rF   ry  r   r   r]   rM   r   r   )r   
rect_colorrG   rz  r{  r|  r}  r  r   r~  r  r/   r  r   r   r)   r%  r  r  s                      r!   test_rect__bounding_rect&DrawRectMixin.test_rect__bounding_rect+  s=    \\%(
\\'*
!""	!""	(9*AB..1b1$$&	 $$Y]Q%6
Q8JK/
(23C
 1%*ME!;;v?DD,%*1X	Z0(,#y) )=#) (())(4 &.	 &+ 13r'   c                 <  ^ S=nm[         R                  " S5      n[         R                  " S5      n[         R                  " UT45      nUR                  U5        [         R                  " SS5      nUR                  5       R                  Ul        UR                  5       nS H  n[        U5       H  nXl        UR                  S5        UR                  U5        U R                  XBXg5        [        XBU5      n	UR                  U5        UR                  U5        U R                  XBXg5        UR                  5         U4S j[        U5       5        H.  n
X;   a  UnOUnU R                  UR                  U
5      X5        M0     UR!                  5         M     M     g)	z_Ensures draw rect respects a surface's clip area.

Tests drawing the rect filled and unfilled.
r   r   r	   r$   rR  r   Nc              3   P   >#    U  H  n[        T5        H  o!U4v   M
     M     g 7fr=  r>  r  s      r!   rA  8DrawRectMixin.test_rect__surface_clip.<locals>.<genexpr>  r  rC  )rE   r   r}   r   rF   r!  r   rL  r*   r  r]   r>   r6   r   r   r   r7   )r   r  r  r   r   r  	test_rectr   r   r  r  r   r  s               @r!   test_rect__surface_clip%DrawRectMixin.test_rect__surface_clipZ  sQ   
 \\%(
W-..%0]#KK0	"++-44	NN$	E6yA $*   &]+wIE/YO ]+  +wIE O5<NB))3)6$$W^^B%7L O  9 B r'   )r8   rF  rF  rE  r@  N)rR   rS   rT   rU   rV   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rX   rQ   r'   r!   r  r    sr    
8 8<88 +?*0Cdm7^72<*<.<.72<87"1Cf9,
:-^-!r'   r  c                       \ rS rSrSrSrg)DrawRectTesti  zTest draw module function rect.

This class inherits the general tests from DrawRectMixin. It is also the
class to add any draw.rect specific tests to.
rQ   Nr  rQ   r'   r!   r  r    r  r'   r  c                       \ rS rSrSrS rS rS rS rS r	S r
S	 rS
 rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rSrg)DrawCircleMixini  z\Mixin tests for drawing circles.

This class contains all the general circle drawing tests.
c                     U R                  [        R                  " S5      SSSSSSSS5	      nU R                  U[        R                  5        g)z-Ensures draw circle accepts the correct args.ru   rw   r$   rv   r   r   Nra   rE   r}   r~   rF   r   s     r!   test_circle__args!DrawCircleMixin.test_circle__args  sD    &&NN6"NFAq!Q1
 	k6;;7r'   c                     U R                  [        R                  " S5      SSS5      nU R                  U[        R                  5        g)zCEnsures draw circle accepts the args without a width and
quadrants.r   r  r   r   Nr  r   s     r!   test_circle__args_without_width/DrawCircleMixin.test_circle__args_without_width  s8     &&v~~f'=}fVWXk6;;7r'   c           	          U R                  [        R                  " S5      SSSS5      nU R                  U[        R                  5        U R                  U[        R                  " SSSS5      5        g)z9Ensures draw circle accepts the args with negative width.r   r  r   r   r,   r   Nra   rE   r}   r~   rF   r   r   s     r!   %test_circle__args_with_negative_width5DrawCircleMixin.test_circle__args_with_negative_width  s[    &&NN6"M61b
 	k6;;7fkk!Q1&=>r'   c                     U R                  [        R                  " S5      SSSSSSSS5	      nU R                  U[        R                  5        U R                  U[        R                  " SSSS5      5        g)z9Ensures draw circle accepts the args with width > radius.r   r  r   r{   rv   r   Nr  r   s     r!   &test_circle__args_with_width_gt_radius6DrawCircleMixin.test_circle__args_with_width_gt_radius  sc    &&NN6"M61aAq!
 	k6;;7fkk!Q1&=>r'   c           
         [         R                  " S5      [         R                  " S5      SSSSSSSS.	[         R                  " S	5      S
SSS./nU H5  nU R                  " S0 UD6nU R	                  U[         R
                  5        M7     g)z`Ensures draw circle accepts the correct kwargs
with and without a width and quadrant arguments.
r   r   r   r{   r   TF	r   r8   r   radiusr   draw_top_rightdraw_top_leftdraw_bottom_leftdraw_bottom_rightr   r   r   )r   r8   r   r  NrQ   )rE   r}   r   ra   r~   rF   r   s       r!   test_circle__kwargs#DrawCircleMixin.test_circle__kwargs  s     ">>&1h/ "&!%$)%)
 ">>&1$ 	
( "F**4V4K!!+v{{; "r'   c                     U R                  SS[        R                  " S5      SSSSSSS9	nU R                  U[        R                  5        g	)
z5Ensures draw circle's kwargs are not order dependent.Fr  rz   r   r   r{   T)	r  r8   r   r   r  r   r  r  r  Nr  r   s     r!   %test_circle__kwargs_order_independent5DrawCircleMixin.test_circle__kwargs_order_independent  sQ    && NN6*"# ' 

 	k6;;7r'   c                 \   [         R                  " S5      n[         R                  " S5      nU R                  [        5         U R                  XS5      nSSS5        U R                  [        5         U R                  X5      nSSS5        U R                  [        5         U R                  U5      nSSS5        U R                  [        5         U R                  5       nSSS5        g! , (       d  f       N= f! , (       d  f       N}= f! , (       d  f       N_= f! , (       d  f       g= f)z6Ensures draw circle detects any missing required args.r   r   r$   NrE   r}   r   r   r   ra   r  s       r!   test_circle__args_missing)DrawCircleMixin.test_circle__args_missing  r   r  c           
      :   [         R                  " S5      [         R                  " S5      SSSSSSSS.	nS	 HO  n[        U5      nUR	                  U5        U R                  [        5         U R                  " S0 UD6nS
S
S
5        MQ     g
! , (       d  f       Mc  = f)z8Ensures draw circle detects any missing required kwargs.r   r   r   r{   r   FTr  )r  r   r8   r   NrQ   )rE   r}   r   r   r   r   r   ra   r   s        r!   test_circle__kwargs_missing+DrawCircleMixin.test_circle__kwargs_missing  s     ~~f-\\%(#" %!%

 =D!&\Nt$""9-"..@@ .-	 = .-s   +B
B	c                 2   [         R                  " S5      n[         R                  " S5      nSnSnU R                  [        5         U R                  XX4SSSSS5	      nSSS5        U R                  [        5         U R                  XX4SSSSS5	      nSSS5        U R                  [        5         U R                  XX4SSSSS5	      nSSS5        U R                  [        5         U R                  XX4SSSSS	5	      nSSS5        U R                  [        5         U R                  XX4S
5      nSSS5        U R                  [        5         U R                  XUS5      nSSS5        U R                  [        5         U R                  XSU5      nSSS5        U R                  [        5         U R                  USX45      nSSS5        U R                  [        5         U R                  SX#U5      nSSS5        g! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN^= f! , (       d  f       GN;= f! , (       d  f       GN= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       g= f)z.Ensures draw circle detects invalid arg types.r   r   r   r   rN  Nr;  rO  rP  r   r  r   r   r  r  )r   r   r8   r   r  r9   s         r!   test_circle__arg_invalid_types.DrawCircleMixin.test_circle__arg_invalid_types  s   ..(V$y)**31aK * y)**1c1aK * y)**1aaK * y)**1aCK * y)**763OK * y)**763GK * y)**79fMK * y)**7CHK * y)**<OK *)Q *) *) *) *) *) *) *) *) *)sl   G;;H0H%H1II<I&-I7J;
H

H
H.1
I 
I
I#&
I47
J
Jc                    [         R                  " S5      n[         R                  " S5      nSnSnSnSn[         R                  UUUUSSSSS.	USUUUSSSSS.	UUSUUSSSSS.	UUUS	USSSSS.	UUUUS
SSSSS.	UUUUUSSSSS.	UUUUUSSSSS.	UUUUUSSSSS.	UUUUUSSSSS.	/	nU H3  nU R                  [        5         U R
                  " S0 UD6n	SSS5        M5     g! , (       d  f       MG  = f)z0Ensures draw circle detects invalid kwarg types.ru   r	   r   r   Tr  r   )r   r   r   r   r  TrueQ	@quadrantNrQ   r  )
r   r   r8   r   r  r   r  r   r   r9   s
             r!    test_circle__kwarg_invalid_types0DrawCircleMixin.test_circle__kwarg_invalid_typesM  s   ..(W% ">>  "&!%$(%)
 #  "&!%$(%)
 ## "&!%$(%)
 # "&!%$(%)
 #  "&!%$(%)
 #  "(!%$(%)
 #  "&!'$(%)
 #  "&!%$(%)
 #  "&!%$(%/
sd
L "F""9-"..88 .- "--s   C""
C1	c                 $   [         R                  " S5      n[         R                  " S5      nSnSnUUUUSSSSSSS.
UUUUSS./nU H3  nU R                  [        5         U R
                  " S
0 UD6nS	S	S	5        M5     g	! , (       d  f       MG  = f)z0Ensures draw circle detects invalid kwarg names.r   r   r$   r{   r   T)
r   r8   r   r  r   r  r  r  r  r  )r   r8   r   r  r   NrQ   r  )r   r   r8   r   r  r   r   r9   s           r!   test_circle__kwarg_invalid_name/DrawCircleMixin.test_circle__kwarg_invalid_name  s    ..(V$ #  "&!%$(%) #  
, "F""9-"..88 .- "--s    B  
B	c                    [         R                  " S5      nSnSnSnSnSnSnSnSn	UUUUUSSSSS.	n
S GH3  nU
R                  U5        S	U:X  a  U R                  " U40 U
D6nOS
U:X  a  U R                  " X40 U
D6nOSU:X  a  U R                  " XU40 U
D6nOSU:X  a  U R                  " XX440 U
D6nOSU:X  a  U R                  " XX4U40 U
D6nOxSU:X  a  U R                  " XX4XV40 U
D6nO\SU:X  a  U R                  " UUUUUUU40 U
D6nO<SU:X  a  U R                  " UUUUUUUU40 U
D6nOU R                  " UUUUUUUUU	4	0 U
D6nU R	                  U[         R
                  5        GM6     g)z8Ensures draw circle accepts a combination of args/kwargsr   r   r   r{   r   TFr  r   r8   r   r  r   r  r  r  N)rE   r}   r   ra   r~   rF   )r   r   r8   r   r  r   r  r  r  r  r   r   r9   s                r!   test_circle__args_and_kwargs,DrawCircleMixin.test_circle__args_and_kwargs  s    ..(   "! $!%



D JJtD "..wA&AD"..wHHT!"..wvPPT!"..wvXQWXD"..FE=C "T)"..FEMS !D(".."!	 	 $t+".."!$
 
 #.."!$%  !!+v{{;E

r'   c           
         SnSnUS   U-
  US   4n[         R                  " S5      n[         R                  " S5      nSnUUUUSSSSSS	.	nS
 Hu  nUR                  U5        XS'   US:  a  UOUn	U R                  " S0 UD6n
U R                  UR                  U5      U	5        U R                  U
[         R                  5        Mw     g)z3Ensures draw circle accepts different width values.r   r   r   r   r   r   NTr  r  r   rQ   	rE   r   r}   r   ra   r   r   r~   rF   )r   r   r  r/   r   r   r8   r   r   r   r9   s              r!   test_circle__valid_width_values/DrawCircleMixin.test_circle__valid_width_values:  s    ay6!6!9-W-..(!"! $!%

 4ELL'#7O&+qjUmN**4V4KW^^C0.A!!+v{{; 4r'   c           
      t   S=p[         R                  " S5      n[         R                  " S5      nSnUUUSSSSSSS.	nS	 Hu  nUR                  U5        XvS
'   US:  a  UOUnU R                  " S0 UD6n	U R                  UR                  U5      U5        U R                  U	[         R                  5        Mw     g)z4Ensures draw circle accepts different radius values.r   r   r   r   Nr   Tr  )r   r,   r   r   rx   r  rQ   r  )
r   r/   r   r   r   r8   r   r  r   r9   s
             r!    test_circle__valid_radius_values0DrawCircleMixin.test_circle__valid_radius_valuesX  s    W-..(!"! $!%

 *FLL'%8&,qjUmN**4V4KW^^C0.A!!+v{{; *r'   c           
         [         R                  " S5      n[         R                  " S5      n[         R                  " S5      nUUSSSSSSSS.	nS	u  pVXV4US
-   U4XVS
-   4US
-   US
-   44 H  n[        [        [
        4 Hs  nUR                  U5        U" U5      US'   U R                  " S0 UD6n	U R                  UR                  XV45      U5        U R                  U	[         R                  5        Mu     M     g)z5Ensures draw circle accepts different center formats.r   r   r   Nr   r   Tr  r   r  r   rQ   )rE   r   r}   r  r  r   r   ra   r   r   r~   rF   )
r   r   r   r   r   r   r   r   r  r9   s
             r!   !test_circle__valid_center_formats1DrawCircleMixin.test_circle__valid_center_formatst  s    e,W-..(#"! $!%

  vC|aS\AGQW;MNF"D'2]+#+F#3x "..88  !7H%%k6;;? 3 Or'   c           
          SnSnUS   U-
  US   4n[         R                  " S5      n[         R                  " S5      n[         R                  " S5      nUSUUSSSSSS	.	nS
SUR                  U5      U4nU H  n	UR	                  U5        XS'   [        U	[        5      (       a  UR                  U	5      n
OUn
U R                  " S0 UD6nU R                  UR                  U5      U
5        U R                  U[         R                  5        M     g)z4Ensures draw circle accepts different color formats.r   r   r   r	   r   r   NTr  r   r   r8   rQ   )rE   r   r}   r   r   r   r   r   ra   r   r   r~   rF   )r   r   r  r/   r   r   r   r   r  r8   r   r9   s               r!    test_circle__valid_color_formats0DrawCircleMixin.test_circle__valid_color_formats  s   ay6!6!9-ll7+W-..("! $!%

 OOK(	
 ELL'#7O%%%!(!2!25!9!,**4V4KW^^C0.A!!+v{{; r'   c           
          [         R                  " S5      SSSSSSSSS.	nSU 4 H7  nX!S	'   U R                  [        5         U R                  " S
0 UD6nSSS5        M9     g! , (       d  f       MK  = f)z<Ensures draw circle handles invalid color formats correctly.r   Nr   r   r   Tr  r   r8   rQ   )rE   r}   r   r   ra   r  s       r!   "test_circle__invalid_color_formats2DrawCircleMixin.test_circle__invalid_color_formats  sx     ~~f-"! $!%

  #DkN,7O""9-"..88 .- * .-s   A!!
A0	c                 2   [         R                  " [        R                  " S5      SSSSSSSSS9	  [         R                  " [        R                  " S5      S[	        SS5      SSSSSSS9	  [         R                  " [        R                  " S	5      S
SS5        g)z Ensure that floats are accepted.r   )r   r   r  r  ?r   Tr  r  r   r  )r%  r%  r  N)r   r`   rE   r}   r   r  s    r!   test_circle__floats#DrawCircleMixin.test_circle__floats  s    NN6*!!"
	
 	NN6*!3$!"
	
 	FNN6*M:sKr'   c                 Z   [         R                  " S5      n[         R                  " S5      nSn[         R                  " SSS5      nUR                  5       nUR	                  US-  S-
  US-  S-
  5      n[        U5      [        U5      -    H  n[        US-   5       Hu  n[        US-   5       H`  n	UR                  U5        U R                  XAXxU	5      n
[        XBU5      nU R                  UUUUU	S	9   U R                  X5        S
S
S
5        Mb     Mw     M     g
! , (       d  f       M|  = f)zEnsures draw circle returns the correct bounding rect.

Tests circles on and off the surface and a range of width/thickness
values.
r   r   rv   )r   r   r   rv  r{   r   )r   circle_colorr/   r  r%  N)rE   r   r}   r!  rw  r*   r   r   ra   rM   re  r   )r   r)  rG   
max_radiusr   r~  r  r/   r  r%  r  r  s               r!   test_circle__bounding_rect*DrawCircleMixin.test_circle__bounding_rect  s*    ||E*\\'*

..1b1$$&	 $$Z!^a%7a!9KL/
(23C  
Q/!&vz!2ILL,$($4$4sI%M %9c$RM  '%1%"+ &  ((F  "3 0	3$ s   4D	
D*c                     [         R                  " S5      nSnUR                  5       S-  UR                  5       S-  4nU R                  XUSSS9nU R	                  UR
                  S5        g)	z@Ensures negative radius circles return zero sized bounding rect.rA  rA  r  r{   r,   r   )r  r   r$   N)rE   r}   r3   ra   r   rB   )r   rF  r8   r   r  s        r!   test_circle_negative_radius+DrawCircleMixin.test_circle_negative_radius.  sf    ~~j)"a'):a)??((fRq(Q++V4r'   c           	      F   [         R                  " S5      n[         R                  " S5      n[         R                  " S5      nSnSnSnU R                  XXEU5      n[	        XU5      nU R                  Xx5        U R                  U[         R                  " SSSS5      5        g)	zvEnsures zero radius circles does not draw a center pixel.

NOTE: This is backwards incompatible behaviour with 1.9.x.
r.  r   r   r  r   r   r  N)rE   r}   r   ra   rM   r   rF   )	r   rF  r)  rG   r   r  r   r  r  s	            r!   test_circle_zero_radius'DrawCircleMixin.test_circle_zero_radius7  s    
 ~~j)||E*\\'*
((VUS,TvF6Ca(CDr'   c           	      8  ^ S=nm[         R                  " S5      n[         R                  " S5      n[         R                  " UT45      nUR                  U5        [         R                  " SS5      nUR                  5       R                  Ul        UR                  S-  S-   nS H  n[        U5       H  nUR                  S	5        UR                  U5        U R                  XBXU5        [        XBU5      n	UR                  U5        UR                  U5        U R                  XBXU5        UR                  5         U4S
 j[        U5       5        H.  n
X;   a  UnOUnU R                  UR                  U
5      X5        M0     UR!                  5         M     M     g	)zcEnsures draw circle respects a surface's clip area.

Tests drawing the circle filled and unfilled.
rd  r   r	   r$   rl  r{   r   r   Nc              3   P   >#    U  H  n[        T5        H  o!U4v   M
     M     g 7fr=  r>  r  s      r!   rA  <DrawCircleMixin.test_circle__surface_clip.<locals>.<genexpr>l  r  rC  )rE   r   r}   r   rF   r!  r   r   r*   r  ra   r>   r6   r   r   r   r7   )r   r  r)  r   r   r  r  r   r   r  r  r   r  s               @r!   test_circle__surface_clip)DrawCircleMixin.test_circle__surface_clipH  sZ   
 ||E*W-..%0]#KK1	"++-44	!A%E6yA   &]+  N/yQ ]+  +  N O5<NB))5)6$$W^^B%7L O  7 B r'   c                 B   S=p[         R                  " S5      n[         R                  " S5      n[         R                  " X45      nUR                  U5        S=u  pgnSn	Sn
U R	                  XSXU
5      n[
        R                  " U5       H  nUu  pX-
  S-  X-
  S-  -   nX-
  S-   S-  Us=:  a  U	S-
  S-  :  a$  O  O!U R                  UR                  U5      U5        XU
-
  S-
  S-  :  d  XS-   S-  :  d  Mp  U R                  UR                  U5      U5        M     g	)
zEnsures there are no holes in the circle, and no overdrawing.

Tests drawing a thick circle.
Measures the distance of the drawn pixels from the circle center.
r  r   r	   r  -   rd  r{   r   N)	rE   r   r}   r   ra   r   rG  r   r   )r   r  r  r)  r   r   cxcyr   r  r   	dest_rectr  r   r   sqr_distances                   r!   test_circle_shape!DrawCircleMixin.test_circle_shapev  s    ||E*W-..%0]#$$6$$WFER	**95BDAFq=AFq=8L"q(<K6A:!:KK  !3\B 2q88A:!"33  !3]C 6r'   c                 P   [         R                  " S5      nSnUR                  5       S-  UR                  5       S-  4nSnSn[        SS5       HT  nU R	                  XX5U5      nU R                  UR                  US-  5        U R                  UR                  US-  5        MV     g)z:Ensures draw circle is twice size of radius high and wide.r.  r  r{   r   rK  A   N)rE   r}   r3   r   ra   r   r   r   )r   rF  r8   r   r   r  r  s          r!   test_circle__diameter%DrawCircleMixin.test_circle__diameter  s    ~~j)"a'):a)??ArlF ,,T&%PM]00&1*=]116A:> #r'   c           
      4   [         R                  " S5      nSnUR                  U5        SnSnSnSnU R                  XXeS9nU R	                  U[         R
                  " SUS   U-
  US   U-   US	-  5      5        U R	                  UR                  US   S:  a  US   OSUS   45      U5        U R	                  UR                  US   U-   S-   US   45      U5        U R	                  UR                  US   U-   S-
  US   45      U5        UR                  U5        S
nU R                  XXeS9nU R	                  U[         R
                  " US   US   SS5      5        U R	                  UR                  SU-   US   45      U5        UR                  U5        UR                  5       US	-  -   S4nU R                  XXeS9nU R	                  U[         R
                  " US   US   SS5      5        U R	                  UR                  SUS   45      U5        U R	                  UR                  SUS	-  -   US   45      U5        U R	                  UR                  UR                  5       S-
  US   45      U5        U R	                  UR                  UR                  5       U-
  US   45      U5        UR                  U5        SnU R                  XXeS9nU R	                  U[         R
                  " SUS   U-
  US   U-   US	-  5      5        U R	                  UR                  US   S:  a  US   OSUS   45      U5        U R	                  UR                  US   U-   US   45      U5        U R	                  UR                  US   U-   S-
  US   45      U5        g)zJensures a circle is drawn properly when there is a negative x, or a big x.r.  rj  r  r   rx   )r   r   )r  r   r{   )gꌠ9Y>)r-  r-  )r,   r-  N)rE   r}   r   ra   r   rF   r   r2   )r   rF  r  r8   r   r  wherebounding_rect1s           r!   test_x_boundsDrawCircleMixin.test_x_bounds  s    ~~j) 		' ))$u)LKK58f,eAh.?!L	
 	KKU1X\qq%(CDe	
 	eAh&7!&;U1X%FGQeAh&7!&;U1X%FGO		'))$u)LU1XuQxA)NOa&j%(%;<gF		'!FQJ.3))$u)LU1XuQxA)NOaq]3W=a&A+ouQx%@A7Kdnn&6&:E!H%EFPdnn&6&?q%JKWU		'))$u)LKK58f,eAh.?!L	
 	KKU1X\qq%(CDe	
 	eAh&7q%BCWMeAh&7!&;U1X%FGOr'   rQ   N)rR   rS   rT   rU   rV   r  r  r  r  r  r  r   r  r  r  r  r  r  r  r  r  r"  r&  r+  r/  r2  r7  r?  rC  rH  rX   rQ   r'   r!   r  r    s    
88??<:8 -"A*1Pfp9d9@Y<v<<<8@<&<P9(Lf+GZ5E",!\D:
?0Pr'   r  c                       \ rS rSrSrSrg)DrawCircleTesti  zTest draw module function circle.

This class inherits the general tests from DrawCircleMixin. It is also
the class to add any draw.circle specific tests to.
rQ   Nr  rQ   r'   r!   rK  rK    r  r'   rK  c                       \ rS rSrSrS rS rS rS rS r	S r
S	 rS
 rS rS rS rS rS rS rS rS rS rS rS rS rS rSrg)DrawArcMixini  zVMixin tests for drawing arcs.

This class contains all the general arc drawing tests.
c                     U R                  [        R                  " S5      SSSSS5      nU R                  U[        R                  5        g)z*Ensures draw arc accepts the correct args.ru   rw   r   r   r{   r{   r   r   N)re   rE   r}   r~   rF   r   s     r!   test_arc__argsDrawArcMixin.test_arc__args  s<    mmNN6"NL!Q
 	k6;;7r'   c                     U R                  [        R                  " S5      S[        R                  " SS5      SS5      nU R	                  U[        R                  5        g)z2Ensures draw arc accepts the args without a width.r   r   r$   r   r  Nre   rE   r}   rF   r~   r   s     r!   test_arc__args_without_width)DrawArcMixin.test_arc__args_without_width  sG    mmNN6"M6;;vv3NPSUX
 	k6;;7r'   c           	          U R                  [        R                  " S5      SSSSS5      nU R                  U[        R                  5        U R                  U[        R                  " SSSS5      5        g)z6Ensures draw arc accepts the args with negative width.ru   rx   rx   ry   ry   rO  r   r   r,   N)re   rE   r}   r~   rF   r   r   s     r!   "test_arc__args_with_negative_width/DrawArcMixin.test_arc__args_with_negative_width  s\    mmNN6"$4lAq"
 	k6;;7fkk!Q1&=>r'   c           	         [         R                  " SS5      nU R                  [         R                  " S5      SUSSUR                  S-  S-   5      nU R                  U[         R                  5        U R                  [         R                  " S5      SUSSUR                  S-  S-   5      nU R                  U[         R                  5        g	)
zTEnsures draw arc accepts the args with
width > rect.w // 2 and width > rect.h // 2.
r$   r   ru   rW  r   r:  r{   r   N)rE   rF   re   r}   r   r~   r   r   s      r!   #test_arc__args_with_width_gt_radius0DrawArcMixin.test_arc__args_with_width_gt_radius  s     {{66*mmNN6"$4dAr466Q;QR?
 	k6;;7mmNN6"$4dAr466Q;QR?
 	k6;;7r'   c                 >   [         R                  " S5      [         R                  " S5      [         R                  " SS5      SSSS.[         R                  " S	5      S
SSSS./nU H5  nU R                  " S0 UD6nU R                  U[         R                  5        M7     g)zJEnsures draw arc accepts the correct kwargs
with and without a width arg.
r   r   r$   rz   g      ?rv   r   r   r8   r)   start_angle
stop_angler   r   r   )r   r   r{   r{   r  r   r8   r)   r_  r`  NrQ   )rE   r}   r   rF   re   r~   r   s       r!   test_arc__kwargsDrawArcMixin.test_arc__kwargs  s     ">>&1h/FF3" ">>&1$$ !
$ "F--1&1K!!+v{{; "r'   c                     U R                  SSS[        R                  " S5      S[        R                  " SS5      S9nU R	                  U[        R                  5        g)	z2Ensures draw arc's kwargs are not order dependent.r   r  r   rz   r   r   )r`  r_  r8   r   r   r)   NrS  r   s     r!   "test_arc__kwargs_order_independent/DrawArcMixin.test_arc__kwargs_order_independent3  sQ    mmNN6*VV, $ 
 	k6;;7r'   c                    [         R                  " S5      n[         R                  " S5      n[         R                  " SS5      nU R	                  [
        5         U R                  XUS5      nSSS5        U R	                  [
        5         U R                  XU5      nSSS5        U R	                  [
        5         U R                  X5      nSSS5        U R	                  [
        5         U R                  U5      nSSS5        U R	                  [
        5         U R                  5       nSSS5        g! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       Np= f! , (       d  f       g= f)z3Ensures draw arc detects any missing required args.r   r   r$   r   r  NrE   r}   r   rF   r   r   re   r   s        r!   test_arc__args_missing#DrawArcMixin.test_arc__args_missing@  s   ..(U#{{66*y)--cBK * y)--=K * y)--7K * y)--0K * y)--/K *) *) *) *) *) *)s<   D2
E:E)E%E62
E 
E
E"%
E36
Fc                 ^   [         R                  " S5      [         R                  " S5      [         R                  " SS5      SSSS.nS	 HO  n[	        U5      nUR                  U5        U R                  [        5         U R                  " S0 UD6nS
S
S
5        MQ     g
! , (       d  f       Mc  = f)z5Ensures draw arc detects any missing required kwargs.r   r   r   r   r  r{   r   r^  )r`  r_  r)   r8   r   NrQ   )	rE   r}   r   rF   r   r   r   r   re   r   s        r!   test_arc__kwargs_missing%DrawArcMixin.test_arc__kwargs_missingU  s     ~~f-\\%(KK/
 ND!&\Nt$""9-"mm=n= .-	 N .-s   =B
B,	c           	         [         R                  " S5      n[         R                  " S5      n[         R                  " SS5      nU R	                  [
        5         U R                  XUSSS5      nSSS5        U R	                  [
        5         U R                  XUSSS5      nSSS5        U R	                  [
        5         U R                  XUSSS5      nSSS5        U R	                  [
        5         U R                  XS	SSS5      nSSS5        U R	                  [
        5         U R                  US
USSS5      nSSS5        U R	                  [
        5         U R                  X2USSS5      nSSS5        g! , (       d  f       GN= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       g= f)z+Ensures draw arc detects invalid arg types.r   r   r   ru   r   r   r   Nr   r   rh  r   s        r!   test_arc__arg_invalid_types(DrawArcMixin.test_arc__arg_invalid_typesg  si   ..(V${{66*y)--aCHK * y)--aaHK * y)--c1aHK * y)--AqQK * y)--dAq!DK * y)--T1aCK *)) *) *) *) *) *) *)sH   E8F
?F2F,%F=G8
F

F
F),
F:=
G
Gc                    [         R                  " S5      n[         R                  " S5      n[         R                  " SS5      nSnSn[         R                  UUUUSS.US	UUUSS.UUS
UUSS.UUUSUSS.UUUUSSS.UUUUUSS./nU H3  nU R	                  [
        5         U R                  " S0 UD6nSSS5        M5     g! , (       d  f       MG  = f)z-Ensures draw arc detects invalid kwarg types.ru   r	   r   )r   r{   rv   r   r   r^  r   r   r   r   NrQ   rh  	r   r   r8   r)   r+  stopr   r   r9   s	            r!   test_arc__kwarg_invalid_types*DrawArcMixin.test_arc__kwarg_invalid_types  s   ..(W%{{66* ">>$" #$" #!$" #"" #$! #$"S1
f "F""9-"mm5f5 .- "--s   "C
C	c                 N   [         R                  " S5      n[         R                  " S5      n[         R                  " SS5      nSnSnUUUUUSSS.UUUUUSS	./nU H3  nU R	                  [
        5         U R                  " S0 UD6nS
S
S
5        M5     g
! , (       d  f       MG  = f)z-Ensures draw arc detects invalid kwarg names.r   r   r   r   g?r   r   )r   r8   r)   r_  r`  r   r   )r   r8   r)   r_  r`  r   NrQ   rh  rr  s	            r!   test_arc__kwarg_invalid_name)DrawArcMixin.test_arc__kwarg_invalid_name  s    ..(V${{66* #$" #$"
( "F""9-"mm5f5 .- "--s   5B
B$	c           	      *   [         R                  " S5      nSn[         R                  " SS5      nSnSnSnUUUUUUS.nS	 H  nUR                  U5        S
U:X  a  U R                  " U40 UD6n	OSU:X  a  U R                  " X40 UD6n	OgSU:X  a  U R                  " XU40 UD6n	OLSU:X  a  U R                  " XX440 UD6n	O1SU:X  a  U R                  " XX4U40 UD6n	OU R                  " XX4XV40 UD6n	U R                  U	[         R                  5        M     g)z5Ensures draw arc accepts a combination of args/kwargsr   r   r   r   g333333?r{   r   r^  ra  r   r8   r)   r_  r`  N)rE   r}   rF   r   re   r~   )
r   r   r8   r)   r+  rs  r   r   r   r9   s
             r!   test_arc__args_and_kwargs&DrawArcMixin.test_arc__args_and_kwargs  s(   ..( {{66* 
 NDJJtD "mmG>v>D"mmGEfE4"mmGDKFK$&"mmGDR6R%"mmGDXQWX"mmD@F !!+v{{;% Nr'   c                 D   [         R                  " S5      n[         R                  " S5      n[         R                  " S5      n[         R                  " SS5      nUR	                  5       R
                  Ul        UR                  S-   UR                  S-   4nUUUSSS	S
.nS H{  nSU 3nUR                  U5        XvS'   US:  a  UOUn	U R                  " S0 UD6n
U R                  UR                  U5      X5        U R                  U
[         R                  U5        M}     g	)z0Ensures draw arc accepts different width values.r   r   rz  r$   r   r   r   rt  Nr^  )ir   r  r  r,   r   r   r{   rv   rx   ry   zwidth=r   rQ   rE   r   r}   rF   r!  r   r"  r#  r   re   r   r   r~   )r   	arc_colorr   r   r)   r/   r   r   rU  r   r9   s              r!   test_arc__valid_width_values)DrawArcMixin.test_arc__valid_width_values  s   LL*	W-..({{66*&&(//llQq 00
 @E5'"CLL'#7O*/!)YN--1&1KW^^C0.F!!+v{{C@ @r'   c                 *   [         R                  " S5      n[         R                  " S5      n[         R                  " S5      n[         R                  " SS5      nUR	                  5       R
                  Ul        UR                  UR                  S-   4nUUUSSSS	.nS
 Hq  nSU 3nUR                  U5        XvS'   U R                  " S0 UD6n	U R                  UR                  U5      X5        U R                  U	[         R                  U5        Ms     g)z5Ensures draw arc accepts different stop_angle values.r   r   rz  r$   r   r   iNr^  )r         r,   r   r   r  rx   zstop_angle=r`  rQ   r}  )
r   r   r   r   r)   r/   r   r`  rU  r9   s
             r!   !test_arc__valid_stop_angle_values.DrawArcMixin.test_arc__valid_stop_angle_values#  s    f-W-..({{66*&&(//llDLL1,,#
 9J
|,CLL'#-< --1&1KW^^C0.F!!+v{{C@ 9r'   c                 0   [         R                  " S5      n[         R                  " S5      n[         R                  " S5      n[         R                  " SS5      nUR	                  5       R
                  Ul        UR                  S-   UR                  S-   4nUUUSSSS	.nS
 Hq  nSU 3nUR                  U5        XvS'   U R                  " S0 UD6n	U R                  UR                  U5      X5        U R                  U	[         R                  U5        Ms     g)z6Ensures draw arc accepts different start_angle values.r   r   rz  r$   r   r   N   r^  )g      $r  r,   r   r   r  g      $@zstart_angle=r_  rQ   r}  )
r   r   r   r   r)   r/   r   r_  rU  r9   s
             r!   "test_arc__valid_start_angle_values/DrawArcMixin.test_arc__valid_start_angle_values>  s    f-W-..({{66*&&(//llQq 00#
 >K .CLL'$/=!--1&1KW^^C0.F!!+v{{C@ >r'   c                    [         R                  " S5      n[         R                  " S5      n[         R                  " S5      n[         R                  " SS5      nUR	                  5       R
                  Ul        UR                  S-   UR                  S-   4nUUSSS	SS
.nXDR                  UR                  4UR                  UR                  UR                  UR                  44nU Hk  nUR                  U5        XFS'   U R                  " S0 UD6nU R!                  UR#                  U5      U5        U R%                  U[         R                  5        Mm     g)z0Ensures draw arc accepts different rect formats.r   r   rz  r$   r   r   Nr   rt  r^  r)   rQ   )rE   r   r}   rF   r!  r   r"  r#  r   rB   r   r   r   r   r   re   r   r   r~   )	r   r   r   r   r)   r/   r   r   r9   s	            r!   test_arc__valid_rect_formats)DrawArcMixin.test_arc__valid_rect_formatsY  s   e,W-..({{66*&&(//llQq 00#
 dii04664664664662RSDLL'!6N--1&1KW^^C0.A!!+v{{; r'   c                    [         R                  " S5      n[         R                  " S5      n[         R                  " S5      n[         R                  " SS5      nUR	                  5       R
                  Ul        UR                  S-   UR                  S-   4nUSUSS	SS
.nSSUR                  U5      U4nU H  nUR                  U5        XS'   [        U[        5      (       a  UR                  U5      n	OUn	U R                  " S0 UD6n
U R                  UR                  U5      U	5        U R!                  U
[         R                  5        M     g)z1Ensures draw arc accepts different color formats.r	   r   rz  r$   r   r   Nr   rt  r^  r   r   r8   rQ   )rE   r   r}   rF   r!  r   r"  r#  r   r   r   r   r   re   r   r   r~   )r   r   r   r   r)   r/   r   r  r8   r   r9   s              r!   test_arc__valid_color_formats*DrawArcMixin.test_arc__valid_color_formatst  s$   ll7+W-..({{66*&&(//llQq 00
 OOK(	
 ELL'#7O%%%!(!2!25!9!,--1&1KW^^C0.A!!+v{{; r'   c                    Sn[         R                  " S5      nUS[         R                  " US5      SSSS.nS	U 4 H7  nXCS
'   U R                  [        5         U R
                  " S0 UD6nSSS5        M9     g! , (       d  f       MK  = f)z9Ensures draw arc handles invalid color formats correctly.r   r   Nr   r   gffffff@r   r^  r   r8   rQ   )rE   r}   rF   r   r   re   r   s         r!   test_arc__invalid_color_formats,DrawArcMixin.test_arc__invalid_color_formats  s    ..(KKV,
  #DkN,7O""9-"mm5f5 .- * .-r  c                    [         R                  " S5      n[         R                  " S5      n[         R                  " S5      nUR                  U5        SnSnSnSn[         R                  R                  X2XEXg5        [         R                  R                  US5        S	n[        S
S5       H%  n	U R                  UR                  X45      U5        M'     U R                  UR                  S5      U5        g)z Ensure draw arc works correctly.r   r   )r  r  )r   r   r-  r  g        r
  rv   zarc.pngr   r{   r   r$   N)rE   r   r}   r   r   rd   imagesaver   r   r   )
r   r   r   r   r)   r_  r`  r   r   r   s
             r!   test_arcDrawArcMixin.test_arc  s    W%ll5! ..,U
  
  	dK 	'9- q!AW^^QF3S9  	/7r'   c                    [         R                  " S5      n[         R                  " S5      nS=p4S=pVX44XV44n[         R                  " SSS5      nUR                  5       n	U	R	                  US-  S	-   US-  S	-   5      n
SnSSS
S[
        R                  " S[
        R                  -  5      4n[        U	5      [        U
5      -    H  n[         H  nU H  u  nn[         R                  " SUU45      n[        UX5        SS	SS
[        UU5      4 H_  nU HV  nUR                  U5        U R                  UUUUUU5      n[        XUR                   5      nU R#                  UUSU 35        MX     Ma     M     M     M     g)z~Ensures draw arc returns the correct bounding rect.

Tests arcs on and off the surface and a range of width/thickness
values.
r   r   r   rt  ru  r   rv  r{   r   rv   r$   rL  N)rE   r   r}   r!  rw  mathceilpir*   rx  rF   ry  rC   r   re   rM   r   r   )r   r~  rG   rz  r{  r|  r}  r  r   r~  r  r_  stop_anglesr/   r  r   r   arc_rectr%  r`  r  r  s                         r!   test_arc__bounding_rect$DrawArcMixin.test_arc__bounding_rect  s    LL'	\\'*
!""	!""	(9*AB..1b1$$&	 $$Y]Q%6
Q8JK !Q499Q[#9:/
(23C
 1 &+ME6%{{6E6?CHHd0&'Aq#eV2D%E	*5J#LL4,0MM ' ) ( + * )-M -A 'X5E5E-M !,, - -",YK 8% +6 &F	 &+ 13r'   c           
      H  ^ S=nmSnSn[         R                  " S5      n[         R                  " S5      n[         R                  " UT45      nUR                  U5        [         R                  " SS5      nUR                  5       R                  Ul        UR                  5       nS H  n	[        U5       H  n
Xl        UR                  S	5        UR                  U5        U R                  XdXX95        [        XdU5      nUR                  U5        UR                  U5        U R                  XdXX95        UR                  5         U4S
 j[        U5       5        H.  nX;   a  UnOUnU R                  UR                  U5      X5        M0     UR!                  5         M     M     g	)z0Ensures draw arc respects a surface's clip area.r   r  r   r   r	   r$   r  r   Nc              3   P   >#    U  H  n[        T5        H  o!U4v   M
     M     g 7fr=  r>  r  s      r!   rA  6DrawArcMixin.test_arc__surface_clip.<locals>.<genexpr>-  r  rC  )rE   r   r}   r   rF   r!  r   rL  r*   r  re   r>   r6   r   r   r   r7   )r   r  r+  r,  r~  r   r   r  r  r%  r   r  r  r   r  s                 @r!   test_arc__surface_clip#DrawArcMixin.test_arc__surface_clip	  s\   LL'	W-..%0]#KK1	"++-44	>>#I6yA #)  &]+g(3R/IN ]+  +g(3R O5<NB))2)6$$W^^B%7L O  9 B  r'   rQ   N)rR   rS   rT   rU   rV   rP  rT  rX  r[  rb  re  ri  rl  ro  rt  rw  rz  r  r  r  r  r  r  r  r  r  rX   rQ   r'   r!   rM  rM    sy    
88?8"<68**>$D<<6|6>#<JA8A6A6<6#<J6&!8F8t,!r'   rM  c                       \ rS rSrSrSrg)DrawArcTesti8  zTest draw module function arc.

This class inherits the general tests from DrawArcMixin. It is also the
class to add any draw.arc specific tests to.
rQ   Nr  rQ   r'   r!   r  r  8  r  r'   r  c                   $    \ rS rSrSrS rS rSrg)DrawModuleTestiN  zGeneral draw module tests.c           
      f  ^ [         R                  " S5      m[         R                  " SSSS5      nSSS[        5       S 4n[	        U5      SS	/-   nUR                  S
 U 5       5        / SQn[        S5       VVs/ s H  n[        S5        H  oeU4PM     M     nnn[        R                  S4[        R                  S4[        R                  S44 GH2  u  pU GH%  n
[        R                  " T[        US5        U R                  [        5         U	(       a  U" T[        U
/U-   S5        OU" T[        SU
/U-   5        SSS5        U R!                  [#        U4S jU 5       5      5        [        R                  " T[        US5        U R                  [        5         USS U
/-   USS -   nU	(       a  U" T[        US5        OU" T[        SU5        SSS5        U R!                  [#        U4S jU 5       5      5        GM(     GM5     gs  snnf ! , (       d  f       N= f! , (       d  f       NT= f)z>Test validation of multi-point drawing methods.

See bug #521
r  r   r   texts   bytesy      ?      ?c                     U $ r=  rQ   )r   s    r!   rG  :DrawModuleTest.test_path_data_validation.<locals>.<lambda>]  s    qr'   r  r   c              3   *   #    U  H	  nS U4v   M     g7f)r   NrQ   )r?  vs     r!   rA  ;DrawModuleTest.test_path_data_validation.<locals>.<genexpr>`  s     5*Q1a&*s   )r   r   ru   r   r   TNc              3   T   >#    U  H  nTR                  U5      [        :H  v   M     g 7fr=  r   r1  r?  r  rF  s     r!   rA  r  t       #OYrDKKOs$:Y   %(r{   c              3   T   >#    U  H  nTR                  U5      [        :H  v   M     g 7fr=  r  r  s     r!   rA  r    r  r  )rE   r}   rF   objectr  extendr   r   rh   rl   r^   r)   r1  r   r   r1  r  all)r   r)   
bad_values
bad_points	good_pathr   r   	check_ptsmethod	is_polgonvalpathrF  s               @r!   test_path_data_validation(DrawModuleTest.test_path_data_validationQ  s   
 ~~f%{{1aA&H

 *%y(99
5*554	%*1X@XuQx!VxVX	@ ZZO\\1\\1"
F
 "		$T1-&&y1 tUSEI,=qAtUD3%)2CD	 2 #OY#O OP 		$T1-&&y1$Ra=C509QR=@D tUD!4tUD$7 2 #OY#O OP- ""
 A 21 21s   ; H/H6H"
H"
H0c                 B   [         R                  " S5      nSS[        SS4nSnU H  n[        R                  " XSS5        [        R
                  " XSS5        [        R                  " XS	U5        [        R                  " XS	U5        [        R                  " X[         R                  " S
S
SS5      SS5        [        R                  " X[         R                  " S
S
SS5      S5        [        R                  " XSS5        [        R                  " XUS
5        M     S[        5       S 4 GH  nU R                  [        5         [        R                  " XSS5        S S S 5        U R                  [        5         [        R
                  " XSS5        S S S 5        U R                  [        5         [        R                  " XS	U5        S S S 5        U R                  [        5         [        R                  " XS	U5        S S S 5        U R                  [        5         [        R                  " X[         R                  " S
S
SS5      SS5        S S S 5        U R                  [        5         [        R                  " X[         R                  " S
S
SS5      S5        S S S 5        U R                  [        5         [        R                  " XSS5        S S S 5        U R                  [        5         [        R                  " XUS
5        S S S 5        GM     g ! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GNv= f! , (       d  f       GNR= f! , (       d  f       GN= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       GMu  = f)Nrl  i@ )r   rx   r  z#ab12dfr   )r$   r   r   r$   r   Tr   rv   r8  r  rK  r   r  r{   gjt?)rE   r}   r1  r   rf   rj   rl   rh   rd   rF   rb   r`   r^   r  r   r   )r   rF  colorsr  cols        r!   test_color_validation$DrawModuleTest.test_color_validation  su   ~~h'sIu<) CIId0KK662LLD&1JJt$/HHTAq!Q 7SALLFKK1a$;Q?KK61-LLFA.  68T*C""9-		$VV4 . ""9-Dvv6 . ""9-Tf5 . ""9-

4dF3 . ""9-FKK1a$;RE . ""9-TAq!Q(?C . ""9-Dvq1 . ""9-T2 .-- +-- .- .- .- .- .- .- .-s`   L8L$.L6$M1M(0M,5M=+N
L!	$
L3	6
M	
M	
M)	,
M:	=
N	
N	rQ   N)rR   rS   rT   rU   rV   r  r  rX   rQ   r'   r!   r  r  N  s    $/Qb(3r'   r  __main__)NT)6r  unittestsysr  rE   r   r   pygame.localsr   pygame.testsr   pygame.mathr   r   r1  rd  r1  rb  rx  r"   r&   r*   r0   r>   rM   rO   TestCaserZ   ro   rr   r  r  r  r5  rt  r  r  rY  r  r  r+  r2  r7  r  r  r  r  r  rK  rM  r  r  rR   mainrQ   r'   r!   <module>r     sb     
     " #  ||E" "f<<( (
 	BN$'@8I: .8$$ .6** 6$W! W!t& ,'% '%Zk! k!rM/9l M/fw% w%HJ S- S@ML[, MLfW!= W!HlL  a&1a&1a&1a&	)
*FFFFFFFFFFFF	 M
 M
`& ,q	! q	!h=, ,oP oPd_l ,M	! M	!`, ,\3X&& \3D zMMO r'   