Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

More tests for align.py #477

Merged
merged 1 commit into from
Mar 30, 2020
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
68 changes: 68 additions & 0 deletions tests/test_align.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,9 @@
from Bio.Seq import Seq
from Bio.SeqRecord import SeqRecord

from shlex import quote
import pathlib

from augur import align

import pytest
Expand Down Expand Up @@ -73,3 +76,68 @@ def test_check_duplicates_MSA_and_string_with_duplicates(self):
)
with pytest.raises(align.AlignmentError):
assert align.check_duplicates(alignment, "seq3")

def test_prune_seqs_matching_alignment(self):
sequence = {
"seq1": SeqRecord(Seq("GTAC"), name="seq1"),
"seq2": SeqRecord(Seq("CGTT"), name="seq2"),
"seq3": SeqRecord(Seq("TAGC"), name="seq3"),
}
alignment = MultipleSeqAlignment(
[
SeqRecord(Seq("GTAC"), name="seq1"),
SeqRecord(Seq("TAGC"), name="seq3"),
]
)

result = align.prune_seqs_matching_alignment(sequence, alignment)
assert list(result.keys()) == ["seq2"]
assert result["seq2"].seq == sequence["seq2"].seq

def test_generate_alignment_cmd_non_mafft(self):
with pytest.raises(align.AlignmentError):
assert align.generate_alignment_cmd('no-mafft', 1, None, None, None, None)

def test_generate_alignment_cmd_mafft_existing_aln_fname(self):
existing_aln_fname = "existing_aln"
seqs_to_align_fname = "seqs_to_align"
aln_fname = "aln_fname"
log_fname = "log_fname"

result = align.generate_alignment_cmd("mafft", 1,
existing_aln_fname,
seqs_to_align_fname,
aln_fname,
log_fname)

expected = "mafft --add %s --keeplength --reorder --anysymbol --nomemsave --thread %d %s 1> %s 2> %s" % (quote(seqs_to_align_fname), 1, quote(existing_aln_fname), quote(aln_fname), quote(log_fname))

assert result == expected

def test_generate_alignment_cmd_mafft_no_existing_aln_fname(self):
seqs_to_align_fname = "seqs_to_align"
aln_fname = "aln_fname"
log_fname = "log_fname"

result = align.generate_alignment_cmd("mafft", 1,
None,
seqs_to_align_fname,
aln_fname,
log_fname)

expected = "mafft --reorder --anysymbol --nomemsave --thread %d %s 1> %s 2> %s" % (1, quote(seqs_to_align_fname), quote(aln_fname), quote(log_fname))

assert result == expected

def test_read_alignment(self):
data_file = pathlib.Path('tests/data/align/test_aligned_sequences.fasta')
result = align.read_alignment(str(data_file.resolve()))

assert len(result) == 3

def test_read_sequences(self):
data_file = pathlib.Path('tests/data/align/test_aligned_sequences.fasta')
result = align.read_sequences(data_file)
assert len(result.keys()) == 3