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
|
# Copyright (C) 2012 by Eric Talevich.
# 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.Phylo.Applications wrappers."""
import sys
import os
import unittest
from Bio import Phylo
from Bio.Phylo.Applications import PhymlCommandline
from Bio import MissingExternalDependencyError
#Try to avoid problems when the OS is in another language
os.environ['LANG'] = 'C'
phyml_exe = None
if sys.platform=="win32":
raise MissingExternalDependencyError(
"Testing PhyML on Windows not supported yet")
else:
from Bio._py3k import getoutput
output = getoutput("phyml --version")
if "not found" not in output and "20" in output:
phyml_exe = "phyml"
if not phyml_exe:
raise MissingExternalDependencyError(
"Install PhyML 3.0 if you want to use the Bio.Phylo.Applications wrapper.")
# Example Phylip file with 4 aligned protein sequences
EX_PHYLIP = 'Phylip/interlaced2.phy'
class AppTests(unittest.TestCase):
"""Tests for application wrappers."""
def test_phyml(self):
"""Run PhyML using the wrapper."""
cmd = PhymlCommandline(phyml_exe, input=EX_PHYLIP, datatype='aa')
# Smoke test
try:
out, err = cmd()
self.assertTrue(len(out) > 0)
self.assertEqual(len(err), 0)
# Check the output tree
tree = Phylo.read(EX_PHYLIP + '_phyml_tree.txt', 'newick')
self.assertEqual(tree.count_terminals(), 4)
finally:
# Clean up generated files
for suffix in ['_phyml_tree.txt', '_phyml_stats.txt']:
fname = EX_PHYLIP + suffix
if os.path.isfile(fname):
os.remove(fname)
# ---------------------------------------------------------
if __name__ == '__main__':
runner = unittest.TextTestRunner(verbosity=2)
unittest.main(testRunner=runner)
|