def test_round_trip(self): test_bam = resource_stream(__name__, 'data/minitest.bam') # get raw uncompressed content content = gzip.open(test_bam).read() # go back to start of file and parse with Filereader test_bam.seek(0) the_bam = bam.FileReader(gzip.open(test_bam)) out_file = NamedTemporaryFile(delete=False) out_file_name = out_file.name with bam.FileWriter(out_file_name) as out_bam: out_bam.raw_header = the_bam.raw_header out_bam.raw_refs = the_bam.raw_refs out_bam.write_header() self.assertRaises(RuntimeError,out_bam.write_header,None) for align in the_bam: out_bam.write(align) # parse the new temporary file new_bam = bam.FileReader(gzip.open(out_file_name)) self.assertEqual(the_bam.header,new_bam.header) try: while True: align = next(the_bam) align2 = next(the_bam) self.assertEqual(align,align2) except StopIteration: pass
def test_FileReader_init(self): test_bam = resource_stream(__name__, 'data/paired_end_testdata_human.bam') the_bam = bam.FileReader(gzip.open(test_bam)) self.assertEqual(the_bam.raw_header, RAW_HEADER) self.assertEqual(the_bam.raw_refs, RAW_REFS) self.assertEqual(the_bam.refs, REFS) self.assertEqual(the_bam.header, HEADER) self.assertEqual(the_bam.index_to_ref, INDEX_TO_REF) self.assertEqual(the_bam.ref_to_index, REF_TO_INDEX) self.assertEqual(the_bam.sort_order, 'unsorted') the_bam.close() test_bam = resource_stream(__name__, 'data/paired_end_testdata_human.bam') with bam.FileReader(gzip.open(test_bam)) as the_bam: self.assertEqual(the_bam.header, HEADER) first_read = next(the_bam) the_bam.reset_alignments() self.assertEqual(first_read,next(the_bam)) self.assertRaises(ValueError, bam.FileReader, test_bam)
def test_FileReader_iteration(self): test_bam = resource_stream(__name__, 'data/paired_end_testdata_human.bam') the_bam = bam.FileReader(gzip.open(test_bam)) self.assertEqual(next(the_bam), ALIGN0) for i in range(41): next(the_bam) self.assertEqual(next(the_bam), ALIGN42) for align in the_bam: pass
def test_update_header_length(self): test_bam = resource_stream(__name__, 'data/paired_end_testdata_human.bam') the_bam = bam.FileReader(gzip.open(test_bam)) the_bam.raw_header = the_bam.raw_header+b'@CO\tThis is an extra comment\n' the_bam.update_header_length() self.assertEqual(len(the_bam.raw_header[4:]), struct.unpack("<i", the_bam.raw_header[:4])[0]) header_with_incorrect_len = struct.pack("<i",42)+RAW_HEADER[4:] self.assertEqual(the_bam.update_header_length(header_with_incorrect_len)[:4], RAW_HEADER[:4])
def test_get_updated_header(self): test_bam = resource_stream(__name__, 'data/paired_end_testdata_human.bam') the_bam = bam.FileReader(gzip.open(test_bam)) the_bam.raw_header = the_bam.raw_header+b'@CO\tThis is an extra comment\n' the_bam.update_header_length() updated_header = the_bam.get_updated_header(id='test', program='test', version='88.88.8', command="--argumentative") self.assertEqual(updated_header[4:], #skip 4 bytes as len changed (RAW_HEADER[4:] + b'@PG\tID:test\tPN:test\tVN:88.88.8\tPP:bowtie2\t' + b'CL:--argumentative\n' + b'@CO\tThis is an extra comment\n') )