
X_Sp.                 @   s   d  Z  d d l Z d d l Z d d l Td d l m Z d d l TGd d   d e j  Z	 Gd d   d e j  Z
 Gd	 d
   d
 e j  Z Gd d   d e j  Z Gd d   d e j  Z Gd d   d e j  Z e d k r e j   n  d S)zUnit test for Scop    N)*)StringIOc               @   sX   e  Z d  Z d d   Z d d   Z d d   Z d d   Z d	 d
   Z d d   Z d S)	test_scopc             C   s  t  d  } zT | j   } | j   t  d  } | j   } | j   t  d  } | j   } Wd  | j   Xt j t |  t |  t |   } t   } | j |  | j   | k s t | j     t   } | j	 |  | j   | k s	t | j     t   } | j
 |  | j   | k sCt | j     | j d }	 |  j |	 j d  | j }
 |  j t |
  d  |  j |
 d j d  |  j d | j k  |  j d
 | j k  d  S)Nzscop/dir.cla.scop.txt_testzscop/dir.des.scop.txt_testzscop/dir.hie.scop.txt_testd1hbia_i:        i:  o   zno such domaini)testdata_streamreadcloseScopparse_filesr   	write_clagetvalueAssertionError	write_des	write_hiedomains_by_sidassertEqualsuniddomainslenassertFalsenodes_by_sunid)selffcladeshiescopZcla_outZdes_outZhie_outdomainr    r!   J/Users/gec/Work/Projects/corebioproj/weblogo-3.4/test_corebio/test_scop.py	testParse'   s6    

'	$	$	$	ztest_scop.testParsec             C   s   |  j  t d d  d  |  j  t d d  d  |  j  t d d  d
  |  j  t d d  d  |  j  t d d  d  |  j  t d d  d  |  j  t d d	  d  d  S)Nza.1.1.1r   za.1.1.2   za.1.1.11za.1.2.2za.5.1.11zb.1.2.2zb.1.2r%   )r   cmp_sccs)r   r!   r!   r"   testSccsOrderM   s    ztest_scop.testSccsOrderc             C   s   |  j  t d d  d  |  j  t d d  d  |  j  t d d  d  |  j  t d d  d  |  j  t d d  d
  |  j  t d d  d  |  j  t d d	  d  d  S)Nza.1.1.1r$   za.1.1.2za.1.1.11za.1.2.2r   za.5.1.11zb.1.2.2zb.1.2r%   r%   )r   sccs_relation)r   r!   r!   r"   test_sccs_relationsV   s    ztest_scop.test_sccs_relationsc             C   sw   t  j j t  j j t  d d  } t j d | d d  } |  j t | t   | j	 d } |  j
 | j d  d  S)Nr   z	data/scopdir_pathversiontestr   i:  )ospathjoinsplit__file__r   parse
assertTrue
isinstancer   r   r   )r   r*   r   r    r!   r!   r"   testConstructFromDirectorya   s
    %z$test_scop.testConstructFromDirectoryc             C   s   t  j j t  j j t  d d  } t j d | d d  } | j d } | j d  } |  j	 | j
 d  | j d	  } |  j	 | j
 d
  | j d  } |  j | d  k  | j d  } |  j | d  k  d  S)Nr   z	data/scopr*   r+   r,   r   cfiy  superfamilyiz  px)r-   r.   r/   r0   r1   r   r2   r   	ascendentr   r   r3   )r   r*   r   r    foldsfr8   Zpx2r!   r!   r"   testGetAscendenth   s    %ztest_scop.testGetAscendentc             C   s   t  j j t  j j t  d d  } t j d | d d  } | j d } | j d  } |  j	 t
 |  d  x! | D] } |  j	 | j d  qv W| j d	  } |  j	 t
 |  d
  x! | D] } |  j	 | j d  q W| j d  } |  j	 | g   d S)zTest getDescendents methodr   z	data/scopr*   r+   r,   iy  r8   r   r7   r$   r;   clN)r-   r.   r/   r0   r1   r   r2   r   descendentsr   r   type)r   r*   r   r:   r   dZsfsr=   r!   r!   r"   test_get_descendentsz   s    %ztest_scop.test_get_descendentsN)	__name__
__module____qualname__r#   r'   r)   r5   r<   rA   r!   r!   r!   r"   r   %   s   &	r   c               @   sL   e  Z d  Z d d   Z d d   Z d d   Z d d   Z d	 d
   Z d S)DesTestsc             C   s&   t  d  } | j |  _ | j   d  S)Nzscop/dir.des.scop.txt_test)r	   namefilenamer   )r   filer!   r!   r"   setUp   s    zDesTests.setUpc          
   C   sV   t  |  j  A } d } x! t j |  D] } | d 7} q( W|  j | d  Wd  QXd  S)Nr   r$      )openrG   	DesRecordrecordsr   )r   r   countrecr!   r!   r"   
