diff --git a/modules/bindings/tests/test_blast.py b/modules/bindings/tests/test_blast.py index 707f5c93b3bc49a71d0059dbfc74252768626373..8909db3e7409597619cd5013854da14f39902938 100644 --- a/modules/bindings/tests/test_blast.py +++ b/modules/bindings/tests/test_blast.py @@ -24,34 +24,51 @@ class TestBlastBindings(unittest.TestCase): self.assertRaises(IOError, blast.Blast, self.query, 'testfiles/nonexistentdb') - def testParseBlastOutput(self): + def testBlastOutput(self): hits=blast.Blast(self.query, 'testfiles/seqdb') - blast_version=blast.BlastVersion() - if blast_version=='2.2.16': - expected_output=[{'evalue':4.808930E-59,'bitscore':210.305,'score':534}, - {'evalue':2.366130E-59,'bitscore':210.305,'score':534}, - {'evalue':5.361450E-58,'bitscore':206.068,'score':523}, - {'evalue':2.965230E+00,'bitscore':15.0086,'score':27}, - {'evalue':9.696520E+00,'bitscore':13.4678,'score':23}] - - else: - expected_output=[{'evalue':2.366130E-59,'bitscore':211.460,'score':537}, - {'evalue':4.808930E-59,'bitscore':210.305,'score':534}, - {'evalue':5.361450E-58,'bitscore':206.838,'score':525}, - {'evalue':3.277500E+00,'bitscore':15.0086,'score':27}, - {'evalue':9.696520E+00,'bitscore':13.4678,'score':23}] + expected_hits=['1griA','1fhsA','3n84E','1mw9X'] self.assertEqual(len(hits), 4) - for expected, hit in zip(expected_output, hits): - patch=hit.aligned_patches[0] - self.assertAlmostEqual(patch.evalue, expected['evalue']) - self.assertAlmostEqual(patch.bit_score, expected['bitscore']) - self.assertAlmostEqual(patch.score, expected['score']) + + found=0 + hit_ids=[] + + for h in hits: + hit_ids.append(h.identifier) + + for identifier in expected_hits: + if identifier in hit_ids: + found+=1 + self.assertEqual(found, 4) + + def testBlastParseOutput(self): + raw_out=open('testfiles/raw_blastout.txt','r').readlines() + parsed_out=blast.ParseBlastOutput(raw_out) + + expected_ids=['1griA','1fhsA','3n84E','1mw9X'] + expected_evalues=[4.80893e-59,4.80893e-59,9.06925e-58,2.96523] + expected_scores=[534,534,523,27] + expected_bitscores[210.305,210.305,206.068,15.0086] + expected_seqid=[1.0,1.0,1.0,0.30769] + + for i in range(4): + patch=parsed_out[i].aligned_patches[0] + self.assertEqual(expected_ids[i],parsed_out[i].identifier) + self.assertAlmostEqual(patch.evalue,expected_evalues[i]) + self.assertAlmostEqual(patch.score,expected_scores[i]) + self.assertAlmostEqual(patch.bit_score,expected_bitscores[i]) + self.assertAlmostEqual(patch.seqid,expected_seqid[i],places=5) + + + if __name__ == "__main__": # test if blast package is available on system, otherwise ignore tests try: - blastpath=settings.Locate('blastall') + blastpath=settings.Locate('blastp') except(settings.FileNotFound): - print "Could not find blastall executable: ignoring unit tests" - sys.exit(0) + try: + blastpath=settings.Locate('blastall') + except: + print "Could not find blast executable: ignoring unit tests" + sys.exit(0) from ost import testutils testutils.RunTests()