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
|
# Copyright 2009 by Peter Cock. All rights reserved.
# This code is part of the Biopython distribution and governed by its
# license. Please see the LICENSE file that should have been included
# as part of this package.
"""Unit tests for Bio.SeqIO.convert(...) function."""
import unittest
from StringIO import StringIO
from Bio import AlignIO
from Bio.Alphabet import generic_protein, generic_nucleotide, generic_dna
#Top level function as this makes it easier to use for debugging:
def check_convert(in_filename, in_format, out_format, alphabet=None):
#Write it out using parse/write
handle = StringIO()
aligns = list(AlignIO.parse(open(in_filename), in_format, None, alphabet))
try:
count = AlignIO.write(aligns, handle, out_format)
except ValueError:
count = 0
#Write it out using convert passing filename and handle
handle2 = StringIO()
try:
count2 = AlignIO.convert(in_filename, in_format, handle2, out_format, alphabet)
except ValueError:
count2 = 0
assert count == count2
assert handle.getvalue() == handle2.getvalue()
#Write it out using convert passing handle and handle
handle2 = StringIO()
try:
count2 = AlignIO.convert(open(in_filename), in_format, handle2, out_format, alphabet)
except ValueError:
count2 = 0
assert count == count2
assert handle.getvalue() == handle2.getvalue()
#TODO - convert passing an output filename?
class ConvertTests(unittest.TestCase):
"""Cunning unit test where methods are added at run time."""
def simple_check(self, filename, in_format, out_format, alphabet):
check_convert(filename, in_format, out_format, alphabet)
tests = [
('Clustalw/hedgehog.aln', "clustal", None),
('Nexus/test_Nexus_input.nex', "nexus", None),
('Stockholm/simple.sth', "stockholm", None),
('GFF/multi.fna', "fasta", generic_nucleotide),
("Quality/example.fastq", "fastq", None),
("Quality/example.fastq", "fastq-sanger", generic_dna),
('Fasta/output001.m10', "fasta-m10", None),
('IntelliGenetics/VIF_mase-pro.txt', "ig", generic_protein),
('NBRF/clustalw.pir', "pir", None),
]
output_formats = ["fasta"] + sorted(AlignIO._FormatToWriter.keys())
for filename, in_format, alphabet in tests:
for out_format in output_formats:
def funct(fn,fmt1, fmt2, alpha):
f = lambda x : x.simple_check(fn, fmt1, fmt2, alpha)
f.__doc__ = "Convert %s from %s to %s" % (fn, fmt1, fmt2)
return f
setattr(ConvertTests, "test_%s_%s_to_%s" \
% (filename.replace("/","_").replace(".","_"), in_format, out_format),
funct(filename, in_format, out_format, alphabet))
del funct
if __name__ == "__main__":
runner = unittest.TextTestRunner(verbosity = 2)
unittest.main(testRunner=runner)
|