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,
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"
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() )):
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"
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" %\
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
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()