mò
ú]+Hc           @   sR   d  k  Z  d  k Z d  k Z d k l Z d f  d „  ƒ  YZ d f  d „  ƒ  YZ d  S(   N(   s   DeejaydErrort   InterfaceTestsc           B   sƒ   t  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 RS(   sy   Test the deejayd daemon core interface, this test suite is to be used for testing the core facade and the client library.c         C   sŒ   |  i i ƒ  } |  i i | ƒ } |  i t | i	 ƒ d } |  i i | ƒ } |  i | i	 ƒ  ƒ |  i i ƒ  i	 ƒ  } |  i | d | ƒ d S(   s   Test setMode commandt   playlistt   modeN(   t   selft   testdatat   getRandomStringt	   mode_namet   deejaydt   set_modet   anst   assertRaisest   DeejaydErrort   get_contentst
   known_modet
   failUnlesst
   get_statust   statust   assertEqual(   R   R   R   R	   R   (    (    tU   /mnt/perso/roy/Documents/Repository/deejayd--release/src/testdeejayd/coreinterface.pyt   testSetMode   s     c         C   sf   d } |  i i ƒ  } xJ | D]B } |  i | | i ƒ  i ƒ  j ƒ |  i t	 | | ƒ d	 j ƒ q Wd S(
   s   Test getMode commandR   t   dvdt   webradiot   videoi    i   N(   s   playlists   dvds   webradios   video(   i    i   (
   t
   known_keysR   R   t   get_modeR	   t   kR   R   t   keyst   int(   R   R   R   R	   (    (    R   t   testGetMode.   s      c         C   s=   |  i i ƒ  } x' d D] } |  i | | i ƒ  j ƒ q Wd S(   s   Test getStats commandt   audio_library_updatet   songst   artistst   albumsN(   R   s   songss   artistss   albums(   R   R   t	   get_statsR	   R   R   R   (   R   R   R	   (    (    R   t   testGetStats6   s
      c         C   s¤  g  }
 |  i i ƒ  } |  i i ƒ  } |  i | i	 ƒ  i
 ƒ  |
 ƒ | i |  i i ƒ  ƒ } |  i t | i ƒ d } xI |  i i | ƒ D]5 } |
 i | ƒ | i | ƒ } |  i | i ƒ  ƒ q„ W|  i |  i i ƒ  d | ƒ | i | ƒ } |  i | i ƒ  ƒ |  i i ƒ  i
 ƒ  } |  i | g  } | D] } | | d q%~ j ƒ |  i i | ƒ } | i	 ƒ  i
 ƒ  }	 x6 t t |
 ƒ ƒ D]" } |  i |
 | |	 | d ƒ qzWd S(   s'   Save a playlist and try to retrieve it.i   t   playlistlengtht   namet   pathN(    t   plR   R   R   t   djplnameR   t   get_playlistt   djplR   t   gett
   get_mediast   add_songR	   R
   R   R   t   howManySongst   test_audiodatat   getRandomSongPathst   songPatht   appendR   R   t   savet   get_playlist_listt   retrievedPlst   _[1]t   pt   retrievedPlt   ranget   lent   song_nb(   R   R:   R4   R'   R)   R5   R6   R0   R	   R7   R&   R-   (    (    R   t   testPlaylistSaveRetrieve<   s0      2 c   
      C   sþ  |  i i ƒ  } xR |  i i d ƒ g g D]8 } | i |  i i ƒ  | d ƒ } |  i	 t
 | i ƒ q( W|  i i ƒ  } d |  i i d ƒ } | i | | ƒ } |  i | i ƒ  ƒ | d 7} |  i i ƒ  } g  } | i ƒ  i ƒ  D] } | | d qÞ ~ } |  i | | j ƒ g  } | i ƒ  i ƒ  D]" } | d | j o | | q"q"~ d }	 |  i | |	 d ƒ | i d ƒ } |  i	 t
 | i ƒ | i |	 d ƒ } |  i | i ƒ  ƒ |  i i ƒ  i ƒ  i ƒ  } |  i | g  } | D] } | | d qÜ~ j ƒ d	 S(
   s<   Save a webradio and check it is in the list, then delete it.i2   i    s   http://s   -1t   titlet   urli3   t   idN(   R   R   t   get_webradiost   wr_listR   R   t   badURIt   add_webradioR	   R
   R   R   t
   testWrNamet
   testWrUrlsR   R5   R*   R+   t   wrt   wr_namest   retrievedWrR   t   delete_webradiot   failIf(
   R   RC   R@   RA   R5   RE   RF   R	   RD   RG   (    (    R   t   testWebradioAddRetrievea   s.      
1Fc         C   s  |  i i ƒ  } g  } d } xI |  i i | ƒ D]5 } | i	 | ƒ | i
 | ƒ }	 |  i |	 i ƒ  ƒ q. W| i ƒ  }
 g  } |
 i ƒ  D] } | | d q„ ~ } x! | D] } |  i | | j ƒ q¥ Wt i t i ƒ  ƒ t i | | d ƒ } | i g  } |
 i ƒ  D]& } | d | j o | | d qq~ ƒ }	 |  i |	 i ƒ  ƒ | i ƒ  }
 g  } |
 i ƒ  D] } | | d qd~ } xE | D]= } | | j o |  i | | j ƒ q…|  i | | j ƒ q…W| i ƒ  }	 |  i |	 i ƒ  ƒ | i ƒ  }
 |  i |
 i ƒ  g  ƒ d S(   sS   Add songs to the queue, try to retrieve it, delete some songs in it, then clear it.i
   R%   i   R>   N(   R   R   t	   get_queuet   qt   myqt   how_many_songsR.   R/   t	   song_pathR1   t	   add_mediaR	   R   R   R*   t   ddqR5   R+   t   songt	   ddq_pathst   randomt   seedt   timet   samplet   songs_to_deletet	   del_songsRI   t   clearR   (   R   RS   RR   RM   RX   RL   RO   R5   RN   R	   RQ   (    (    R   t	   testQueue”   s:      + I+ c         C   s  |  i i ƒ  } |  i i ƒ  } | i | d ƒ } |  i	 t
 | i ƒ |  i i ƒ  } |  i i | i ƒ  ƒ } | i | d ƒ i ƒ  | i ƒ  i ƒ  } |  i t | ƒ t | i ƒ  ƒ ƒ |  i i ƒ  } | i | d ƒ i ƒ  | i ƒ  i ƒ  } |  i t | ƒ d ƒ d S(   s    Test video source actions t	   directoryt   searchi    N(   R   R   t	   get_videot	   video_objR   R   t   rand_dirt   setR	   R
   R   R   t   get_video_dirt   getRandomElementt   get_directoriest   dirR*   R+   t
   video_listR   R9   t	   get_filest   rand(   R   Rh   R`   Rf   R	   R_   Re   (    (    R   t	   testVideo¸   s     "c         C   s  |  i i ƒ  } |  i i | ƒ } |  i t | i	 ƒ |  i i ƒ  } |  i i
 | i ƒ  ƒ } |  i i | ƒ } | i ƒ  } |  i t | ƒ d j ƒ |  i i ƒ  } |  i i | ƒ } |  i | i ƒ  g  ƒ |  i i
 | ƒ } |  i i | d ƒ } |  i t | i ƒ  ƒ d j ƒ d S(   s6    Test request on audio library (get_audio_dir, search)i    R<   N(   R   R   R   R`   R   t   get_audio_dirR	   R
   R   R   Rc   Rd   Re   Rg   t
   song_filesR   R9   t   textt   audio_searchR   t   file(   R   R`   Rl   Rn   R	   Rk   Re   (    (    R   t   testAudioLibraryÐ   s     c         C   s–   |  i i ƒ  } |  i i | ƒ } |  i t | i	 ƒ |  i i ƒ  } |  i i
 | i ƒ  ƒ } |  i i | ƒ } | i ƒ  } |  i t | ƒ d j ƒ d S(   s    Test request on video library i    N(   R   R   R   R`   R   Rb   R	   R
   R   R   Rc   Rd   Re   Rg   t   filesR   R9   (   R   Rp   R`   R	   Re   (    (    R   t   testVideoLibraryè   s     c         C   s‘   |  i i ƒ  } |  i i | d ƒ } |  i t | i	 ƒ |  i i
 d ƒ } |  i i | d ƒ i	 ƒ  } |  i i ƒ  i	 ƒ  } |  i | | d ƒ d S(   s    Test set_option commandsi   RT   t   repeatN(   s   randoms   repeat(   R   R   R   t   optR   t
   set_optionR	   R
   R   R   Rc   R   R   R   (   R   Rs   R   R	   (    (    R   t   testSetOptionö   s     c         C   sè  d } |  i i | ƒ } |  i | i ƒ  ƒ |  i i ƒ  i ƒ  } |  i	 | d | ƒ |  i i
 ƒ  } |  i i ƒ  } |  i i | i ƒ  ƒ } | i | g ƒ i ƒ  |  i i d ƒ i ƒ  |  i i ƒ  i ƒ  |  i i ƒ  i ƒ  } |  i	 | d d ƒ |  i i ƒ  i ƒ  |  i i ƒ  i ƒ  } |  i	 | d d ƒ |  i i ƒ  i ƒ  |  i i ƒ  i ƒ  |  i i ƒ  i ƒ  |  i i ƒ  i ƒ  } |  i	 | d d ƒ |  i i d ƒ i ƒ  |  i i ƒ  i ƒ  } |  i	 t | ƒ d ƒ |  i i ƒ  i ƒ  d S(	   s2    Test player commands (play, pause,...) for audio i   t   volumeR   t   statet   playt   pausei   N(   t   volR   R   t
   set_volumeR	   R   R   R   R   R   R(   R)   Rj   R   Rc   Rd   Re   t	   add_songsR   t   play_togglet   nextt   previoust   seekt   get_currentR+   t   curR9   t   stop(   R   R   R‚   Rz   R)   R	   Re   (    (    R   t   testAudioPlayer  s4     c         C   sÿ   |  i i ƒ  } |  i i d ƒ i ƒ  |  i i ƒ  } |  i i	 | i
 ƒ  ƒ } | i | d ƒ i ƒ  |  i i ƒ  i ƒ  |  i i ƒ  i ƒ  } |  i | d d ƒ |  i i d d ƒ i ƒ  |  i i |  i i ƒ  d ƒ } |  i t | i ƒ |  i i ƒ  i ƒ  d S(	   s2    Test player commands (play, pause,...) for video R   R\   Rw   Rx   t	   av_offsetid   i    N(   R   R   R^   R_   R   R   Rb   R	   R   Rc   Rd   Re   Ra   R}   R   R   R   t   set_player_optionR   R
   R   Rƒ   (   R   R   R	   R_   Re   (    (    R   t   testVideoPlayer,  s     c         C   sc   |  i i ƒ  i ƒ  } | d } |  i i ƒ  i ƒ  |  i i ƒ  i ƒ  } |  i | d | d ƒ d S(   s    Test dvd commandsR   i   N(   R   R   R   R   R   t   dvd_idt
   dvd_reloadR   (   R   R   Rˆ   (    (    R   t   testDvdD  s     
(   t   __name__t
   __module__t   __doc__R   R   R"   R;   RJ   R[   Ri   Ro   Rq   Ru   R„   R‡   RŠ   (    (    (    R   R       s    				%	3	$					)	t   InterfaceSubscribeTestsc           B   s}   t  Z d  Z d „  Z f  d „ Z d „  Z d „  Z d „  Z d „  Z d „  Z	 d „  Z
 d	 „  Z d
 „  Z d „  Z d „  Z RS(   sP   Test the subscription interface. This is for the core and the async client only.c            s•   t  i ƒ  ‰  |  i |  i i ƒ  h  ƒ |  i i d ‡  d †  ƒ } |  i	 | d f |  i i ƒ  i
 ƒ  j ƒ |  i i | ƒ |  i |  i i ƒ  h  ƒ d S(   s1   Checks that signals subscriptions get in and out.s   player.statusc            s
   ˆ  i ƒ  S(   N(   t   server_notificationRa   (   t   x(   R   (    R   t   <lambda>X  s    N(   t	   threadingt   EventR   R   R   R   t   get_subscriptionst	   subscribet   sub_idR   t   itemst   unsubscribe(   R   R–   R   (    (   R   R   t   test_subscriptionQ  s     (c            s–   t  i ƒ  ‰  |  i i | ‡  d †  ƒ } | | Œ  } | o | i ƒ  n ˆ  i d ƒ |  i ˆ  i ƒ  d | | i f ƒ ˆ  i ƒ  |  i i | ƒ d S(   sP   Checks that signal_name signal is broadcast when one of the trigger is involved.c            s
   ˆ  i ƒ  S(   N(   R   Ra   (   R   (   R   (    R   R‘   d  s    i   s$   %s signal was not broadcasted by %s.N(   R’   R“   R   R   R   R•   t   signal_nameR–   t   triggert   trigger_argsR	   R   t   waitR   t   isSetR‹   RZ   R˜   (   R   Rš   R›   Rœ   R–   R   R	   (    (   R   R   t   generic_sub_bcast_test_  s     
c         C   s   |  i i f  f |  i i d	 f |  i i d
 f |  i i d f |  i i d f f } x) | D]! } |  i d | d | d ƒ qX Wd S(   s2   Checks that player.status signals are broadcasted.RT   i   Rr   i3   i   s   player.statusi    N(   s   randomi   (   s   repeati   (   i3   (   i   (	   R   R   R}   Rt   R{   R€   t   trigger_listt   trigRŸ   (   R   R    R¡   (    (    R   t    test_sub_broadcast_player_statusq  s
     Q c         C   sT   |  i i f  f |  i i f  f f } x) | D]! } |  i d | d | d ƒ q+ Wd S(   s3   Checks that player.current signals are broadcasted.s   player.currenti    i   N(   R   R   R~   R   R    R¡   RŸ   (   R   R    R¡   (    (    R   t!   test_sub_broadcast_player_current~  s
     $ c         C   s–   |  i i ƒ  } |  i i ƒ  } |  i i | i ƒ  ƒ } | i
 | g f f | i f  f | i f  f f } x) | D]! } |  i d | d | d ƒ qm Wd S(   s4   Checks that player.plupdate signals are broadcasted.s   player.plupdatei    i   N(   R   R   R(   R)   Rj   R	   R   Rc   Rd   Re   R|   t   shuffleRZ   R    R¡   RŸ   (   R   R¡   R)   R	   R    Re   (    (    R   t"   test_sub_broadcast_player_plupdateˆ  s     0 c         C   sé   |  i i ƒ  } |  i i ƒ  } |  i i | i ƒ  ƒ } | i
 | g ƒ i ƒ  |  i i ƒ  } |  i d | i | f ƒ |  i i | ƒ } | i f  f | i f  f |  i i | g f f f } x) | D]! } |  i d | d | d ƒ qÀ Wd S(   s4   Checks that playlist.update signals are broadcasted.s   playlist.updatei    i   N(   R   R   R(   R)   Rj   R	   R   Rc   Rd   Re   R|   R   R   t   test_pl_nameRŸ   R2   t
   saved_djplR¤   RZ   t   erase_playlistR    R¡   (   R   R    R§   R)   R	   R¦   R¡   Re   (    (    R   t"   test_sub_broadcast_playlist_update—  s     	3 c         C   s»   |  i i ƒ  } |  i i ƒ  } d |  i i d ƒ } |  i d | i	 | | f ƒ g  } | i ƒ  i ƒ  D]& } | d | d j o | | qg qg ~ d } |  i d | i | d f ƒ d S(	   s8   Checks that webradio.listupdate signals are broadcasted.s   http://i2   s   webradio.listupdateR<   s   -1i    R>   N(   R   R   R?   R@   R   R   t   test_wr_namet   test_wr_urlsRŸ   RB   R5   R*   R+   RE   t   retrieved_wrRH   (   R   R¬   R@   R5   RE   Rª   R«   (    (    R   t&   test_sub_broadcast_webradio_listupdate®  s     	J	c         C   s    |  i i ƒ  } |  i i ƒ  } |  i i | i ƒ  ƒ } |  i
 d | i | g f ƒ g  } | i ƒ  i ƒ  D] } | | d qi ~ } |  i
 d | i | f ƒ d S(   s1   Checks that queue.update signals are broadcasted.s   queue.updateR>   N(   R   R   RK   RL   Rj   R	   R   Rc   Rd   Re   RŸ   t
   add_mediasR5   R*   R+   RR   t   retrieved_song_idRY   (   R   R5   R¯   RR   RL   R	   Re   (    (    R   t   test_sub_broadcast_queue_update¿  s     1	c         C   s   |  i d |  i i f  ƒ d S(   s/   Checks that dvd.update signals are broadcasted.s
   dvd.updateN(   R   RŸ   R   R‰   (   R   (    (    R   t   test_sub_broadcast_dvd_updateÍ  s     c         C   s   |  i d |  i i d ƒ d S(   s)   Checks that mode signals are broadcasted.R   R   N(   s   video(   R   RŸ   R   R   (   R   (    (    R   t   test_sub_broadcast_modeÑ  s     c         C   s   |  i d |  i i ƒ d S(   s4   Checks that mediadb.aupdate signals are broadcasted.s   mediadb.aupdateN(   R   RŸ   R.   t   addMedia(   R   (    (    R   t"   test_sub_broadcast_mediadb_aupdateÕ  s     	c         C   s   |  i d |  i i ƒ d S(   s4   Checks that mediadb.vupdate signals are broadcasted.s   mediadb.vupdateN(   R   RŸ   t   test_videodataR³   (   R   (    (    R   t"   test_sub_broadcast_mediadb_vupdateÜ  s     	(   R‹   RŒ   R   R™   RŸ   R¢   R£   R¥   R©   R­   R°   R±   R²   R´   R¶   (    (    (    R   RŽ   N  s    			
							(   RV   RT   R’   t   deejayd.interfacesR   R    RŽ   (   RŽ   R    RT   R’   R   RV   (    (    R   t   ?   s
   	ÿ 5