package test.beast.core; import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; import org.junit.Test; import beast.core.BEASTInterface; import beast.core.Citation; import beast.core.Description; import beast.core.Input; import beast.core.Input.Validate; import junit.framework.TestCase; public class BEASTInterfaceTest extends TestCase { @Description("class that impements BEASTInterface but is not a BEASTObject") @Citation("this is a dummy citation") public class BEASTi implements BEASTInterface { final public Input<String> msgInput = new Input<>("value", "message for this BEASTi object", Validate.REQUIRED); final public Input<BEASTi> beastiInput = new Input<>("other", "link to another BEASTi object"); String ID; Set<BEASTInterface> outputs = new HashSet<BEASTInterface>(); Map<String, Input<?>> inputs; @Override public String getID() { return ID; } @Override public void setID(String ID) { this.ID = ID; } @Override public Set<BEASTInterface> getOutputs() { return outputs; } @Override public void initAndValidate() { // nothing to do; } @Override public Map<String, Input<?>> getInputs() { if (inputs == null) { inputs = new HashMap<>(); inputs.put("value", msgInput); inputs.put("other", beastiInput); } return inputs; } } @Description("class that extends BEASTi with multiple citations") @Citation("this is another dummy citation") @Citation("and yet another dummy citation") public class BEASTi2 extends BEASTi { } @Test public void testBEASTi() throws Exception { BEASTi beasti = new BEASTi(); System.err.println("test getCitation"); Citation citation = beasti.getCitation(); assertEquals("this is a dummy citation", citation.value()); citation = beasti.getCitationList().get(0); assertEquals("this is a dummy citation", citation.value()); BEASTi beasti02 = new BEASTi2(); List<Citation> citations = beasti02.getCitationList(); assertEquals(3, citations.size()); System.err.println("test initByName"); beasti.initByName("value", "hello world"); Input<?> input = beasti.getInput("value"); assertEquals("hello world", input.get()); System.err.println("test listInputs"); List<?> list = beasti.listInputs(); assertEquals(2, list.size()); System.err.println("test initByName"); BEASTi beasti2 = new BEASTi(); beasti.initByName("value", "hello world", "other", beasti2); System.err.println("test getInputValue"); BEASTi beasti3 = (BEASTi) beasti.getInputValue("other"); assertEquals(beasti2, beasti3); System.err.println("test getOutputs"); assertEquals(1, beasti2.getOutputs().size()); String description = beasti.getDescription(); assertEquals("class that impements BEASTInterface but is not a BEASTObject", description); List<BEASTInterface> predecessors = new ArrayList<BEASTInterface>(); beasti2.getPredecessors(predecessors); assertEquals(1, predecessors.size()); beasti.getPredecessors(predecessors); assertEquals(2, predecessors.size()); assertEquals(beasti, predecessors.get(1)); assertEquals(beasti2, predecessors.get(0)); description = beasti.getTipText("other"); assertEquals("link to another BEASTi object", description); boolean b = beasti.isPrimitive("value"); assertEquals(true, b); b = beasti.isPrimitive("other"); assertEquals(false, b); List<BEASTInterface> beastObjbects = beasti.listActiveBEASTObjects(); assertEquals(1, beastObjbects.size()); assertEquals(beasti2, beastObjbects.get(0)); beastObjbects = beasti2.listActiveBEASTObjects(); assertEquals(0, beastObjbects.size()); beasti.validateInputs(); try { beasti2.validateInputs(); assertEquals(true, false); // should never get here } catch (Throwable t) { // lucky to be here } beasti2.setInputValue("value", "Goodbye!"); String msg = (String) beasti2.getInputValue("value"); assertEquals("Goodbye!", msg); } }