test_parse   s
    zDesTests.test_parsec             C   s[   t  |  j  F } x< | D]4 } t |  } |  j t |  j   | j    q WWd  QXd  S)N)rK   rG   rL   r   strrstrip)r   r   linerO   r!   r!   r"   testStr   s    zDesTests.testStrc             C   s   d } |  j  t t |  d  S)Nz49268	sp	b.1.2.1	-
)assertRaises
ValueErrorrL   )r   
corruptRecr!   r!   r"   	testError   s    zDesTests.testErrorc             C   s   d } d } t  |  } |  j | j | d  |  j | j | d  |  j | j | d	  |  j | j | d
  |  j | j | d  d  S)Nz,49268	sp	b.1.2.1	-	Human (Homo sapiens)    
t  spb.1.2.1 Human (Homo sapiens)r   r$         r   )rY   zspr[   r\   r]   )rL   r   r   nodetypesccsrF   description)r   recLineZ	recFieldsrO   r!   r!   r"   
testRecord   s    zDesTests.testRecordN)rB   rC   rD   rI   rP   rT   rX   rd   r!   r!   r!   r"   rE      s
   rE   c               @   sL   e  Z d  Z d d   Z d d   Z d d   Z d d   Z d	 d
   Z d S)test_scop_clac             C   s&   t  d  } | j |  _ | j   d  S)Nzscop/dir.cla.scop.txt_test)r	   rF   rG   r   )r   rH   r!   r!   r"   rI      s    ztest_scop_cla.setUpc          
   C   sV   t  |  j  A } d } x! t j |  D] } | d 7} q( W|  j | d  Wd QXd S)zCan we parse a CLA file?r   r$   r   N)rK   rG   	ClaRecordrM   r   )r   r   rN   rO   r!   r!   r"   r#      s
    ztest_scop_cla.testParsec             C   s[   t  |  j  F } x< | D]4 } t |  } |  j t |  j   | j    q WWd  QXd  S)N)rK   rG   rf   r   rQ   rR   )r   r   rS   rO   r!   r!   r"   rT      s    ztest_scop_cla.testStrc             C   s   d } |  j  t t |  d  S)Nz49268	sp	b.1.2.1	-
)rU   rV   rf   )r   rW   r!   r!   r"   rX      s    ztest_scop_cla.testErrorc          
   C   s   d } t  |  } |  j | j d  |  j | j j d  |  j | j j d  |  j | j d	  |  j | j d
  |  j | j d d g d d g d d g d d g d d g d d g d d
 g g  d  S)Nzed1dan.1	1dan	T:,U:91-106	b.1.2.1	21953	cl=48724,cf=48725,sf=49265,fa=49266,dm=49267,sp=49268,px=21953zd1dan.1Z1danTr\   U91106zb.1.2.1iU  r=   iT  r6   iU  r;   iq  fair  dmis  rZ   it  r8   rg   r\   r\   rh   ri   rj   )rm   rn   )	rf   r   sidresiduespdbid	fragmentsra   r   	hierarchy)r   rc   rO   r!   r!   r"   rd      s    $ztest_scop_cla.testRecordN)rB   rC   rD   rI   r#   rT   rX   rd   r!   r!   r!   r"   re      s
   re   c               @   sL   e  Z d  Z d d   Z d d   Z d d   Z d d   Z d	 d
   Z d S)DomTestsc             C   s&   t  d  } | j |  _ | j   d  S)Nzscop/domtest.txt)r	   rF   rG   r   )r   rH   r!   r!   r"   rI      s    zDomTests.setUpc          
   C   sV   t  |  j  A } d } x! t j |  D] } | d 7} q( W|  j | d  Wd  QXd  S)Nr   r$   
   )rK   rG   	DomRecordrM   r   )r   r   rN   rO   r!   r!   r"   r#      s
    zDomTests.testParsec             C   sd   t  |  j  O } xE | D]= } | r t |  } |  j t |  j   | j    q q WWd  QXd  S)N)rK   rG   rv   r   rQ   rR   )r   r   rS   rO   r!   r!   r"   rT      s
    zDomTests.testStrc             C   s   d } |  j  t t |  d  S)Nz49xxx268	sp	b.1.2.1	-
)rU   rV   rv   )r   Z
corruptDomr!   r!   r"   rX      s    zDomTests.testErrorc             C   sh   d } t  |  } |  j | j d  |  j | j j d  |  j | j j d  |  j | j d  d  S)	Nz%d7hbib_	7hbi	b:	1.001.001.001.001.001Zd7hbib_Z7hbibr\   z1.001.001.001.001.001rw   r\   r\   )rx   )rv   r   ro   rp   rq   rr   rs   )r   rc   rO   r!   r!   r"   rd      s    zDomTests.testRecordN)rB   rC   rD   rI   r#   rT   rX   rd   r!   r!   r!   r"   rt      s
   rt   c               @   s   e  Z d  Z d f  f d. d1 d4 d7 d: d= d@ dC dG dK dP f Z d d    Z d! d"   Z d# d$   Z d% d&   Z d' d(   Z d) d*   Z	 d+ S)QResiduesTests-A:Ar\   1:11-100100B:1-101B101	1:1a-100a1a100aa:-100a--1aa-100a-1a-1-100-1A:12-19,A:23-251219232512-19,1:23-250-1,1:-1a-25a,T:025arg   c             C   sP   xI |  j  D]> } t | d  } | j | d k s
 t t | j    q
 Wd  S)Nr   r$   )resResiduesrr   r   rQ   	locations)r   locrr!   r!   r"   r#     s    zResiduesTests.testParsec             C   sB   x; |  j  D]0 } t | d  } |  j t |  | d  q
 Wd  S)Nr   )r   r   r   rQ   )r   r   r   r!   r!   r"   rT     s    zResiduesTests.testStrc             C   sX   xQ |  j  D]F } t d | d d  } | j | d k s
 t t | j    q
 Wd S)zdAstral encloses residue subsets in brackets. Lets make sure we
        can parse those too.
        (r   )r$   N)r   r   rr   r   rQ   r   )r   r   r   r!   r!   r"   testAstralParse  s    zResiduesTests.testAstralParsec             C   s   d } x |  j  D] } t d | d d  } |  j | j |  |  j t |  | d | d  t | d | d  } |  j | j |  |  j t |  | d | d  t d  } |  j | j d  |  j | j d  q Wd  S)NZ1ddfz	 1ddf 	r   z	


 z104l A:112-113104lr|   112113r|   r   r   )r   )r   r   r   rq   rQ   rr   )r   rq   r   r   r!   r!   r"   	testPdbId  s    ""zResiduesTests.testPdbIdc             C   s3   t  d  } |  j | j d  | j s/ t  d  S)NZ1sds)r   r   rq   rr   r   )r   r   r!   r!   r"   testJustPdbId,  s    zResiduesTests.testJustPdbIdc             C   s   |  j  t t d  d  S)Nz09324923423hh./;,.389)rU   rV   r   )r   r!   r!   r"   testParseError2  s    zResiduesTests.testParseErrorNr|   r\   r\   r   )r{   r   r~   r\   r\   r   )r}   r   r\   r~   r   r   )r   r   r   r~   r   r   )r   r   r~   r   r   r   )r   r   r   r   r   r   )r   r   r\   r   r   r   )r   r   r\   r   r   r   )r   r   r|   12r   r|   r   r   r   r   )r   r   r\   r   r   r~   r   r   r   r   )r   r   r\   r   r~   r~   r   r   rg   r\   r\   r   r   r   )r   r   )
