package test.beast.app.beauti; import java.io.File; import java.util.LinkedHashSet; import java.util.Set; import org.fest.assertions.Assertions; import org.fest.swing.data.TableCell; import org.fest.swing.fixture.JComboBoxFixture; import org.fest.swing.fixture.JTabbedPaneFixture; import org.fest.swing.fixture.JTableFixture; import org.junit.Test; import beast.core.BEASTInterface; import beast.core.Distribution; import beast.core.Function; import beast.core.parameter.Parameter; import beast.core.util.CompoundDistribution; import beast.math.distributions.Prior; public class LinkUnlinkTest extends BeautiBase { /** robustly select rows -- don't give up after first attempt **/ private void selectRows(int ... rows) { JTableFixture t = beautiFrame.table(); for (int attempt = 0; attempt < 5; attempt++) { t.selectRows(rows); if (t.target.getSelectedRowCount() == rows.length) { return; } try { Thread.sleep(500); } catch (Exception e) { } } } @Test public void simpleLinkUnlinkTwoAlignmentTest() throws Exception { warning("Load gopher data 26.nex, 47.nex"); importAlignment("examples/nexus", new File("26.nex"), new File("47.nex")); JTabbedPaneFixture f = beautiFrame.tabbedPane(); printBeautiState(f); selectRows(0, 1); warning("Link site models"); f.selectTab("Partitions"); beautiFrame.button("Link Site Models").click(); printBeautiState(f); warning("Unlink site models"); f.selectTab("Partitions"); beautiFrame.button("Unlink Site Models").click(); printBeautiState(f); assertStateEquals("Tree.t:26", "birthRate.t:26", "Tree.t:47", "clockRate.c:47", "birthRate.t:47"); assertOperatorsEqual("YuleBirthRateScaler.t:26", "YuleModelTreeScaler.t:26", "YuleModelTreeRootScaler.t:26", "YuleModelUniformOperator.t:26", "YuleModelSubtreeSlide.t:26", "YuleModelNarrow.t:26", "YuleModelWide.t:26", "YuleModelWilsonBalding.t:26", "StrictClockRateScaler.c:47", "YuleBirthRateScaler.t:47", "YuleModelTreeScaler.t:47", "YuleModelTreeRootScaler.t:47", "YuleModelUniformOperator.t:47", "YuleModelSubtreeSlide.t:47", "YuleModelNarrow.t:47", "YuleModelWide.t:47", "YuleModelWilsonBalding.t:47", "strictClockUpDownOperator.c:47"); assertPriorsEqual("YuleModel.t:26", "YuleBirthRatePrior.t:26", "YuleModel.t:47", "ClockPrior.c:47", "YuleBirthRatePrior.t:47"); assertTraceLogEqual("posterior", "likelihood", "prior", "treeLikelihood.26", "TreeHeight.t:26", "YuleModel.t:26", "birthRate.t:26", "treeLikelihood.47", "TreeHeight.t:47", "clockRate.c:47", "YuleModel.t:47", "birthRate.t:47"); warning("Link clock models"); f.selectTab("Partitions"); beautiFrame.button("Link Clock Models").click(); printBeautiState(f); warning("Unlink clock models"); f.selectTab("Partitions"); beautiFrame.button("Unlink Clock Models").click(); printBeautiState(f); assertStateEquals("Tree.t:26", "birthRate.t:26", "Tree.t:47", "clockRate.c:47", "birthRate.t:47"); assertOperatorsEqual("YuleBirthRateScaler.t:26", "YuleModelTreeScaler.t:26", "YuleModelTreeRootScaler.t:26", "YuleModelUniformOperator.t:26", "YuleModelSubtreeSlide.t:26", "YuleModelNarrow.t:26", "YuleModelWide.t:26", "YuleModelWilsonBalding.t:26", "StrictClockRateScaler.c:47", "YuleBirthRateScaler.t:47", "YuleModelTreeScaler.t:47", "YuleModelTreeRootScaler.t:47", "YuleModelUniformOperator.t:47", "YuleModelSubtreeSlide.t:47", "YuleModelNarrow.t:47", "YuleModelWide.t:47", "YuleModelWilsonBalding.t:47", "strictClockUpDownOperator.c:47"); assertPriorsEqual("YuleModel.t:26", "YuleBirthRatePrior.t:26", "YuleModel.t:47", "ClockPrior.c:47", "YuleBirthRatePrior.t:47"); assertTraceLogEqual("posterior", "likelihood", "prior", "treeLikelihood.26", "TreeHeight.t:26", "YuleModel.t:26", "birthRate.t:26", "treeLikelihood.47", "TreeHeight.t:47", "clockRate.c:47", "YuleModel.t:47", "birthRate.t:47"); warning("Link trees"); f.selectTab("Partitions"); beautiFrame.button("Link Trees").click(); printBeautiState(f); warning("Unlink trees"); f.selectTab("Partitions"); beautiFrame.button("Unlink Trees").click(); printBeautiState(f); assertStateEquals("Tree.t:26", "birthRate.t:26", "Tree.t:47", "clockRate.c:47", "birthRate.t:47"); assertOperatorsEqual("YuleBirthRateScaler.t:26", "YuleModelTreeScaler.t:26", "YuleModelTreeRootScaler.t:26", "YuleModelUniformOperator.t:26", "YuleModelSubtreeSlide.t:26", "YuleModelNarrow.t:26", "YuleModelWide.t:26", "YuleModelWilsonBalding.t:26", "StrictClockRateScaler.c:47", "YuleBirthRateScaler.t:47", "YuleModelTreeScaler.t:47", "YuleModelTreeRootScaler.t:47", "YuleModelUniformOperator.t:47", "YuleModelSubtreeSlide.t:47", "YuleModelNarrow.t:47", "YuleModelWide.t:47", "YuleModelWilsonBalding.t:47", "strictClockUpDownOperator.c:47"); assertPriorsEqual("YuleModel.t:26", "YuleBirthRatePrior.t:26", "YuleModel.t:47", "ClockPrior.c:47", "YuleBirthRatePrior.t:47"); assertTraceLogEqual("posterior", "likelihood", "prior", "treeLikelihood.26", "TreeHeight.t:26", "YuleModel.t:26", "birthRate.t:26", "treeLikelihood.47", "TreeHeight.t:47", "clockRate.c:47", "YuleModel.t:47", "birthRate.t:47"); makeSureXMLParses(); } @Test public void simpleLinkUnlinkThreeAlignmentsTest() throws Exception { warning("Load gopher data 26.nex, 47.nex, 59.nex"); importAlignment("examples/nexus", new File("26.nex"), new File("47.nex"), new File("59.nex")); JTabbedPaneFixture f = beautiFrame.tabbedPane(); printBeautiState(f); assertStateEquals("Tree.t:26", "birthRate.t:26", "Tree.t:47", "clockRate.c:47", "birthRate.t:47", "Tree.t:59", "clockRate.c:59", "birthRate.t:59"); assertOperatorsEqual("YuleBirthRateScaler.t:26", "YuleModelTreeScaler.t:26", "YuleModelTreeRootScaler.t:26", "YuleModelUniformOperator.t:26", "YuleModelSubtreeSlide.t:26", "YuleModelNarrow.t:26", "YuleModelWide.t:26", "YuleModelWilsonBalding.t:26", "StrictClockRateScaler.c:47", "YuleBirthRateScaler.t:47", "YuleModelTreeScaler.t:47", "YuleModelTreeRootScaler.t:47", "YuleModelUniformOperator.t:47", "YuleModelSubtreeSlide.t:47", "YuleModelNarrow.t:47", "YuleModelWide.t:47", "YuleModelWilsonBalding.t:47", "strictClockUpDownOperator.c:47", "StrictClockRateScaler.c:59", "YuleBirthRateScaler.t:59", "YuleModelTreeScaler.t:59", "YuleModelTreeRootScaler.t:59", "YuleModelUniformOperator.t:59", "YuleModelSubtreeSlide.t:59", "YuleModelNarrow.t:59", "YuleModelWide.t:59", "YuleModelWilsonBalding.t:59", "strictClockUpDownOperator.c:59"); assertPriorsEqual("YuleModel.t:26", "YuleBirthRatePrior.t:26", "YuleModel.t:47", "ClockPrior.c:47", "YuleBirthRatePrior.t:47", "YuleModel.t:59", "ClockPrior.c:59", "YuleBirthRatePrior.t:59"); assertTraceLogEqual("posterior", "likelihood", "prior", "treeLikelihood.26", "TreeHeight.t:26", "YuleModel.t:26", "birthRate.t:26", "treeLikelihood.47", "TreeHeight.t:47", "clockRate.c:47", "YuleModel.t:47", "birthRate.t:47", "treeLikelihood.59", "TreeHeight.t:59", "clockRate.c:59", "YuleModel.t:59", "birthRate.t:59"); selectRows(0, 1, 2); warning("Link site models"); f.selectTab("Partitions"); beautiFrame.button("Link Site Models").click(); printBeautiState(f); warning("Unlink site models"); f.selectTab("Partitions"); beautiFrame.button("Unlink Site Models").click(); printBeautiState(f); assertStateEquals("Tree.t:26", "birthRate.t:26", "Tree.t:47", "clockRate.c:47", "birthRate.t:47", "Tree.t:59", "clockRate.c:59", "birthRate.t:59"); assertOperatorsEqual("YuleBirthRateScaler.t:26", "YuleModelTreeScaler.t:26", "YuleModelTreeRootScaler.t:26", "YuleModelUniformOperator.t:26", "YuleModelSubtreeSlide.t:26", "YuleModelNarrow.t:26", "YuleModelWide.t:26", "YuleModelWilsonBalding.t:26", "StrictClockRateScaler.c:47", "YuleBirthRateScaler.t:47", "YuleModelTreeScaler.t:47", "YuleModelTreeRootScaler.t:47", "YuleModelUniformOperator.t:47", "YuleModelSubtreeSlide.t:47", "YuleModelNarrow.t:47", "YuleModelWide.t:47", "YuleModelWilsonBalding.t:47", "strictClockUpDownOperator.c:47", "StrictClockRateScaler.c:59", "YuleBirthRateScaler.t:59", "YuleModelTreeScaler.t:59", "YuleModelTreeRootScaler.t:59", "YuleModelUniformOperator.t:59", "YuleModelSubtreeSlide.t:59", "YuleModelNarrow.t:59", "YuleModelWide.t:59", "YuleModelWilsonBalding.t:59", "strictClockUpDownOperator.c:59"); assertPriorsEqual("YuleModel.t:26", "YuleBirthRatePrior.t:26", "YuleModel.t:47", "ClockPrior.c:47", "YuleBirthRatePrior.t:47", "YuleModel.t:59", "ClockPrior.c:59", "YuleBirthRatePrior.t:59"); assertTraceLogEqual("posterior", "likelihood", "prior", "treeLikelihood.26", "TreeHeight.t:26", "YuleModel.t:26", "birthRate.t:26", "treeLikelihood.47", "TreeHeight.t:47", "clockRate.c:47", "YuleModel.t:47", "birthRate.t:47", "treeLikelihood.59", "TreeHeight.t:59", "clockRate.c:59", "YuleModel.t:59", "birthRate.t:59"); warning("Link clock models"); f.selectTab("Partitions"); beautiFrame.button("Link Clock Models").click(); printBeautiState(f); warning("Unlink clock models"); f.selectTab("Partitions"); beautiFrame.button("Unlink Clock Models").click(); printBeautiState(f); assertStateEquals("Tree.t:26", "birthRate.t:26", "Tree.t:47", "clockRate.c:47", "birthRate.t:47", "Tree.t:59", "clockRate.c:59", "birthRate.t:59"); assertOperatorsEqual("YuleBirthRateScaler.t:26", "YuleModelTreeScaler.t:26", "YuleModelTreeRootScaler.t:26", "YuleModelUniformOperator.t:26", "YuleModelSubtreeSlide.t:26", "YuleModelNarrow.t:26", "YuleModelWide.t:26", "YuleModelWilsonBalding.t:26", "StrictClockRateScaler.c:47", "YuleBirthRateScaler.t:47", "YuleModelTreeScaler.t:47", "YuleModelTreeRootScaler.t:47", "YuleModelUniformOperator.t:47", "YuleModelSubtreeSlide.t:47", "YuleModelNarrow.t:47", "YuleModelWide.t:47", "YuleModelWilsonBalding.t:47", "strictClockUpDownOperator.c:47", "StrictClockRateScaler.c:59", "YuleBirthRateScaler.t:59", "YuleModelTreeScaler.t:59", "YuleModelTreeRootScaler.t:59", "YuleModelUniformOperator.t:59", "YuleModelSubtreeSlide.t:59", "YuleModelNarrow.t:59", "YuleModelWide.t:59", "YuleModelWilsonBalding.t:59", "strictClockUpDownOperator.c:59"); assertPriorsEqual("YuleModel.t:26", "YuleBirthRatePrior.t:26", "YuleModel.t:47", "ClockPrior.c:47", "YuleBirthRatePrior.t:47", "YuleModel.t:59", "ClockPrior.c:59", "YuleBirthRatePrior.t:59"); assertTraceLogEqual("posterior", "likelihood", "prior", "treeLikelihood.26", "TreeHeight.t:26", "YuleModel.t:26", "birthRate.t:26", "treeLikelihood.47", "TreeHeight.t:47", "clockRate.c:47", "YuleModel.t:47", "birthRate.t:47", "treeLikelihood.59", "TreeHeight.t:59", "clockRate.c:59", "YuleModel.t:59", "birthRate.t:59"); warning("Link trees"); f.selectTab("Partitions"); beautiFrame.button("Link Trees").click(); printBeautiState(f); warning("Unlink trees"); f.selectTab("Partitions"); beautiFrame.button("Unlink Trees").click(); printBeautiState(f); assertStateEquals("Tree.t:26", "birthRate.t:26", "Tree.t:47", "clockRate.c:47", "birthRate.t:47", "Tree.t:59", "clockRate.c:59", "birthRate.t:59"); assertPriorsEqual("YuleModel.t:26", "YuleBirthRatePrior.t:26", "YuleModel.t:47", "ClockPrior.c:47", "YuleBirthRatePrior.t:47", "YuleModel.t:59", "ClockPrior.c:59", "YuleBirthRatePrior.t:59"); assertOperatorsEqual("YuleBirthRateScaler.t:26", "YuleModelTreeScaler.t:26", "YuleModelTreeRootScaler.t:26", "YuleModelUniformOperator.t:26", "YuleModelSubtreeSlide.t:26", "YuleModelNarrow.t:26", "YuleModelWide.t:26", "YuleModelWilsonBalding.t:26", "StrictClockRateScaler.c:47", "YuleBirthRateScaler.t:47", "YuleModelTreeScaler.t:47", "YuleModelTreeRootScaler.t:47", "YuleModelUniformOperator.t:47", "YuleModelSubtreeSlide.t:47", "YuleModelNarrow.t:47", "YuleModelWide.t:47", "YuleModelWilsonBalding.t:47", "strictClockUpDownOperator.c:47", "StrictClockRateScaler.c:59", "YuleBirthRateScaler.t:59", "YuleModelTreeScaler.t:59", "YuleModelTreeRootScaler.t:59", "YuleModelUniformOperator.t:59", "YuleModelSubtreeSlide.t:59", "YuleModelNarrow.t:59", "YuleModelWide.t:59", "YuleModelWilsonBalding.t:59", "strictClockUpDownOperator.c:59"); assertTraceLogEqual("posterior", "likelihood", "prior", "treeLikelihood.26", "TreeHeight.t:26", "YuleModel.t:26", "birthRate.t:26", "treeLikelihood.47", "TreeHeight.t:47", "clockRate.c:47", "YuleModel.t:47", "birthRate.t:47", "treeLikelihood.59", "TreeHeight.t:59", "clockRate.c:59", "YuleModel.t:59", "birthRate.t:59"); makeSureXMLParses(); } @Test public void linkTreesAndDeleteTest2a() throws Exception { warning("Load gopher data 26.nex, 47.nex"); importAlignment("examples/nexus", new File("26.nex"), new File("47.nex")); JTabbedPaneFixture f = beautiFrame.tabbedPane(); printBeautiState(f); selectRows(0, 1); warning("Link trees"); f.selectTab("Partitions"); beautiFrame.button("Link Trees").click(); printBeautiState(f); warning("Delete second partition"); f.selectTab("Partitions"); selectRows(1); beautiFrame.button("-").click(); printBeautiState(f); assertPriorsEqual("YuleModel.t:26", "YuleBirthRatePrior.t:26"); makeSureXMLParses(); } @Test public void linkTreesAndDeleteTest2b() throws Exception { warning("Load gopher data 26.nex, 47.nex"); importAlignment("examples/nexus", new File("26.nex"), new File("47.nex")); JTabbedPaneFixture f = beautiFrame.tabbedPane(); printBeautiState(f); selectRows(1, 0); warning("Link trees"); f.selectTab("Partitions"); beautiFrame.button("Link Trees").click(); printBeautiState(f); assertPriorsEqual("YuleModel.t:26", "YuleBirthRatePrior.t:26", "ClockPrior.c:47"); warning("Delete first partition"); f.selectTab("Partitions"); beautiFrame.table().selectCell(TableCell.row(0).column(1)); beautiFrame.button("-").click(); printBeautiState(f); assertPriorsEqual("YuleModel.t:26", "YuleBirthRatePrior.t:26"); makeSureXMLParses(); } @Test public void linkTreesAndDeleteTest3() throws Exception { warning("Load gopher data 26.nex, 47.nex, 59.nex"); importAlignment("examples/nexus", new File("26.nex"), new File("47.nex"), new File("59.nex")); JTabbedPaneFixture f = beautiFrame.tabbedPane(); printBeautiState(f); assertStateEquals("Tree.t:26", "birthRate.t:26", "Tree.t:47", "clockRate.c:47", "birthRate.t:47", "Tree.t:59", "clockRate.c:59", "birthRate.t:59"); assertOperatorsEqual("YuleBirthRateScaler.t:26", "YuleModelTreeScaler.t:26", "YuleModelTreeRootScaler.t:26", "YuleModelUniformOperator.t:26", "YuleModelSubtreeSlide.t:26", "YuleModelNarrow.t:26", "YuleModelWide.t:26", "YuleModelWilsonBalding.t:26", "StrictClockRateScaler.c:47", "YuleBirthRateScaler.t:47", "YuleModelTreeScaler.t:47", "YuleModelTreeRootScaler.t:47", "YuleModelUniformOperator.t:47", "YuleModelSubtreeSlide.t:47", "YuleModelNarrow.t:47", "YuleModelWide.t:47", "YuleModelWilsonBalding.t:47", "strictClockUpDownOperator.c:47", "StrictClockRateScaler.c:59", "YuleBirthRateScaler.t:59", "YuleModelTreeScaler.t:59", "YuleModelTreeRootScaler.t:59", "YuleModelUniformOperator.t:59", "YuleModelSubtreeSlide.t:59", "YuleModelNarrow.t:59", "YuleModelWide.t:59", "YuleModelWilsonBalding.t:59", "strictClockUpDownOperator.c:59"); assertPriorsEqual("YuleModel.t:26", "YuleBirthRatePrior.t:26", "YuleModel.t:47", "ClockPrior.c:47", "YuleBirthRatePrior.t:47", "YuleModel.t:59", "ClockPrior.c:59", "YuleBirthRatePrior.t:59"); assertTraceLogEqual("posterior", "likelihood", "prior", "treeLikelihood.26", "TreeHeight.t:26", "YuleModel.t:26", "birthRate.t:26", "treeLikelihood.47", "TreeHeight.t:47", "clockRate.c:47", "YuleModel.t:47", "birthRate.t:47", "treeLikelihood.59", "TreeHeight.t:59", "clockRate.c:59", "YuleModel.t:59", "birthRate.t:59"); selectRows(2, 1, 0); warning("Link trees"); f.selectTab("Partitions"); beautiFrame.button("Link Trees").click(); printBeautiState(f); assertPriorsEqual("YuleModel.t:26", "YuleBirthRatePrior.t:26", "ClockPrior.c:47", "ClockPrior.c:59"); makeSureXMLParses(); warning("Delete second partition (47)"); f.selectTab("Partitions"); selectRows(1); beautiFrame.button("-").click(); printBeautiState(f); assertPriorsEqual("YuleModel.t:26", "YuleBirthRatePrior.t:26", "ClockPrior.c:59"); makeSureXMLParses(); warning("Delete first partition (26)"); f.selectTab("Partitions"); selectRows(0); beautiFrame.button("-").click(); printBeautiState(f); assertPriorsEqual("YuleModel.t:26", "YuleBirthRatePrior.t:26"); makeSureXMLParses(); } @Test public void linkTreesAndClocksAndDeleteTest() throws Exception { warning("Load gopher data 26.nex, 47.nex, 59.nex"); importAlignment("examples/nexus", new File("26.nex"), new File("47.nex"), new File("59.nex")); JTabbedPaneFixture f = beautiFrame.tabbedPane(); printBeautiState(f); assertStateEquals("Tree.t:26", "birthRate.t:26", "Tree.t:47", "clockRate.c:47", "birthRate.t:47", "Tree.t:59", "clockRate.c:59", "birthRate.t:59"); assertOperatorsEqual("YuleBirthRateScaler.t:26", "YuleModelTreeScaler.t:26", "YuleModelTreeRootScaler.t:26", "YuleModelUniformOperator.t:26", "YuleModelSubtreeSlide.t:26", "YuleModelNarrow.t:26", "YuleModelWide.t:26", "YuleModelWilsonBalding.t:26", "StrictClockRateScaler.c:47", "YuleBirthRateScaler.t:47", "YuleModelTreeScaler.t:47", "YuleModelTreeRootScaler.t:47", "YuleModelUniformOperator.t:47", "YuleModelSubtreeSlide.t:47", "YuleModelNarrow.t:47", "YuleModelWide.t:47", "YuleModelWilsonBalding.t:47", "strictClockUpDownOperator.c:47", "StrictClockRateScaler.c:59", "YuleBirthRateScaler.t:59", "YuleModelTreeScaler.t:59", "YuleModelTreeRootScaler.t:59", "YuleModelUniformOperator.t:59", "YuleModelSubtreeSlide.t:59", "YuleModelNarrow.t:59", "YuleModelWide.t:59", "YuleModelWilsonBalding.t:59", "strictClockUpDownOperator.c:59"); assertPriorsEqual("YuleModel.t:26", "YuleBirthRatePrior.t:26", "YuleModel.t:47", "ClockPrior.c:47", "YuleBirthRatePrior.t:47", "YuleModel.t:59", "ClockPrior.c:59", "YuleBirthRatePrior.t:59"); assertTraceLogEqual("posterior", "likelihood", "prior", "treeLikelihood.26", "TreeHeight.t:26", "YuleModel.t:26", "birthRate.t:26", "treeLikelihood.47", "TreeHeight.t:47", "clockRate.c:47", "YuleModel.t:47", "birthRate.t:47", "treeLikelihood.59", "TreeHeight.t:59", "clockRate.c:59", "YuleModel.t:59", "birthRate.t:59"); selectRows(0, 1, 2); warning("Link trees"); f.selectTab("Partitions"); beautiFrame.button("Link Trees").click(); printBeautiState(f); warning("Link clocks"); selectRows(0, 1, 2); f.selectTab("Partitions"); beautiFrame.button("Link Clock Models").click(); printBeautiState(f); warning("Delete second partition"); f.selectTab("Partitions"); selectRows(1); beautiFrame.button("-").click(); printBeautiState(f); warning("Delete first partition"); f.selectTab("Partitions"); selectRows(0, 1); beautiFrame.button("Link Clock Models").click(); selectRows(0); beautiFrame.button("-").click(); printBeautiState(f); assertPriorsEqual("YuleModel.t:26", "YuleBirthRatePrior.t:26"); makeSureXMLParses(); } @Test public void linkSiteModelsAndDeleteTest() throws Exception { warning("Load gopher data 26.nex, 47.nex, 59.nex"); importAlignment("examples/nexus", new File("26.nex"), new File("47.nex"), new File("59.nex")); JTabbedPaneFixture f = beautiFrame.tabbedPane(); printBeautiState(f); assertStateEquals("Tree.t:26", "birthRate.t:26", "Tree.t:47", "clockRate.c:47", "birthRate.t:47", "Tree.t:59", "clockRate.c:59", "birthRate.t:59"); assertOperatorsEqual("YuleBirthRateScaler.t:26", "YuleModelTreeScaler.t:26", "YuleModelTreeRootScaler.t:26", "YuleModelUniformOperator.t:26", "YuleModelSubtreeSlide.t:26", "YuleModelNarrow.t:26", "YuleModelWide.t:26", "YuleModelWilsonBalding.t:26", "StrictClockRateScaler.c:47", "YuleBirthRateScaler.t:47", "YuleModelTreeScaler.t:47", "YuleModelTreeRootScaler.t:47", "YuleModelUniformOperator.t:47", "YuleModelSubtreeSlide.t:47", "YuleModelNarrow.t:47", "YuleModelWide.t:47", "YuleModelWilsonBalding.t:47", "strictClockUpDownOperator.c:47", "StrictClockRateScaler.c:59", "YuleBirthRateScaler.t:59", "YuleModelTreeScaler.t:59", "YuleModelTreeRootScaler.t:59", "YuleModelUniformOperator.t:59", "YuleModelSubtreeSlide.t:59", "YuleModelNarrow.t:59", "YuleModelWide.t:59", "YuleModelWilsonBalding.t:59", "strictClockUpDownOperator.c:59"); assertPriorsEqual("YuleModel.t:26", "YuleBirthRatePrior.t:26", "YuleModel.t:47", "ClockPrior.c:47", "YuleBirthRatePrior.t:47", "YuleModel.t:59", "ClockPrior.c:59", "YuleBirthRatePrior.t:59"); assertTraceLogEqual("posterior", "likelihood", "prior", "treeLikelihood.26", "TreeHeight.t:26", "YuleModel.t:26", "birthRate.t:26", "treeLikelihood.47", "TreeHeight.t:47", "clockRate.c:47", "YuleModel.t:47", "birthRate.t:47", "treeLikelihood.59", "TreeHeight.t:59", "clockRate.c:59", "YuleModel.t:59", "birthRate.t:59"); assertParameterCountInPriorIs(5); selectRows(0, 1, 2); warning("Link trees"); f.selectTab("Partitions"); beautiFrame.button("Link Trees").click(); printBeautiState(f); assertParameterCountInPriorIs(3); f.selectTab("Site Model"); JComboBoxFixture substModel = beautiFrame.comboBox("substModel"); substModel.selectItem("HKY"); assertParameterCountInPriorIs(6); f.selectTab("Partitions"); warning("Link site models"); selectRows(0, 1, 2); beautiFrame.button("Link Site Models").click(); printBeautiState(f); assertParameterCountInPriorIs(6); beautiFrame.button("Unlink Site Models").click(); assertParameterCountInPriorIs(12); warning("Delete second partition"); f.selectTab("Partitions"); selectRows(1); beautiFrame.button("-").click(); printBeautiState(f); assertParameterCountInPriorIs(8); warning("Delete first partition"); f.selectTab("Partitions"); selectRows(0, 1); beautiFrame.button("Link Clock Models").click(); beautiFrame.table().selectCell(TableCell.row(0).column(1)); beautiFrame.button("-").click(); printBeautiState(f); assertPriorsEqual("YuleModel.t:26", "YuleBirthRatePrior.t:26", "KappaPrior.s:59"); assertParameterCountInPriorIs(4); makeSureXMLParses(); } @Test public void linkUnlinkTreesAndSetTreePriorTest1() throws Exception { warning("Load gopher data 26.nex, 47.nex"); importAlignment("examples/nexus", new File("26.nex")); JTabbedPaneFixture f = beautiFrame.tabbedPane(); printBeautiState(f); f.selectTab("Priors"); warning("Change to Coalescent - constant population"); beautiFrame.comboBox("TreeDistribution").selectItem("Coalescent Constant Population"); assertPriorsEqual("CoalescentConstant.t:26", "PopSizePrior.t:26"); importAlignment("examples/nexus", new File("47.nex")); warning("Link trees"); f.selectTab("Partitions"); selectRows(1, 0); beautiFrame.button("Link Trees").click(); printBeautiState(f); assertPriorsEqual("CoalescentConstant.t:26", "ClockPrior.c:47", "PopSizePrior.t:26"); warning("Unlink trees"); beautiFrame.button("Unlink Trees").click(); // should have PopSizePrior.t:47 as well? assertPriorsEqual("CoalescentConstant.t:26", "CoalescentConstant.t:47", "ClockPrior.c:47", "PopSizePrior.t:26", "PopSizePrior.t:47"); // warning("Delete partition"); // f.selectTab("Partitions"); // selectRows(1); // beautiFrame.button("-").click(); // printBeautiState(f); // assertPriorsEqual("CoalescentConstant.t:26", "PopSizePrior.t:26"); warning("Delete partition"); f.selectTab("Partitions"); selectRows(0); beautiFrame.button("-").click(); printBeautiState(f); assertPriorsEqual("CoalescentConstant.t:47", "PopSizePrior.t:47"); makeSureXMLParses(); } @Test public void linkClocksAndDeleteTest() throws Exception { warning("Load gopher data 26.nex, 47.nex, 59.nex"); importAlignment("examples/nexus", new File("26.nex"), new File("47.nex"), new File("59.nex")); JTabbedPaneFixture f = beautiFrame.tabbedPane(); printBeautiState(f); selectRows(0, 1, 2); warning("Link clocks"); f.selectTab("Partitions"); beautiFrame.button("Link Clock Models").click(); printBeautiState(f); warning("Delete second partition"); f.selectTab("Partitions"); selectRows(1); beautiFrame.button("-").click(); printBeautiState(f); assertPriorsEqual("YuleModel.t:26", "YuleBirthRatePrior.t:26", "YuleModel.t:59", "YuleBirthRatePrior.t:59"); JTableFixture t = beautiFrame.table(); Assertions.assertThat(t.target.getRowCount()).isEqualTo(2); makeSureXMLParses(); } @Test public void linkSiteModelssAndDeleteTest() throws Exception { warning("Load gopher data 26.nex, 47.nex, 59.nex"); importAlignment("examples/nexus", new File("26.nex"), new File("47.nex"), new File("59.nex")); JTabbedPaneFixture f = beautiFrame.tabbedPane(); printBeautiState(f); selectRows(0, 1, 2); warning("Link clocks"); f.selectTab("Partitions"); beautiFrame.button("Link Site Models").click(); printBeautiState(f); warning("Delete second partition"); f.selectTab("Partitions"); selectRows(1); beautiFrame.button("-").click(); printBeautiState(f); assertPriorsEqual("YuleModel.t:26", "YuleBirthRatePrior.t:26", "YuleModel.t:59", "ClockPrior.c:59", "YuleBirthRatePrior.t:59"); JTableFixture t = beautiFrame.table(); Assertions.assertThat(t.target.getRowCount()).isEqualTo(2); makeSureXMLParses(); } @Test public void linkClocksSitesAndDeleteTest() throws Exception { warning("Load gopher data 26.nex, 47.nex, 59.nex"); importAlignment("examples/nexus", new File("26.nex"), new File("47.nex"), new File("59.nex")); JTabbedPaneFixture f = beautiFrame.tabbedPane(); printBeautiState(f); selectRows(0, 1, 2); warning("Link clocks"); f.selectTab("Partitions"); beautiFrame.button("Link Clock Models").click(); warning("Link site models"); f.selectTab("Partitions"); beautiFrame.button("Link Site Models").click(); printBeautiState(f); warning("Delete second partition"); f.selectTab("Partitions"); selectRows(1); beautiFrame.button("-").click(); printBeautiState(f); assertPriorsEqual("YuleModel.t:26", "YuleBirthRatePrior.t:26", "YuleModel.t:59", "YuleBirthRatePrior.t:59"); JTableFixture t = beautiFrame.table(); Assertions.assertThat(t.target.getRowCount()).isEqualTo(2); makeSureXMLParses(); } @Test public void linkClocksSitesTreesAndDeleteTest() throws Exception { warning("Load gopher data 26.nex, 47.nex, 59.nex"); importAlignment("examples/nexus", new File("26.nex"), new File("47.nex"), new File("59.nex")); JTabbedPaneFixture f = beautiFrame.tabbedPane(); printBeautiState(f); selectRows(0, 1, 2); warning("Link clocks"); f.selectTab("Partitions"); beautiFrame.button("Link Clock Models").click(); warning("Link site models"); f.selectTab("Partitions"); beautiFrame.button("Link Site Models").click(); printBeautiState(f); warning("Link trees"); f.selectTab("Partitions"); beautiFrame.button("Link Trees").click(); printBeautiState(f); warning("Delete second partition"); f.selectTab("Partitions"); selectRows(1); beautiFrame.button("-").click(); printBeautiState(f); assertPriorsEqual("YuleModel.t:26", "YuleBirthRatePrior.t:26"); JTableFixture t = beautiFrame.table(); Assertions.assertThat(t.target.getRowCount()).isEqualTo(2); makeSureXMLParses(); } @Test // issue #413 public void starBeastLinkTreesAndDeleteTest() throws Exception { warning("Select StarBeast template"); beautiFrame.menuItemWithPath("File", "Template", "StarBeast").click(); warning("Load gopher data 26.nex, 47.nex"); importAlignment("examples/nexus", new File("26.nex"), new File("47.nex")); JTabbedPaneFixture f = beautiFrame.tabbedPane(); printBeautiState(f); selectRows(0, 1); warning("Link trees"); f.selectTab("Partitions"); beautiFrame.button("Link Trees").click(); printBeautiState(f); warning("Delete second partition"); f.selectTab("Partitions"); selectRows(1); beautiFrame.button("-").click(); printBeautiState(f); // assertPriorsEqual("YuleModel.t:26", "YuleBirthRatePrior.t:26"); JTableFixture t = beautiFrame.table(); Assertions.assertThat(t.target.getRowCount()).isEqualTo(1); // does not parse unless taxon set is specified //makeSureXMLParses(); } @Test // issue #414 public void linkClocksDeleteAllTest() throws Exception { warning("Load gopher data 26.nex, 47.nex, 59.nex"); importAlignment("examples/nexus", new File("26.nex"), new File("47.nex"), new File("59.nex")); JTabbedPaneFixture f = beautiFrame.tabbedPane(); printBeautiState(f); selectRows(0, 1, 2); warning("Link clocks"); f.selectTab("Partitions"); beautiFrame.button("Link Clock Models").click(); beautiFrame.button("-").click(); JTableFixture t = beautiFrame.table(); Assertions.assertThat(t.target.getRowCount()).isEqualTo(0); } }