package test.beast.app; import java.io.File; import java.io.PrintStream; import org.junit.Test; import beast.app.beauti.Beauti; import beast.app.beauti.BeautiDoc; import junit.framework.TestCase; import test.beast.integration.ExampleXmlParsingTest; public class BeautiTest extends TestCase { { ExampleXmlParsingTest.setUpTestDir(); } String fileName = "test/tmp123x666.xml"; String templateFile = "test/template123x666.xml"; @Test // test that beauti can merge an alignment with a template and write out a file // this requires that the standard template can be read public void testStandarBatchMode() { BeautiDoc doc = new BeautiDoc(); try { doc.processTemplate("templates/Standard.xml"); } catch (Exception e) { assertEquals(true, false); } // ignore test if no X11 display available if (!java.awt.GraphicsEnvironment.isHeadless()) { File f = new File(fileName); if (f.exists()) { f.delete(); } Beauti.main(("-template templates/Standard.xml -nex examples/nexus/dna.nex -out " + fileName + " -exitaction writexml").split(" ")); f = new File(fileName); assertEquals(f.exists() && f.length() > 0, true); } } @Test // as testStandarBatchMode() but for the *Beast template public void testStarBeastBatchMode() { BeautiDoc doc = new BeautiDoc(); try { doc.processTemplate("templates/StarBeast.xml"); } catch (Exception e) { assertEquals(true, false); } // ignore test if no X11 display available if (!java.awt.GraphicsEnvironment.isHeadless()) { File f = new File(fileName); if (f.exists()) { f.delete(); } Beauti.main(("-template templates/StarBeast.xml -nex examples/nexus/26.nex -nex examples/nexus/29.nex -out " + fileName + " -exitaction writexml").split(" ")); f = new File(fileName); assertEquals(f.exists() && f.length() > 0, true); } } // test that a dataset can be merged with a simple template String template = "<beast version='2.0' namespace='beast.evolution.alignment:beast.core:beast.evolution.tree.coalescent:beast.core.util:beast.evolution.nuc:beast.evolution.operators:beast.evolution.sitemodel:beast.evolution.substitutionmodel:beast.evolution.likelihood'>\n" + "<data id='data' dataType='nucleotide'>\n" + " <sequence taxon='human'>\n" + " AGAAATATGTCTGATAAAAGAGTTACTTTGATAGAGTAAATAATAGGAGCTTAAACCCCCTTATTTCTACTAGGACTATGAGAATCGAACCCATCCCTGAGAATCCAAAATTCTCCGTGCCACCTATCACACCCCATCCTAAGTAAGGTCAGCTAAATAAGCTATCGGGCCCATACCCCGAAAATGTTGGTTATACCCTTCCCGTACTAAGAAATTTAGGTTAAATACAGACCAAGAGCCTTCAAAGCCCTCAGTAAGTTG-CAATACTTAATTTCTGTAAGGACTGCAAAACCCCACTCTGCATCAACTGAACGCAAATCAGCCACTTTAATTAAGCTAAGCCCTTCTAGACCAATGGGACTTAAACCCACAAACACTTAGTTAACAGCTAAGCACCCTAATCAAC-TGGCTTCAATCTAAAGCCCCGGCAGG-TTTGAAGCTGCTTCTTCGAATTTGCAATTCAATATGAAAA-TCACCTCGGAGCTTGGTAAAAAGAGGCCTAACCCCTGTCTTTAGATTTACAGTCCAATGCTTCA-CTCAGCCATTTTACCACAAAAAAGGAAGGAATCGAACCCCCCAAAGCTGGTTTCAAGCCAACCCCATGGCCTCCATGACTTTTTCAAAAGGTATTAGAAAAACCATTTCATAACTTTGTCAAAGTTAAATTATAGGCT-AAATCCTATATATCTTA-CACTGTAAAGCTAACTTAGCATTAACCTTTTAAGTTAAAGATTAAGAGAACCAACACCTCTTTACAGTGA\n" + " </sequence>\n" + " <sequence taxon='chimp'>\n" + " AGAAATATGTCTGATAAAAGAATTACTTTGATAGAGTAAATAATAGGAGTTCAAATCCCCTTATTTCTACTAGGACTATAAGAATCGAACTCATCCCTGAGAATCCAAAATTCTCCGTGCCACCTATCACACCCCATCCTAAGTAAGGTCAGCTAAATAAGCTATCGGGCCCATACCCCGAAAATGTTGGTTACACCCTTCCCGTACTAAGAAATTTAGGTTAAGCACAGACCAAGAGCCTTCAAAGCCCTCAGCAAGTTA-CAATACTTAATTTCTGTAAGGACTGCAAAACCCCACTCTGCATCAACTGAACGCAAATCAGCCACTTTAATTAAGCTAAGCCCTTCTAGATTAATGGGACTTAAACCCACAAACATTTAGTTAACAGCTAAACACCCTAATCAAC-TGGCTTCAATCTAAAGCCCCGGCAGG-TTTGAAGCTGCTTCTTCGAATTTGCAATTCAATATGAAAA-TCACCTCAGAGCTTGGTAAAAAGAGGCTTAACCCCTGTCTTTAGATTTACAGTCCAATGCTTCA-CTCAGCCATTTTACCACAAAAAAGGAAGGAATCGAACCCCCTAAAGCTGGTTTCAAGCCAACCCCATGACCTCCATGACTTTTTCAAAAGATATTAGAAAAACTATTTCATAACTTTGTCAAAGTTAAATTACAGGTT-AACCCCCGTATATCTTA-CACTGTAAAGCTAACCTAGCATTAACCTTTTAAGTTAAAGATTAAGAGGACCGACACCTCTTTACAGTGA\n" + " </sequence>\n" + "</data>\n" + " <input spec='HKY' id='hky'>\n" + " <kappa idref='hky.kappa'/>\n" + " <frequencies id='freqs' spec='Frequencies'>\n" + " <data idref='data'/>\n" + " </frequencies>\n" + " </input>\n" + " <input spec='SiteModel' id='siteModel' gammaCategoryCount='1'>\n" + " <substModel idref='hky'/>\n" + " </input>\n" + " <input spec='TreeLikelihood' id='treeLikelihood'>\n" + " <data idref='data'/>\n" + " <tree idref='tree'/>\n" + " <siteModel idref='siteModel'/>\n" + " </input>\n" + " <parameter id='hky.kappa' value='1.0' lower='0.0'/>\n" + " <tree spec='beast.evolution.tree.RandomTree' id='tree' taxa='@data'>\n" + " <populationModel spec='ConstantPopulation'>\n" + " <popSize spec='parameter.RealParameter' value='1'/>\n" + " </populationModel>\n" + " </tree>\n" + " <run spec='MCMC' id='mcmc' chainLength='10000000'>\n" + " <distribution spec='CompoundDistribution' id='posterior'>\n" + " <distribution id='likelihood' idref='treeLikelihood'/>\n" + " </distribution>\n" + " <operator id='kappaScaler' spec='ScaleOperator' scaleFactor='0.5' weight='1' parameter='@hky.kappa'/>\n" + " <operator id='treeScaler' spec='ScaleOperator' scaleFactor='0.5' weight='1' tree='@tree'/>\n" + " <operator spec='Uniform' weight='10' tree='@tree'/>\n" + " <operator spec='SubtreeSlide' weight='5' gaussian='true' size='1.0' tree='@tree'/>\n" + " <operator id='narrow' spec='Exchange' isNarrow='true' weight='1' tree='@tree'/>\n" + " <operator id='wide' spec='Exchange' isNarrow='false' weight='1' tree='@tree'/>\n" + " <operator spec='WilsonBalding' weight='1' tree='@tree'/>\n" + " <logger logEvery='10000' fileName='test.$(seed).log'>\n" + " <model idref='likelihood'/>\n" + " <log idref='likelihood'/>\n" + " <log idref='hky.kappa'/>\n" + " <log spec='beast.evolution.tree.TreeHeightLogger' tree='@tree'/>\n" + " </logger>\n" + " <logger logEvery='10000' fileName='test.$(seed).trees'>\n" + " <log idref='tree'/>\n" + " </logger>\n" + " <logger logEvery='10000'>\n" + " <model idref='likelihood'/>\n" + " <log idref='likelihood'/>\n" + " <ESS spec='ESS' name='log' arg='@likelihood'/>\n" + " <log idref='hky.kappa'/>\n" + " <ESS spec='ESS' name='log' arg='@hky.kappa'/>\n" + " </logger>\n" + " </run>\n" + "</beast>"; @Test public void testCustomBatchMode() { BeautiDoc doc = new BeautiDoc(); try { PrintStream out = new PrintStream(templateFile); out.print(template); out.close(); doc.processTemplate(templateFile); } catch (Exception e) { assertEquals(true, false); } // ignore test if no X11 display available if (!java.awt.GraphicsEnvironment.isHeadless()) { File f = new File(fileName); if (f.exists()) { f.delete(); } Beauti.main(("-template " + templateFile + " -nex examples/nexus/anolis.nex -out " + fileName + " -exitaction writexml").split(" ")); f = new File(fileName); assertEquals(f.exists() && f.length() > 0, true); } } }