X-Git-Url: http://woldlab.caltech.edu/gitweb/?p=pysam.git;a=blobdiff_plain;f=tests%2Ftabix_test.py;h=2caa628660f74a4389a23bf8b09c8c9e55266dee;hp=207a59c6c125360655ac77192f43640903fc1c1d;hb=ca46ef4ba4a883c57cea62d5bf1bc021f1185109;hpb=d02fe5283ed7a93a2f76a5d6dc6e37b40c11b9b1 diff --git a/tests/tabix_test.py b/tests/tabix_test.py index 207a59c..2caa628 100644 --- a/tests/tabix_test.py +++ b/tests/tabix_test.py @@ -127,7 +127,6 @@ class TestIteration( unittest.TestCase ): b.difference(a) )) for x, d in enumerate( zip( result, ref )): - self.assertEqual( d[0], d[1], "unexpected results in pair %i: '%s', expected '%s'" % \ (x, @@ -204,6 +203,17 @@ class TestIteration( unittest.TestCase ): header = list( self.tabix.header ) self.assertEqual( ref, header ) + def testReopening( self ): + '''test repeated opening of the same file.''' + def func1(): + # opens any tabix file + inf = pysam.Tabixfile(self.filename) + return + + for i in range(10000): + func1() + + class TestParser( unittest.TestCase ): filename = "example.gtf.gz" @@ -219,9 +229,16 @@ class TestParser( unittest.TestCase ): self.assertEqual( self.compare[x], list(r) ) self.assertEqual( len(self.compare[x]), len(r) ) + # test indexing for c in range(0,len(r)): self.assertEqual( self.compare[x][c], r[c] ) + # test slicing access + for c in range(0, len(r)-1): + for cc in range(c+1, len(r)): + self.assertEqual( self.compare[x][c:cc], + r[c:cc] ) + def testWrite( self ): for x, r in enumerate(self.tabix.fetch( parser = pysam.asTuple() )): @@ -250,10 +267,18 @@ class TestParser( unittest.TestCase ): self.assertEqual( "\t".join(e), str(r) ) class TestGTF( TestParser ): + def testRead( self ): for x, r in enumerate(self.tabix.fetch( parser = pysam.asGTF() )): - self.assertEqual( "\t".join( self.compare[x]), str(r) ) + c = self.compare[x] + + self.assertEqual( len(c), len(r) ) + self.assertEqual( "\t".join(c), str(r) ) + self.assertTrue( r.gene_id.startswith("ENSG") ) + if r.feature != "gene": + self.assertTrue( r.transcript_id.startswith("ENST") ) + self.assertEqual( c[0], r.contig ) class TestBed( unittest.TestCase ): filename = "example.bed.gz" @@ -307,8 +332,8 @@ class TestVCF( TestParser ): c = self.compare[x] for y, field in enumerate( self.columns ): if field == "pos": - self.assertEqual( int(c[y])-1, getattr( r, field ) ) - self.assertEqual( int(c[y])-1, r.pos ) + self.assertEqual( int(c[y]) - 1, getattr( r, field ) ) + self.assertEqual( int(c[y]) - 1, r.pos ) else: self.assertEqual( c[y], getattr( r, field ), "mismatch in field %s: %s != %s" %\ @@ -323,12 +348,24 @@ class TestVCF( TestParser ): ncolumns = len(self.columns) for x, r in enumerate(self.tabix.fetch( parser = pysam.asVCF() )): + c = self.compare[x] + + # check unmodified string + ref_string = "\t".join( c ) + cmp_string = str(r) + self.assertEqual( ref_string, cmp_string ) + + # set fields and compare field-wise for y, field in enumerate( self.columns ): if field == "pos": - r.pos += 1 - self.assertEqual( int(c[y]), getattr( r, field ) ) - self.assertEqual( int(c[y]), r.pos ) + rpos = getattr( r, field ) + self.assertEqual( int(c[y]) - 1, rpos ) + self.assertEqual( int(c[y]) - 1, r.pos ) + # increment pos by 1 + setattr( r, field, rpos + 1 ) + self.assertEqual( getattr( r, field ), rpos + 1 ) + c[y] = str(int(c[y]) + 1 ) else: setattr( r, field, "test_%i" % y) c[y] = "test_%i" % y @@ -342,7 +379,23 @@ class TestVCF( TestParser ): c[ncolumns+y] = "test_%i" % y r[y] = "test_%i" % y self.assertEqual( c[ncolumns+y], r[y] ) + +class TestVCF( TestParser ): + + filename = "example.vcf40.gz" + + def testOpening( self ): + while 1: + infile = pysam.Tabixfile( self.filename ) + infile.close() + + # check strings + ref_string = "\t".join( c ) + cmp_string = str(r) + + self.assertEqual( ref_string, cmp_string ) + if __name__ == "__main__": unittest.main()