
    e7                     @   d dl Z d dlmZ d dlmZ d dlmZ d dlmZm	Z	 d dl
mZmZ dZd Zd	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z d Z!d Z"d Z#d Z$d Z%d  Z&d! Z'd" Z(d# Z)d$ Z*d% Z+d& Z,d' Z-d( Z.d) Z/d* Z0d+ Z1d, Z2d- Z3d. Z4dS )/    N)bind)Column)JPG)	FileInput	TextInput)ChatBoxChatRowz7https://assets.holoviz.org/panel/samples/jpg_sample.jpgc                 j   ddig}t          |                                          }|j        |k    sJ t          |          dk    sJ |j        }t          d |D                       sJ t          |          dk    sJ |d         j        dgk    sJ |d         j        d         j        dk    sJ d S )Nuser1Hellovalue   c              3   @   K   | ]}t          |t                    V  d S N
isinstancer	   .0rows     @lib/python3.11/site-packages/panel/tests/widgets/test_chatbox.py	<genexpr>z test_chat_box.<locals>.<genexpr>   ,      88Cz#w''888888    r   r   copyr   lenrowsall_bubbleobjectdocumentcommr   chat_boxr   s        r   test_chat_boxr&      s    	'E UZZ\\***H>U""""x==A=D88488888888t99>>>>7=WI%%%%7?1$//////r   c                 l   dddg}t          |                                          }|j        |k    sJ t          |          dk    sJ |j        }t          d |D                       sJ t          |          dk    sJ |d         j        dgk    sJ |d         j        d         j        dk    sJ d S )Nr   r   )rolecontentr   r   c              3   @   K   | ]}t          |t                    V  d S r   r   r   s     r   r   z4test_chat_box_role_content_format.<locals>.<genexpr>"   r   r   r   r   r"   s        r   !test_chat_box_role_content_formatr+      s    W--E UZZ\\***H>U""""x==A=D88488888888t99>>>>7=WI%%%%7?1$//////r   c                     dddg}t          j        t          d          5  t          |                                           d d d            d S # 1 swxY w Y   d S )Nr   r   )a_usermessagez(Expected a dictionary with one key-value)matchr   )pytestraises
ValueErrorr   r   )r#   r$   r   s      r   test_chat_box_invalid_formatr3   (   s    w//E 
z)S	T	T	T $ $ejjll####$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $s   #AAAc                    dg dig}t          |                                          }|j        |k    sJ t          |          dk    sJ |j        }t          d |D                       sJ t          |          dk    sJ |d         j        g dk    sJ |d         j        d         j        dk    sJ |d         j        d         j        dk    sJ |d         j        d	         j        d
k    sJ d S )Nuser2)Hi	GreetingsSalutationsr   r   c              3   @   K   | ]}t          |t                    V  d S r   r   r   s     r   r   z%test_chat_box_list.<locals>.<genexpr>8   r   r   r   r6   r7      r8   r   r"   s        r   test_chat_box_listr;   0   s   	4445E UZZ\\***H>U""""x==A=D88488888888t99>>>>7=>>>>>>>7?1$,,,,7?1$33337?1$555555r   c                     ddiddig}t          |                                          }|j        j        ddddk    sJ d S )	Nr   r   r5   r6   r   zcolumn-reverseauto)zflex-directionz
overflow-xz
overflow-y)r   r   	_chat_logstylesr#   r$   r   r%   s       r   test_chat_box_chat_log_overflowrA   @   sl    	'	$E UZZ\\***H$*) )      r   c                     t          t          d          g          }|j        sJ |j        d         }t	          |t                    sJ |j        dk    sJ |j        dk    sJ d S )NzCommunicate with files!)name)message_input_widgetsstretch_width)r   r   _send_button_message_inputsr   rC   sizing_mode)r#   r$   r%   message_inputs       r   test_chat_box_input_widgetsrJ   M   s    (.GHHHI  H     ,-FGMmY/////!:::::$777777r   c                 f    t                      }|j        g k    sJ t          |          dk    sJ d S )Nr   )r   r   r   r#   r$   r%   s      r   test_chat_box_emptyrM   X   s;    yyH>Rx==Ar   c                 :   ddiddig}t          |                                          }|j        |k    sJ t          |          dk    sJ ddig|_        |j        ddigk    sJ t          |          dk    sJ t          |j        j                  dk    sJ d S )	Nr   r   r5   r6   r   r:   r7   r   )r   r   r   r   r>   objectsr@   s       r   test_chat_box_refreshrP   ^   s    	'	$E UZZ\\***H>U""""x==A 
+HN >w455555x==Ax!)**a//////r   c                 
   ddiddig}t          |                                          }|j        |k    sJ t          |          dk    sJ |                                 |j        g k    sJ t          |          dk    sJ d S )Nr   r   r5   r6   r   r:   r   )r   r   r   r   clearr@   s       r   test_chat_box_clearrS   o   s    	'	$E UZZ\\***H>U""""x==ANN>Rx==Ar   c                    t          d          }|j        d         d         j        sJ |j        d         d         j        sJ d|_        |j        d         d         j        rJ |j        d         d         j        rJ d S )NT)disabledr   r   F)r   
