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
|
# 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
exe_name = "PhyML-3.1_win32.exe" if sys.platform == "win32" else "phyml"
from Bio._py3k import getoutput
try:
output = getoutput(exe_name + " --version")
if "not found" not in output and "20" in output:
phyml_exe = exe_name
except OSError:
# TODO: Use FileNotFoundError once we drop Python 2
# Python 2.6 or 2.7 on Windows XP:
# WindowsError: [Error 2] The system cannot find the file specified
# Python 3.3 or 3.4 on Windows XP:
# FileNotFoundError: [WinError 2] The system cannot find the file specified
pass
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', '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)
|