package test.beast.integration;
import java.io.File;
import java.io.FilenameFilter;
import java.util.ArrayList;
import java.util.List;
import org.junit.Test;
import beast.core.BEASTInterface;
import beast.core.Logger;
import beast.evolution.datatype.Nucleotide;
import beast.util.NexusParser;
import beast.util.Randomizer;
import beast.util.XMLParser;
import beast.util.XMLProducer;
import junit.framework.TestCase;
public class XMLProducerTest extends TestCase {
// @Test
// public void test_ThatXmlExamplesProduces() {
// System.setProperty("java.only", "true");
// String dir = System.getProperty("user.dir") + "/examples";
// //String dir = "/tmp";
// List<String> exceptions = new ArrayList<String>();
// exceptions.add("testExponentialGrowth.xml");
// test_ThatXmlExamplesProduces(dir, exceptions);
// }
@Test
public void test_ThatNexusExamplesProduces() {
try {
String dirName = System.getProperty("user.dir") + "/examples/nexus";
System.out.println("Test Nexus Examples in " + dirName);
File exampleDir = new File(dirName);
String[] exampleFiles = exampleDir.list(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
return name.endsWith(".nex") || name.endsWith(".nxs") ;
}
});
List<String> failedFiles = new ArrayList<>();
for (String fileName : exampleFiles) {
System.out.println("Processing " + fileName);
NexusParser parser = new NexusParser();
try {
parser.parseFile(new File(dirName + "/" + fileName));
} catch (Exception e) {
System.out.println("ExampleNexusParsing::Failed for " + fileName
+ ": " + e.getMessage());
failedFiles.add(fileName);
}
XMLProducer producer = new XMLProducer();
BEASTInterface o = parser.m_alignment;
if (o != null) {
String xml = producer.toXML(o);
//FileWriter outfile = new FileWriter(new File("/tmp/XMLProducerTest.xml"));
//outfile.write(xml);
//outfile.close();
XMLParser parser2 = new XMLParser();
try {
BEASTInterface o2 = parser2.parseFragment(xml, false);
System.out.println(o2);
} catch (Exception e) {
System.out.println("test_ThatNexusExamplesProduces::Failed for " + fileName
+ ": " + e.getMessage());
failedFiles.add(fileName);
}
}
System.out.println("Done " + fileName);
}
if (failedFiles.size() > 0) {
System.out.println("\test_ThatNexusExamplesProduces::Failed for : " + failedFiles.toString());
} else {
System.out.println("\test_ThatNexusExamplesProduces::Success");
}
assertTrue(failedFiles.toString(), failedFiles.size() == 0);
} catch (Exception e) {
System.out.println("exception thrown ");
System.out.println(e.getMessage());
}
}
/** parse all XML files in the given directory, then produce XML from it, and see if the produced XML still parses **/
public void test_ThatXmlExamplesProduces(String dir, List<String> exceptions) {
try {
Randomizer.setSeed(127);
Logger.FILE_MODE = Logger.LogFileMode.overwrite;
System.out.println("Test XML Examples in " + dir);
File exampleDir = new File(dir);
String[] exampleFiles = exampleDir.list(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
return name.endsWith(".xml");
}
});
List<String> failedFiles = new ArrayList<String>();
for (String fileName : exampleFiles) {
if (exceptions.contains(fileName)) {
System.out.println("Skipping exception " + fileName);
} else {
System.out.println("Processing " + fileName);
XMLProducer producer = new XMLProducer();
BEASTInterface o = null;
try {
o = producer.parseFile(new File(dir + "/" + fileName));
} catch (Exception e) {
o = null;
}
if (o != null) {
String xml = producer.toXML(o);
//FileWriter outfile = new FileWriter(new File("/tmp/XMLProducerTest.xml"));
//outfile.write(xml);
//outfile.close();
XMLParser parser2 = new XMLParser();
try {
parser2.parseFragment(xml, false);
} catch (Exception e) {
System.out.println("test_ThatXmlExamplesProduces::Failed for " + fileName
+ ": " + e.getMessage());
failedFiles.add(fileName);
}
}
System.out.println("Done " + fileName);
}
}
if (failedFiles.size() > 0) {
System.out.println("\ntest_ThatXmlExamplesProduces::Failed for : " + failedFiles.toString());
} else {
System.out.println("\ntest_ThatXmlExamplesProduces::Success");
}
assertTrue(failedFiles.toString(), failedFiles.size() == 0);
} catch (Exception e) {
System.out.println("exception thrown ");
System.out.println(e.getMessage());
}
} // test_XmlExamples
@Test
public void testObjectWithoutID() {
BEASTInterface o = new Nucleotide();
XMLProducer producer = new XMLProducer();
System.out.println(producer.toXML(o));
}
}