rB   rC   rD   r   r#   rT   r   r   r   r   r!   r!   r!   r"   ry      s$   		ry   c               @   s@   e  Z d  Z d d   Z d d   Z d d   Z d d   Z d	 S)
HieTestsc             C   s&   t  d  } | j |  _ | j   d  S)Nzscop/dir.hie.scop.txt_test)r	   rF   rG   r   )r   rH   r!   r!   r"   rI   8  s    zHieTests.setUpc             C   sY   t  |  j  D } d } x! t j |  D] } | d 7} q( W|  j | d d  Wd  QXd  S)Nr   r$      zWrong number of records?!)rK   rG   	HieRecordrM   r   )r   r   rN   rO   r!   r!   r"   r#   =  s
    zHieTests.testParsec             C   s[   t  |  j  F } x< | D]4 } t |  } |  j t |  j   | j    q WWd  QXd  S)N)rK   rG   r   r   rQ   rR   )r   r   rS   rO   r!   r!   r"   rT   D  s    zHieTests.testStrc             C   s   d } |  j  t t |  d  S)NZ4926sdfhjhfgyjdfyg)rU   rV   r   )r   rW   r!   r!   r"   rX   K  s    zHieTests.testErrorN)rB   rC   rD   rI   r#   rT   rX   r!   r!   r!   r"   r   6  s   r   __main__)__doc__os.pathr-   unittestZcorebio.db.scopZcorebio._py3kr   Ztest_corebioTestCaser   rE   re   rt   ry   r   rB   mainr!   r!   r!   r"   <module>   s   

h$(!<