package test.beast.app.beauti;
import static org.fest.assertions.Assertions.assertThat;
import java.awt.Component;
import java.io.File;
import java.util.Arrays;
import javax.swing.JComboBox;
import org.fest.swing.data.Index;
import org.fest.swing.data.TableCell;
import org.fest.swing.fixture.JComboBoxFixture;
import org.fest.swing.fixture.JTabbedPaneFixture;
import org.fest.swing.fixture.JTableCellFixture;
import org.fest.swing.fixture.JTableFixture;
import org.fest.swing.fixture.JTextComponentFixture;
import org.fest.swing.image.ScreenshotTaker;
import org.junit.Test;
public class BeautiSimpleTest extends BeautiBase {
@Test
public void simpleTest() throws Exception {
importAlignment("examples/nexus", new File("anolis.nex"));
// load anolis.nex
JTabbedPaneFixture f = beautiFrame.tabbedPane();
f.requireVisible();
f.requireTitle("Partitions", Index.atIndex(0));
String[] titles = f.tabTitles();
assertArrayEquals(titles,"[Partitions, Tip Dates, Site Model, Clock Model, Priors, MCMC]");
System.err.println(Arrays.toString(titles));
f = f.selectTab("Partitions");
JTableFixture t = beautiFrame.table();
String[][] tc = t.contents();
System.err.println(Arrays.toString(tc[0]));
assertArrayEquals(tc[0],"[anolis, anolis, 29, 1456, nucleotide, anolis, anolis, anolis, false]");
assertThat(f).isNotNull();
assertStateEquals("Tree.t:anolis", "birthRate.t:anolis");
assertOperatorsEqual("YuleBirthRateScaler.t:anolis", "YuleModelTreeScaler.t:anolis", "YuleModelTreeRootScaler.t:anolis", "YuleModelUniformOperator.t:anolis", "YuleModelSubtreeSlide.t:anolis", "YuleModelNarrow.t:anolis", "YuleModelWide.t:anolis", "YuleModelWilsonBalding.t:anolis");
assertPriorsEqual("YuleModel.t:anolis", "YuleBirthRatePrior.t:anolis");
assertTraceLogEqual("posterior", "likelihood", "prior", "treeLikelihood.anolis", "TreeHeight.t:anolis", "YuleModel.t:anolis", "birthRate.t:anolis");
ScreenshotTaker screenshotTaker = new ScreenshotTaker();
(new File("/tmp/simpleTest1.png")).delete();
(new File("/tmp/simpleTest2.png")).delete();
(new File("/tmp/simpleTest3.png")).delete();
(new File("/tmp/simpleTest4.png")).delete();
screenshotTaker.saveComponentAsPng(beauti.frame, "/tmp/simpleTest1.png");
// Set the site model to HKY (estimated)
f.selectTab("Site Model");
JComboBoxFixture substModel = beautiFrame.comboBox("substModel");
substModel.selectItem("HKY");
printBeautiState(f);
assertStateEquals("Tree.t:anolis", "birthRate.t:anolis", "kappa.s:anolis", "freqParameter.s:anolis");
assertOperatorsEqual("YuleBirthRateScaler.t:anolis", "YuleModelTreeScaler.t:anolis", "YuleModelTreeRootScaler.t:anolis", "YuleModelUniformOperator.t:anolis", "YuleModelSubtreeSlide.t:anolis", "YuleModelNarrow.t:anolis", "YuleModelWide.t:anolis", "YuleModelWilsonBalding.t:anolis", "KappaScaler.s:anolis", "FrequenciesExchanger.s:anolis");
assertPriorsEqual("YuleModel.t:anolis", "YuleBirthRatePrior.t:anolis", "KappaPrior.s:anolis");
assertTraceLogEqual("posterior", "likelihood", "prior", "treeLikelihood.anolis", "TreeHeight.t:anolis", "YuleModel.t:anolis", "birthRate.t:anolis", "kappa.s:anolis", "freqParameter.s:anolis");
// Set the site model to HKY (G4) (estimated)
f.selectTab("Site Model");
JTextComponentFixture categoryCount = beautiFrame.textBox("gammaCategoryCount");
categoryCount.setText("4");
printBeautiState(f);
// assertStateEquals("Tree.t:anolis", "birthRate.t:anolis", "kappa.s:anolis", "freqParameter.s:anolis");
// assertOperatorsEqual("YuleBirthRateScaler.t:anolis", "YuleModelTreeScaler.t:anolis", "YuleModelTreeRootScaler.t:anolis", "YuleModelUniformOperator.t:anolis", "YuleModelSubtreeSlide.t:anolis", "YuleModelNarrow.t:anolis", "YuleModelWide.t:anolis", "YuleModelWilsonBalding.t:anolis", "KappaScaler.s:anolis", "FrequenciesExchanger.s:anolis");
// assertPriorsEqual("YuleModel.t:anolis", "YuleBirthRatePrior.t:anolis", "KappaPrior.s:anolis");
// assertTraceLogEqual("posterior", "likelihood", "prior", "treeLikelihood.anolis", "TreeHeight.t:anolis", "YuleModel.t:anolis", "birthRate.t:anolis", "kappa.s:anolis", "freqParameter.s:anolis");
//
// f.selectTab("Site Model");
// JCheckBoxFixture shapeIsEstimated = beautiFrame.checkBox("shape.isEstimated");
// shapeIsEstimated.check();
// printBeautiState(f);
assertStateEquals("Tree.t:anolis", "birthRate.t:anolis", "kappa.s:anolis", "gammaShape.s:anolis", "freqParameter.s:anolis");
assertOperatorsEqual("YuleBirthRateScaler.t:anolis", "YuleModelTreeScaler.t:anolis", "YuleModelTreeRootScaler.t:anolis", "YuleModelUniformOperator.t:anolis", "YuleModelSubtreeSlide.t:anolis", "YuleModelNarrow.t:anolis", "YuleModelWide.t:anolis", "YuleModelWilsonBalding.t:anolis", "KappaScaler.s:anolis", "gammaShapeScaler.s:anolis", "FrequenciesExchanger.s:anolis");
assertPriorsEqual("YuleModel.t:anolis", "YuleBirthRatePrior.t:anolis", "KappaPrior.s:anolis", "GammaShapePrior.s:anolis");
assertTraceLogEqual("posterior", "likelihood", "prior", "treeLikelihood.anolis", "TreeHeight.t:anolis", "YuleModel.t:anolis", "birthRate.t:anolis", "kappa.s:anolis", "gammaShape.s:anolis", "freqParameter.s:anolis");
screenshotTaker.saveComponentAsPng(beauti.frame, "/tmp/simpleTest2.png");
// rename tree from 'anolis' to 'tree'
f.selectTab("Partitions");
JTableCellFixture cell = beautiFrame.table().cell(TableCell.row(0).column(7));
Component editor = cell.editor();
JComboBoxFixture comboBox = new JComboBoxFixture(robot(), (JComboBox<?>) editor);
cell.startEditing();
comboBox.selectAllText();
comboBox.enterText("tree");
cell.stopEditing();
printBeautiState(f);
assertStateEquals("Tree.t:tree", "birthRate.t:tree", "kappa.s:anolis", "gammaShape.s:anolis", "freqParameter.s:anolis");
assertOperatorsEqual("YuleBirthRateScaler.t:tree", "YuleModelTreeScaler.t:tree", "YuleModelTreeRootScaler.t:tree", "YuleModelUniformOperator.t:tree", "YuleModelSubtreeSlide.t:tree", "YuleModelNarrow.t:tree", "YuleModelWide.t:tree", "YuleModelWilsonBalding.t:tree", "KappaScaler.s:anolis", "gammaShapeScaler.s:anolis", "FrequenciesExchanger.s:anolis");
assertPriorsEqual("YuleModel.t:tree", "YuleBirthRatePrior.t:tree", "GammaShapePrior.s:anolis", "KappaPrior.s:anolis");
assertTraceLogEqual("posterior", "likelihood", "prior", "treeLikelihood.anolis", "TreeHeight.t:tree", "YuleModel.t:tree", "birthRate.t:tree", "kappa.s:anolis", "gammaShape.s:anolis", "freqParameter.s:anolis");
screenshotTaker.saveComponentAsPng(beauti.frame, "/tmp/simpleTest3.png");
// Create a Normal calibration prior and monophyletic constraint on Human-Chimp split of 6 +/- 0.5.
f.selectTab("Priors");
screenshotTaker.saveComponentAsPng(beauti.frame, "/tmp/simpleTest4.png");
makeSureXMLParses();
}
}