package test.beast.app;
import org.junit.Test;
import beast.app.beauti.BeautiConnector;
import beast.app.beauti.BeautiSubTemplate;
import beast.core.parameter.RealParameter;
import junit.framework.TestCase;
public class BeautiSubTemplateTest extends TestCase {
@Test
public void testBeautiSubTemplate() throws Exception {
// minimal template
BeautiSubTemplate t = new BeautiSubTemplate();
t.initByName("class",RealParameter.class.getName(),
"mainid", "kappa",
"value", "<parameter id='kappa' value='1.0'/>"
);
assertEquals(0, t.connectorsInput.get().size());
String xml = t.xMLInput.get().replaceAll("\\s+", " ");
assertEquals("<![CDATA[ <parameter id=\"kappa\" value=\"1.0\"/> ]]>", xml);
// minimal template + connector
t = new BeautiSubTemplate();
t.initByName("class",RealParameter.class.getName(),
"mainid", "kappa",
"value", "<state idref='thestate'><parameter id='kappa' value='1.0'/></state>"
);
assertEquals(1, t.connectorsInput.get().size());
BeautiConnector c = t.connectorsInput.get().get(0);
assertEquals("kappa", c.sourceIDInput.get());
assertEquals("thestate", c.targetIDInput.get());
assertEquals("parameter", c.inputNameInput.get());
assertEquals(null, c.conditionInput.get());
xml = t.xMLInput.get().replaceAll("\\s+", " ");
assertEquals("<![CDATA[ <parameter id=\"kappa\" value=\"1.0\"/> ]]>", xml);
// minimal template + connector + name
t = new BeautiSubTemplate();
t.initByName("class",RealParameter.class.getName(),
"mainid", "kappa",
"value", "<state idref='thestate'><parameter id='kappa' name='stateNode' value='1.0'/></state>"
);
assertEquals(1, t.connectorsInput.get().size());
c = t.connectorsInput.get().get(0);
assertEquals("kappa", c.sourceIDInput.get());
assertEquals("thestate", c.targetIDInput.get());
assertEquals("stateNode", c.inputNameInput.get());
assertEquals(null, c.conditionInput.get());
xml = t.xMLInput.get().replaceAll("\\s+", " ");
assertEquals("<![CDATA[ <parameter id=\"kappa\" name=\"stateNode\" value=\"1.0\"/> ]]>", xml);
// minimal template + connector + name + condition
t = new BeautiSubTemplate();
t.initByName("class",RealParameter.class.getName(),
"mainid", "kappa",
"value", "<state idref='thestate'><parameter id='kappa' name='stateNode' value='1.0' beauti:if='kappa/estimate=true'/></state>"
);
assertEquals(1, t.connectorsInput.get().size());
c = t.connectorsInput.get().get(0);
assertEquals("kappa", c.sourceIDInput.get());
assertEquals("thestate", c.targetIDInput.get());
assertEquals("stateNode", c.inputNameInput.get());
assertEquals("kappa/estimate=true", c.conditionInput.get());
xml = t.xMLInput.get().replaceAll("\\s+", " ");
assertEquals("<![CDATA[ <parameter id=\"kappa\" name=\"stateNode\" value=\"1.0\"/> ]]>", xml);
}
@Test
public void testBeautiSubTemplateIfElement() throws Exception {
// minimal template
BeautiSubTemplate t = new BeautiSubTemplate();
// minimal template + connector + name + condition
t.initByName("class",RealParameter.class.getName(),
"mainid", "kappa",
"value", "<state idref='thestate'><if cond='kappa/estimate=true'><parameter id='kappa' name='stateNode' value='1.0'/></if></state>"
);
assertEquals(1, t.connectorsInput.get().size());
BeautiConnector c = t.connectorsInput.get().get(0);
assertEquals("kappa", c.sourceIDInput.get());
assertEquals("thestate", c.targetIDInput.get());
assertEquals("stateNode", c.inputNameInput.get());
assertEquals("kappa/estimate=true", c.conditionInput.get());
String xml = t.xMLInput.get();
assertEquals("<![CDATA[\n<parameter id=\"kappa\" name=\"stateNode\" value=\"1.0\"/>\n]]>", xml);
}
@Test
public void testBeautiSubTemplateIfMultipleElement() throws Exception {
BeautiSubTemplate t = new BeautiSubTemplate();
// minimal template + connector + name + condition for 2 entries
t.initByName("class",RealParameter.class.getName(),
"mainid", "kappa",
"value", "<state idref='thestate'>"
+ "<if cond='kappa/estimate=true'>"
+ "<parameter id='kappa' name='stateNode' value='1.0'/>"
+ "<parameter id='gamma' value='3.0'/>"
+ "</if></state>"
);
assertEquals(2, t.connectorsInput.get().size());
BeautiConnector c = t.connectorsInput.get().get(0);
assertEquals("kappa", c.sourceIDInput.get());
assertEquals("thestate", c.targetIDInput.get());
assertEquals("stateNode", c.inputNameInput.get());
assertEquals("kappa/estimate=true", c.conditionInput.get());
c = t.connectorsInput.get().get(1);
assertEquals("gamma", c.sourceIDInput.get());
assertEquals("thestate", c.targetIDInput.get());
assertEquals("parameter", c.inputNameInput.get());
assertEquals("kappa/estimate=true", c.conditionInput.get());
String xml = t.xMLInput.get();
assertEquals("<![CDATA[\n"+
"<parameter id=\"kappa\" name=\"stateNode\" value=\"1.0\"/>\n"+
"<parameter id=\"gamma\" value=\"3.0\"/>\n"+
"]]>", xml);
t = new BeautiSubTemplate();
// minimal template + connector + name + condition for 2 entries
t.initByName("class",RealParameter.class.getName(),
"mainid", "kappa",
"value", "<state idref='thestate'>"
+ "<if cond='kappa/estimate=true'>"
+ "<parameter id='kappa' name='stateNode' value='1.0'/>"
+ "<parameter idref='gamma'/>"
+ "</if></state>"
);
assertEquals(2, t.connectorsInput.get().size());
c = t.connectorsInput.get().get(0);
assertEquals("kappa", c.sourceIDInput.get());
assertEquals("thestate", c.targetIDInput.get());
assertEquals("stateNode", c.inputNameInput.get());
assertEquals("kappa/estimate=true", c.conditionInput.get());
c = t.connectorsInput.get().get(1);
assertEquals("gamma", c.sourceIDInput.get());
assertEquals("thestate", c.targetIDInput.get());
assertEquals("parameter", c.inputNameInput.get());
assertEquals("kappa/estimate=true", c.conditionInput.get());
xml = t.xMLInput.get();
assertEquals("<![CDATA[\n"+
"<parameter id=\"kappa\" name=\"stateNode\" value=\"1.0\"/>\n"+
"]]>", xml);
t = new BeautiSubTemplate();
// minimal template + connector + name + condition for 2 entries
t.initByName("class",RealParameter.class.getName(),
"mainid", "kappa",
"value", "<state idref='thestate'>"
+ "<if cond='kappa/estimate=true'>"
+ "<parameter idref='gamma'/>"
+ "<parameter id='kappa' name='stateNode' value='1.0'/>"
+ "</if></state>"
);
assertEquals(2, t.connectorsInput.get().size());
c = t.connectorsInput.get().get(1);
assertEquals("kappa", c.sourceIDInput.get());
assertEquals("thestate", c.targetIDInput.get());
assertEquals("stateNode", c.inputNameInput.get());
assertEquals("kappa/estimate=true", c.conditionInput.get());
c = t.connectorsInput.get().get(0);
assertEquals("gamma", c.sourceIDInput.get());
assertEquals("thestate", c.targetIDInput.get());
assertEquals("parameter", c.inputNameInput.get());
assertEquals("kappa/estimate=true", c.conditionInput.get());
xml = t.xMLInput.get();
assertEquals("<![CDATA[\n"+
"<parameter id=\"kappa\" name=\"stateNode\" value=\"1.0\"/>\n"+
"]]>", xml);
}
@Test
public void testBeautiSubTemplateCombined() throws Exception {
BeautiSubTemplate t = new BeautiSubTemplate();
// minimal template + connector + name + condition for 2 entries
t.initByName("class",RealParameter.class.getName(),
"mainid", "kappa",
"value", "<state idref='thestate'>"
+ " <if cond='kappa/estimate=true'>"
+ " <parameter id='kappa' name='stateNode' value='1.0'/>"
+ " <parameter id='gamma' value='3.0'/>"
+ " </if>"
+ "</state>"
+ "<logger idref='tracer'>"
+ " <if cond='gamma/estimate=true'>"
+ " <log idref='kappa'/>"
+ " <log idref='gamma'/>"
+ " </if>"
+ "</logger>"
);
assertEquals(4, t.connectorsInput.get().size());
BeautiConnector c = t.connectorsInput.get().get(0);
assertEquals("kappa", c.sourceIDInput.get());
assertEquals("thestate", c.targetIDInput.get());
assertEquals("stateNode", c.inputNameInput.get());
assertEquals("kappa/estimate=true", c.conditionInput.get());
c = t.connectorsInput.get().get(1);
assertEquals("gamma", c.sourceIDInput.get());
assertEquals("thestate", c.targetIDInput.get());
assertEquals("parameter", c.inputNameInput.get());
assertEquals("kappa/estimate=true", c.conditionInput.get());
c = t.connectorsInput.get().get(2);
assertEquals("kappa", c.sourceIDInput.get());
assertEquals("tracer", c.targetIDInput.get());
assertEquals("log", c.inputNameInput.get());
assertEquals("gamma/estimate=true", c.conditionInput.get());
c = t.connectorsInput.get().get(3);
assertEquals("gamma", c.sourceIDInput.get());
assertEquals("tracer", c.targetIDInput.get());
assertEquals("log", c.inputNameInput.get());
assertEquals("gamma/estimate=true", c.conditionInput.get());
String xml = t.xMLInput.get();
assertEquals("<![CDATA[ <parameter id=\"kappa\" name=\"stateNode\" value=\"1.0\"/> <parameter id=\"gamma\" value=\"3.0\"/> ]]>"
, xml);
}
@Test
public void testBeautiSubTemplateCombined2() throws Exception {
BeautiSubTemplate t = new BeautiSubTemplate();
// minimal template + connector + name + condition for 2 entries
t.initByName("class",RealParameter.class.getName(),
"mainid", "kappa",
"value", "<state idref='thestate'>"
+ " <parameter id='kappa' name='stateNode' value='1.0' beauti:if='kappa/estimate=true'/>"
+ " <parameter id='gamma' value='3.0' beauti:if='gamma/estimate=true'/>"
+ "</state>"
+ "<logger idref='tracer'>"
+ " <log idref='kappa' beauti:if='kappa/estimate=true'/>"
+ " <log idref='gamma' beauti:if='gamma/estimate=true'/>"
+ "</logger>"
);
assertEquals(4, t.connectorsInput.get().size());
BeautiConnector c = t.connectorsInput.get().get(0);
assertEquals("kappa", c.sourceIDInput.get());
assertEquals("thestate", c.targetIDInput.get());
assertEquals("stateNode", c.inputNameInput.get());
assertEquals("kappa/estimate=true", c.conditionInput.get());
c = t.connectorsInput.get().get(1);
assertEquals("gamma", c.sourceIDInput.get());
assertEquals("thestate", c.targetIDInput.get());
assertEquals("parameter", c.inputNameInput.get());
assertEquals("gamma/estimate=true", c.conditionInput.get());
c = t.connectorsInput.get().get(2);
assertEquals("kappa", c.sourceIDInput.get());
assertEquals("tracer", c.targetIDInput.get());
assertEquals("log", c.inputNameInput.get());
assertEquals("kappa/estimate=true", c.conditionInput.get());
c = t.connectorsInput.get().get(3);
assertEquals("gamma", c.sourceIDInput.get());
assertEquals("tracer", c.targetIDInput.get());
assertEquals("log", c.inputNameInput.get());
assertEquals("gamma/estimate=true", c.conditionInput.get());
String xml = t.xMLInput.get().replaceAll("\\s+", " ");
assertEquals("<![CDATA[ <parameter id=\"kappa\" name=\"stateNode\" value=\"1.0\"/> <parameter id=\"gamma\" value=\"3.0\"/> ]]>"
, xml);
}
}