_compositerU   rL   s      r   test_chat_box_disabledrW   |   s    %%%Hq!!$----q!!$----H"1%a(1111"1%a(111111r   c                    t          d          }|j        d         d         j        sJ |j        d         d         j        sJ d|_        |j        d         d         j        rJ |j        d         d         j        rJ d S )NT)loadingr   r   F)r   rV   rY   rL   s      r   test_chat_box_loadingrZ      s    t$$$Hq!!$,,,,q!!$,,,,H"1%a(0000"1%a(000000r   c                    t                      }|                    ddi           |                    ddi           |j        ddiddigk    sJ t          |          dk    sJ t          |j        j                  dk    sJ d S Nr   r   r5   r6   r:   )r   appendr   r   r>   rO   rL   s      r   test_chat_box_appendr^      s    yyHOOWg&'''OOWdO$$$>w07D/BBBBBx==Ax!)**a//////r   c                    d }t                      }t          ||          }t          ||          }|                    ddi           |                    ddi           |d                                         ddiddigk    sJ d S )Nc                     | S r    historys    r   updatez)test_chat_box_append_bind.<locals>.update   s    r   rb   r   r   r5   r6   )r   r   r   r]   r!   )r#   r$   rd   r%   resultcols         r   test_chat_box_append_bindrh      s       yyH&(+++F
6
"
"COOWg&'''OOWdO$$$r7>>	'	$       r   c                     t                      }|                    ddiddig           |j        ddiddigk    sJ t          |          dk    sJ d S r\   )r   extendr   r   rL   s      r   test_chat_box_extendrk      si    yyHOOgw''49:::>w07D/BBBBBx==Ar   c                    t                      }ddi}|                    d|           |j        |gk    sJ t          |          dk    sJ |                    dddi           |j        |ddigk    sJ t          |          dk    sJ d S )Nuserr   r   r   r:   r6   )r   insertr   r   )r#   r$   r%   r.   s       r   test_insertro      s    yyHwGOOAw>gY&&&&x==A OOA~&&&>g~66666x==Ar   c                 j   t                      }ddi}ddi}ddi}|                    |||g           |                                }||k    sJ |j        ||gk    sJ t	          |          dk    sJ |                    d          }||k    sJ |j        |gk    sJ t	          |          dk    sJ d S )Nrm   r   r6   Heyr:   r   r   )r   rj   popr   r   )r#   r$   r%   message1message2message3popped_messages          r   test_poprw      s    yyH H~HHOOXx2333 \\^^NX%%%%>h11111x==A \\!__NX%%%%>hZ''''x==Ar   c                     t                      }ddi}ddi}|                    ||g           ddi}|                    d|           |j        ||gk    sJ t	          |          dk    sJ d S )Nrm   r   r6   rq   r   r:   )r   rj   replacer   r   )r#   r$   r%   rs   rt   new_messages         r   test_replacer{      s    yyH H~HOOXx())) 5/KQ$$$>h44444x==Ar   c                     t          d          }|j        dk    sJ t          |j        d         t                    sJ t          |j                  dk    sJ d S )NTallow_inputr      )r   r~   r   rG   r   r   rV   rL   s      r   test_chat_box_allow_inputr      sf    4(((H4''''h.{;YGGGGGx"##q((((((r   c                     t          d          }|j        dk    sJ |j        i k    sJ |j        J t	          |j                  dk    sJ d S )NFr}   r:   )r   r~   rG   rF   r   rV   rL   s      r   test_chat_box_not_allow_inputr      sk    5)))H5((((#r)))) (((x"##q((((((r   c                     ddiddig}t          |                                d          }|j        dk    sJ |j        |k    sJ d|j        d         _        |j        |ddigz   k    sJ d S )	Nr   r   r5   r6   z
Panel User)r   primary_nameHello!r   r   r   r   r   rG   r@   s       r   test_chat_box_primary_namer      s    	'	$E UZZ\\EEEH L0000>U""""2:H[)/>U|X&>%????????r   c                     ddiddig}t          |                                          }|j        dk    sJ |j        |k    sJ d|j        d         _        |j        |ddigz   k    sJ d S )Nr   r   r5   r6   r   r   r   r   r@   s       r   #test_chat_box_inferred_primary_namer     s    	'	$E UZZ\\***H G++++>U""""2:H[)/>Uw&9%::::::::r   c                     ddiddig}t          |                                ddi          }|j        d         dk    sJ |j        d         dk    sJ d S )Nr   r   r5   r6   red)r   message_colors)zrgb(235, 235, 235)blackr   r   r   r@   s       r   test_chat_box_message_colorsr     sr    	'	$E UZZ\\7E:JKKKH"7+u4444"7+/NNNNNNNr   c                     ddiddig}t          |                                ddid          }|j        d         dk    sJ |j        d         d                             d	          sJ d S )
Nr   r   r5   r6   r      r   r   message_huer   hsl)r   r   r   
startswithr@   s       r   %test_chat_box_message_colors_with_huer     s    	'	$E jjllGU+;  H "7+u4444"7+A.99%@@@@@@@r   c                 b   ddiddiddiddiddig}t          |                                ddid	
          }|j        d         dk    sJ |j        d         d         dk    sJ |j        d         d         dk    sJ |j        d         d         dk    sJ |j        d         d         dk    sJ d S )Nr   r   r5   r6   user3user4user5r   i"  r   r   zhsl(290, 15%, 60%)zhsl(290, 30%, 55%)zhsl(290, 45%, 50%)zhsl(18, 15%, 60%)r   r@   s       r   test_chat_box_generate_colorr   (  s    	'	$	$	$	$E jjllGU+;  H "7+u4444"7+A.2FFFFF"7+A.2FFFFF"7+A.2FFFFF"7+A.2EEEEEEEr   c                     ddiddig}t          |                                dt          i          }|j        d         t          k    sJ d|j        vsJ d S )Nr   r   r5   r6   )r   message_icons)r   r   JPG_FILEr   r@   s       r   test_chat_box_user_iconsr   :  sl    	'	$E UZZ\\'89LMMMH!'*h6666(0000000r   c                     ddiddiddig}t          |                                          }|j        d         j        j        dk    sJ |j        d         j        j        dk    sJ |j        d         j        J d S )	Nr   r   r5   r6   r   r   r   r:   )r   r   r   _namer!   r@   s       r   test_chat_box_show_namer   D  s     
'	$	$E
 UZZ\\***H=!(G3333=!(G3333=!)))))r   c                     ddiddiddig}t          |                                d          }|j        d         j        J |j        d         j        J |j        d	         j        J d S )
Nr   r   r5   r6   F)r   
show_namesr   r   r:   )r   r   r   r   r@   s       r   test_chat_box_show_namesr   R  s     
'	$	$E
 UZZ\\e<<<H=!)))=!)))=!)))))r   c                     ddiddig}t          |                                d          }|j        d         j        j        rJ d S )Nr   r   r5   r6   F)r   allow_likesr   )r   r   r   _likevisibler@   s       r   test_chat_box_allow_likesr   `  sS    	'	$E UZZ\\u===H}Q%------r   c                 p   t          dddidddgigd          }d|j        d	         _        d|j        d
         _        |                    ddi           |j        d
         j        sJ ddiddiddig|_        |j        d	         j        sJ |j        d
         j        rJ |j        d
         j        rJ dS )zh
    Like disappears after appending a new message
    https://github.com/holoviz/panel/issues/5050
    ChatYour   BotHow may I help?
I'm a bot.TrC   r   r   r   r   Do I still like your message?zNo longer do I do...Nr   r   likedr]   r   rL   s      r   test_chat_box_keeps_likesr   i  s    
 x 5+<l*K"LM  H "HM!!HM!OOU;<====!!!! 
	&'	/0HN
 =!!!!}Q%%%%}Q%%%%%%r   c                    t          dddidddgigd          }d|j        d	         _        |                    dd
i           |j        d	         j        sJ ddiddig|_        |j        d	         j        rJ |j        d         j        dgk    sJ |j        d	         j        dgk    sJ |j        ddiddigk    sJ dS )z5
    Ensure replacing it with new messages works
    r   r   r   r   r   r   Tr   r   r   zHey!Byer   Nr   rL   s      r   test_chat_box_replace_valuer     s     x 5+<l*K"LM  H
 "HM!OOU;<====!!!!fou~6HN}Q%%%%=!fX----=!eW,,,,>ufou~>>>>>>>r   c                     t          dgdddid          }|j        }|j        dk    sJ |j        dk    sJ |j        J |j        }|d         j        dk    sJ d S )	Nr   r   
backgroundr   T)r   rC   r?   	show_name)startr   r   )r	   r   r!   align_iconr    )r#   r$   chat_rowrC   bubbles        r   test_chat_rowr     s    ig|W.EQU  H >D;'!!!!:+++++>!!!F!9w&&&&&&r   c                 v    t          t          g          }t          |j        d         t                    sJ d S )Nr   r   )r	   r   r   r    r   r#   r$   r   s      r   test_chat_row_image_messager     s8    hZ(((Hh&q)3///////r   c                 F   t          dgd          }|j        rJ |j        j        rJ |j        j        dk    sJ d|j        _        |j        sJ |j        j        sJ |j        j        dk    sJ d|_        |j        rJ |j        j        rJ |j        j        dk    sJ d S )Nr   r   )r   rC   u   ♡Tu   ❤️F)r	   r   r   r   rC   r   s      r   test_chat_row_update_liker     s    gYW555H~~####>%''''  HN>>>(**** HN~~####>%''''''r   c                 H    t          dgdd          }|j        j        rJ d S )Nr   r   F)r   rC   	show_like)r	   r   r   r   s      r   test_chat_row_hide_liker     s/    gYWFFFH~%%%%%%r   c                     t          dt          d          gt                    }|j        D ]}t          |t                    sJ d S )Nr   Inputr   )r   default_message_callable)r	   r   r    r   )r#   r$   r   objs       r   &test_chat_row_default_message_callabler     sb    	0001I  H  * *#y))))))* *r   c                 P    t          dgdd          }|j        j        dk    sJ d S )Nr   r   end)r   rC   r   )r   r   )r	   r   r   r   s      r   test_chat_row_align_endr     s5    gYWEBBBH>#3333333r   c                 >    t          dgdd          }|j        J d S )Nr   r   Fr   rC   r   )r	   r   r   s      r   test_chat_row_not_show_namer     s,    gYWFFFH>!!!!!r   c                 \    t          dgdd          }|j        d         j        dk    sJ d S )Nr   r   Fr   r   rE   )r	   r    rH   r   s      r   ,test_chat_row_bubble_obj_sizing_mode_defaultr     s:    gYWFFFHA*o======r   c                     t          ddd          }t          |gdd          }|j        d         j        dk    sJ d S )	Nfixedi,  d   )rH   widthheightr   Fr   r   )r   r	   r    rH   )r#   r$   widgetr   s       r   (test_chat_row_bubble_obj_sizing_mode_setr     sN    7#cBBBFfXGuEEEHA*g555555r   )5r0   panel.dependsr   panel.layoutr   
panel.paner   panel.widgetsr   r   panel.widgets.chatboxr   r	   r   r&   r+   r3   r;   rA   rJ   rM   rP   rS   rW   rZ   r^   rh   rk   ro   rw   r{   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   ra   r   r   <module>r      s                      . . . . . . . . 2 2 2 2 2 2 2 2D0 0 00 0 0$ $ $6 6 6 
 
 
8 8 8  0 0 0"
 
 
2 2 21 1 10 0 0    
 
 
  (
 
 
) ) )) ) )
@ 
@ 
@
; 
; 
;O O O
A 
A 
AF F F$1 1 1* * ** * *. . .& & &6? ? ?*' ' '0 0 0
( ( ((& & &
* * *4 4 4
" " "
> > >
6 6 6 6 6r   