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
|
# Copyright 2011 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.
"""Simple 'print-and-compare' unit test for fasta-m10 parser.
Created to check for any regressions from my new implementation of the
parser.
"""
from __future__ import print_function
import os
from Bio import AlignIO
# test_files is a list of tuples containing:
# - string: file format
# - integer: number of sequences per alignment
# - integer: number of alignments
# - string: relative filename
#
# Most of the input files are also used by test_SeqIO.py,
# and by other additional tests as noted below.
test_files = [
("fasta-m10", 2, 4, 'Fasta/output001.m10'),
("fasta-m10", 2, 6, 'Fasta/output002.m10'),
("fasta-m10", 2, 3, 'Fasta/output003.m10'),
("fasta-m10", 2, 1, 'Fasta/output004.m10'),
("fasta-m10", 2, 1, 'Fasta/output005.m10'),
("fasta-m10", 2, 1, 'Fasta/output006.m10'),
("fasta-m10", 2, 9, 'Fasta/output007.m10'),
("fasta-m10", 2, 12, 'Fasta/output008.m10'),
]
# Main tests...
for (t_format, t_per, t_count, t_filename) in test_files:
assert t_format == "fasta-m10" and t_per == 2
print("Testing reading %s format file %s with %i alignments"
% (t_format, t_filename, t_count))
assert os.path.isfile(t_filename), t_filename
# Try as an iterator using handle
with open(t_filename, "r") as handle:
alignments = list(AlignIO.parse(handle, format=t_format))
assert len(alignments) == t_count, \
"Found %i alignments but expected %i" % (len(alignments), t_count)
for alignment in alignments:
assert len(alignment) == t_per, \
"Expected %i records per alignment, got %i" \
% (t_per, len(alignment))
# Print the alignment
for i, alignment in enumerate(alignments):
print("=" * 78)
print("Alignment %i, with %i sequences of length %i"
% (i,
len(alignment),
alignment.get_alignment_length()))
for k in sorted(alignment._annotations):
print(" - %s: %r" % (k, alignment._annotations[k]))
assert alignment[0].name == "query"
assert alignment[1].name == "match"
# Show each sequence row horizontally
for record in alignment:
print("-" * 78)
print(record.id)
print(record.description)
print(repr(record.seq))
assert not record.features
assert not record.letter_annotations
for k in sorted(record.annotations):
print(" - %s: %r" % (k, record.annotations[k]))
print("=" * 78)
print("Finished tested reading files")
|