1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81
|
import os
import random
import pyfastx
import pyfaidx
import unittest
join = os.path.join
data_dir = join(os.path.dirname(os.path.abspath(__file__)), 'data')
flat_fasta = join(data_dir, 'test.fa')
class SequenceErrorTest(unittest.TestCase):
def setUp(self):
self.fastx = pyfastx.Fasta(flat_fasta)
self.faidx = pyfaidx.Fasta(flat_fasta, sequence_always_upper=True)
self.count = len(self.fastx)
def tearDown(self):
del self.fastx
del self.faidx
if os.path.exists('{}.fxi'.format(flat_fasta)):
os.remove('{}.fxi'.format(flat_fasta))
if os.path.exists('{}.fai'.format(flat_fasta)):
os.remove('{}.fai'.format(flat_fasta))
def get_random_index(self):
return random.randint(0, self.count-1)
def get_random_key(self):
idx = self.get_random_index()
return list(self.faidx.keys())[idx]
def test_seq_by_index(self):
# get valid index
idx = self.get_random_index()
expect = self.faidx[idx][:]
result = self.fastx[idx]
self.assertEqual(expect.name, result.name)
self.assertEqual(expect.seq, result.seq)
# get invalid index
with self.assertRaises(IndexError):
self.fastx[self.count + 100]
# get valid index again
expect = self.faidx[idx][:]
result = self.fastx[idx]
self.assertEqual(expect.name, result.name)
self.assertEqual(expect.seq, result.seq)
def test_seq_by_key(self):
# get valid key
key = self.get_random_key()
expect = self.faidx[key][:]
result = self.fastx[key]
self.assertEqual(expect.name, result.name)
self.assertEqual(expect.seq, result.seq)
# get invalid key
with self.assertRaises(KeyError):
self.fastx['__BOGUS_KEY_FOR_TESTING__']
# get valid key again
expect = self.faidx[key][:]
result = self.fastx[key]
self.assertEqual(expect.name, result.name)
self.assertEqual(expect.seq, result.seq)
if __name__ == '__main__':
unittest.main()
|