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.Logger;
import beast.core.MCMC;
import beast.util.Randomizer;
import beast.util.XMLParser;
import junit.framework.TestCase;
/**
* check whether all example files parse *
*/
public class ExampleXmlParsingTest extends TestCase {
public static void setUpTestDir() {
// make sure output goes to test directory
File testDir = new File("./test");
if (!testDir.exists()) {
testDir.mkdir();
}
System.setProperty("file.name.prefix","test/");
}
{
setUpTestDir();
}
@Test
public void test_ThatXmlExamplesParse() {
String dir = System.getProperty("user.dir") + "/examples";
test_ThatXmlExamplesParse(dir);
}
public void test_ThatXmlExamplesParse(String dir) {
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) {
System.out.println("Processing " + fileName);
XMLParser parser = new XMLParser();
try {
parser.parseFile(new File(dir + "/" + fileName));
} catch (Exception e) {
System.out.println("ExampleXmlParsing::Failed for " + fileName
+ ": " + e.getMessage());
failedFiles.add(fileName);
}
System.out.println("Done " + fileName);
}
if (failedFiles.size() > 0) {
System.out.println("\ntest_ThatXmlExamplesParse::Failed for : " + failedFiles.toString());
} else {
System.out.println("\ntest_ThatXmlExamplesParse::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 test_ThatXmlExamplesRun() {
String dir = System.getProperty("user.dir") + "/examples";
test_ThatXmlExamplesRun(dir);
}
public void test_ThatXmlExamplesRun(String dir) {
try {
Logger.FILE_MODE = Logger.LogFileMode.overwrite;
System.out.println("Test that XML Examples run 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>();
int seed = 127;
for (String fileName : exampleFiles) {
Randomizer.setSeed(seed);
seed += 10; // need more than one to prevent trouble with multiMCMC logs
System.out.println("Processing " + fileName);
XMLParser parser = new XMLParser();
try {
beast.core.Runnable runable = parser.parseFile(new File(dir + "/" + fileName));
if (runable instanceof MCMC) {
MCMC mcmc = (MCMC) runable;
mcmc.setInputValue("preBurnin", 0);
mcmc.setInputValue("chainLength", 1000);
mcmc.run();
}
} catch (Exception e) {
System.out.println("ExampleXmlParsing::Failed for " + fileName
+ ": " + e.getMessage());
failedFiles.add(fileName);
}
System.out.println("Done " + fileName);
}
if (failedFiles.size() > 0) {
System.out.println("\ntest_ThatXmlExamplesRun::Failed for : " + failedFiles.toString());
} else {
System.out.println("SUCCESS!!!");
}
assertTrue(failedFiles.toString(), failedFiles.size() == 0);
} catch (Exception e) {
System.out.println("exception thrown ");
System.out.println(e.getMessage());
;
}
} // test_ThatXmlExamplesRun
public static void main(String args[]) {
org.junit.runner.JUnitCore.main("test.beast.integration.ExampleXmlParsingTest");
}
} // ExampleXmlParsingTest