
Ic           @   s   d  Z  d d l Z d d l Z d d l Z d d l m Z m Z d e j f d     YZ d e j f d     YZ	 d e j f d	     YZ
 e d
 k r e j d d  Z e j d e  n  d S(   s5   Tests for Primer-based programs in the Emboss suite.
iN(   t   PrimerSearcht   Primer3t   Primer3ParseTestc           B   s5   e  Z d    Z d   Z d   Z d   Z d   Z RS(   c         C   sg   t  j j d d  t  j j d d  t  j j d d  t  j j d d  t  j j d d  g |  _ d  S(   Nt   Embosss   bac_find.primer3s   cds_forward.primer3s   cds_reverse.primer3s   short.primer3s   internal_oligo.primer3(   t   ost   patht   joint
   test_files(   t   self(    (    s   test_EmbossPrimer.pyt   setUp   s
    c         C   s>   x7 |  j  D], } t | d  } t j |  | j   q
 Wd S(   s7   Make sure that we can parse all primer3 files.
        t   rN(   R   t   openR   t   readt   close(   R   t   filet   h(    (    s   test_EmbossPrimer.pyt   test_simple_parse   s    c         C   s  |  j  d } t | d  } t j |  } | j   t | j  d k sc t d t | j    | j d j d k s t  | j d j	 d k s t  | j d j
 d	 k s t  | j d
 j d k s t  | j d
 j d k s t  | j d
 j d k st  | j d
 j d k s't  | j d j d k sCt  | j d j d k s_t  | j d j d k s{t  | j d j d k st  d S(   sB   Make sure we get the data from normal primer3 files okay.
        i    R
   i   s   Wrong number of primers: %si   t   CCGGTTTCTCTGGTTGAAAAi   t   TCACATTCCCAAATGTAGATCGi   i   ip   i   g)\M@g     F@i   i0  i   gGzM@gGztD@N(   R   R   R   R   R   t   lent   primerst   AssertionErrort   forward_seqt   reverse_seqt   sizet   forward_startt   forward_lengtht
   forward_tmt
   forward_gct   reverse_startt   reverse_lengtht
   reverse_tmt
   reverse_gc(   R   t   regular_fileR   t   primer_info(    (    s   test_EmbossPrimer.pyt   test_indepth_regular_parse   s&    
c         C   s   |  j  d } t | d  } t j |  } | j   t | j  d k sP t  | j d j d k sl t  | j d j	 d k s t  | j d j
 d k s t  d S(	   s?   Make sure we get info right from a single primer find.
        i   R
   i   t    i   t   TGTGATTGCTTGAGCTGGACi   N(   R   R   R   R   R   R   R   R   R   R   R   (   R   R   R   R"   (    (    s   test_EmbossPrimer.pyt   test_in_depth_single_parse9   s    
c         C   s   |  j  d } t | d  } t j |  } | j   t | j  d k sP t  | j d j d k sl t  | j d j	 d k s t  | j d j
 d	 k s t  | j d
 j d k s t  | j d j d k s t  d S(   s9    Make sure we can parse an internal oligo file correctly i   R
   i   i    i   i   t   TTGCGCTTTAGTTTGAATTGAAi   g(\OM@i   i   g     A@N(   R   R   R   R   R   R   R   R   t   internal_lengtht   internal_seqt   internal_tmt   internal_startt   internal_gc(   R   R   R   R"   (    (    s   test_EmbossPrimer.pyt    test_internal_oligo_single_parseG   s    
(   t   __name__t
   __module__R	   R   R#   R&   R-   (    (    (    s   test_EmbossPrimer.pyR      s
   					t   PrimersearchParseTestc           B   s#   e  Z d    Z d   Z d   Z RS(   c         C   s   t  j j d d  g |  _ d  S(   NR   s   bac_find.psearch(   R   R   R   R   (   R   (    (    s   test_EmbossPrimer.pyR	   X   s    c         C   s>   x7 |  j  D], } t | d  } t j |  | j   q
 Wd S(   s<   Make sure that we can parse all primersearch files.
        R
   N(   R   R   R    R   R   (   R   R   R   (    (    s   test_EmbossPrimer.pyR   \   s    c         C   s   |  j  d } t | d  } t j |  } | j   t | j j    d k sV t  d | j j   k sq t  t | j d  d k s t  | j d d j	 d k s t  | j d d j
 d d d d	 d
 d d k s t  d S(   sI   Make sure the output from a simple primersearch file is correct.
        i    R
   i   t   Testi   s   AC074298 AC074298 
s7   	Telomere associated sequence for Arabidopsis thaliana s,   TEL1N from chromosome I, complete sequence.
s6   	CCGGTTTCTCTGGTTGAAAA hits forward strand at 114 with s   0 mismatches
s:   	TCACATTCCCAAATGTAGATCG hits reverse strand at [114] with s   0 mismatchesN(   R   R   R    R   R   R   t
   amplifierst   keysR   t   lengtht   hit_info(   R   R   R   t   amp_info(    (    s   test_EmbossPrimer.pyt   test_in_depth_normal_parsed   s    
! (   R.   R/   R	   R   R7   (    (    (    s   test_EmbossPrimer.pyR0   W   s   		t   PrimerSearchInputTestc           B   s    e  Z d  Z d   Z d   Z RS(   s0   Test creating input files for primersearch.
    c         C   s   d  S(   N(    (   R   (    (    s   test_EmbossPrimer.pyR	   }   s    c         C   sX   t  j   } | j d d d  | j d d d  t |  } | d d k sT t  d	 S(
   s>   Make sure we can output primer information correctly.
        R1   t   GATCt   CATGt   Test2t   AATAt   TTATs   Test GATC CATG
s   Test2 AATA TTAT
N(   R    t   InputRecordt   add_primer_sett   strR   (   R   t   p_infot   output(    (    s   test_EmbossPrimer.pyt   test_primer_representation   s    (   R.   R/   t   __doc__R	   RC   (    (    (    s   test_EmbossPrimer.pyR8   z   s   	t   __main__t	   verbosityi   t
   testRunner(   RD   t   sysR   t   unittestt
   Bio.EmbossR    R   t   TestCaseR   R0   R8   R.   t   TextTestRunnert   runnert   main(    (    (    s   test_EmbossPrimer.pyt   <module>   s   J#