From bb8d445ac21fbb53ec754d9acdd18a693e6d80d9 Mon Sep 17 00:00:00 2001 From: gmungoc Date: Thu, 23 Oct 2014 15:39:44 +0100 Subject: [PATCH] JAL-1264 new unit tests --- test/jalview/datamodel/SequenceTest.java | 106 +++++++++++++++++++++ test/jalview/gui/PopupMenuTest.java | 150 ++++++++++++++++++++++++++++++ 2 files changed, 256 insertions(+) create mode 100644 test/jalview/datamodel/SequenceTest.java create mode 100644 test/jalview/gui/PopupMenuTest.java diff --git a/test/jalview/datamodel/SequenceTest.java b/test/jalview/datamodel/SequenceTest.java new file mode 100644 index 0000000..d9101cf --- /dev/null +++ b/test/jalview/datamodel/SequenceTest.java @@ -0,0 +1,106 @@ +package jalview.datamodel; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertSame; +import static org.junit.Assert.assertTrue; + +import java.util.List; + +import org.junit.Before; +import org.junit.Test; + +public class SequenceTest +{ + Sequence seq; + + @Before + public void setUp() + { + seq = new Sequence("FER1", "AKPNGVL"); + } + @Test + public void testGetAnnotation() + { + // initial state returns null not an empty array + assertNull(seq.getAnnotation()); + AlignmentAnnotation ann = addAnnotation("label1", "desc1", "calcId1", + 1f); + AlignmentAnnotation[] anns = seq.getAnnotation(); + assertEquals(1, anns.length); + assertSame(ann, anns[0]); + + // removing all annotations reverts array to null + seq.removeAlignmentAnnotation(ann); + assertNull(seq.getAnnotation()); + } + + @Test + public void testGetAnnotation_forLabel() + { + AlignmentAnnotation ann1 = addAnnotation("label1", "desc1", "calcId1", 1f); + AlignmentAnnotation ann2 = addAnnotation("label2", "desc2", "calcId2", 1f); + AlignmentAnnotation ann3 = addAnnotation("label1", "desc3", "calcId3", 1f); + AlignmentAnnotation[] anns = seq.getAnnotation("label1"); + assertEquals(2, anns.length); + assertSame(ann1, anns[0]); + assertSame(ann3, anns[1]); + } + + private AlignmentAnnotation addAnnotation(String label, + String description, String calcId, + float value) + { + final AlignmentAnnotation annotation = new AlignmentAnnotation(label, description, + value); + annotation.setCalcId(calcId); + seq.addAlignmentAnnotation(annotation); + return annotation; + } + + @Test + public void testGetAlignmentAnnotations_forCalcIdAndLabel() + { + AlignmentAnnotation ann1 = addAnnotation("label1", "desc1", "calcId1", + 1f); + AlignmentAnnotation ann2 = addAnnotation("label2", "desc2", "calcId2", + 1f); + AlignmentAnnotation ann3 = addAnnotation("label2", "desc3", "calcId3", + 1f); + AlignmentAnnotation ann4 = addAnnotation("label2", "desc3", "calcId2", + 1f); + AlignmentAnnotation ann5 = addAnnotation("label5", "desc3", null, + 1f); + AlignmentAnnotation ann6 = addAnnotation(null, "desc3", "calcId3", + 1f); + List anns = seq.getAlignmentAnnotations("calcId2", + "label2"); + assertEquals(2, anns.size()); + assertSame(ann2, anns.get(0)); + assertSame(ann4, anns.get(1)); + + assertTrue(seq.getAlignmentAnnotations("calcId2", "label3").isEmpty()); + assertTrue(seq.getAlignmentAnnotations("calcId3", "label5").isEmpty()); + assertTrue(seq.getAlignmentAnnotations("calcId2", null).isEmpty()); + assertTrue(seq.getAlignmentAnnotations(null, "label3").isEmpty()); + assertTrue(seq.getAlignmentAnnotations(null, null).isEmpty()); + } + + /** + * Tests for addAlignmentAnnotation. Note this method has the side-effect of + * setting the sequenceRef on the annotation. + */ + @Test + public void testAddAlignmentAnnotation() + { + assertNull(seq.annotation); + final AlignmentAnnotation annotation = new AlignmentAnnotation("a", + "b", 2d); + assertNull(annotation.sequenceRef); + seq.addAlignmentAnnotation(annotation); + assertSame(seq, annotation.sequenceRef); + AlignmentAnnotation[] anns = seq.getAnnotation(); + assertEquals(1, anns.length); + assertSame(annotation, anns[0]); + } +} diff --git a/test/jalview/gui/PopupMenuTest.java b/test/jalview/gui/PopupMenuTest.java new file mode 100644 index 0000000..ea1dfb0 --- /dev/null +++ b/test/jalview/gui/PopupMenuTest.java @@ -0,0 +1,150 @@ +package jalview.gui; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; +import jalview.datamodel.AlignmentAnnotation; +import jalview.datamodel.AlignmentI; +import jalview.datamodel.SequenceI; +import jalview.io.AppletFormatAdapter; +import jalview.util.MessageManager; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +import javax.swing.JMenuItem; + +import org.junit.Before; +import org.junit.Test; + +public class PopupMenuTest +{ + // 4 sequences x 13 positions + final static String TEST_DATA = ">FER_CAPAA Ferredoxin\n" + + "TIETHKEAELVG-\n" + + ">FER_CAPAN Ferredoxin, chloroplast precursor\n" + + "TIETHKEAELVG-\n" + + ">FER1_SOLLC Ferredoxin-1, chloroplast precursor\n" + + "TIETHKEEELTA-\n" + ">Q93XJ9_SOLTU Ferredoxin I precursor\n" + + "TIETHKEEELTA-\n"; + + AlignmentI alignment; + + AlignmentPanel parentPanel; + + PopupMenu testee = null; + + @Before + public void setUp() throws IOException + { + alignment = new jalview.io.FormatAdapter().readFile(TEST_DATA, + AppletFormatAdapter.PASTE, "FASTA"); + AlignFrame af = new AlignFrame(alignment, 700, 500); + parentPanel = new AlignmentPanel(af, af.getViewport()); + testee = new PopupMenu(parentPanel, null, null); + int i = 0; + for (SequenceI seq : alignment.getSequences()) + { + final AlignmentAnnotation annotation = new AlignmentAnnotation("label" + i, + "desc" + i, i); + annotation.setCalcId("calcId" + i); + seq.addAlignmentAnnotation(annotation); + annotation.setSequenceRef(seq); + } + } + + @Test + public void testConfigureReferenceAnnotationsMenu_noSequenceSelected() + { + JMenuItem menu = new JMenuItem(); + List seqs = new ArrayList(); + testee.configureReferenceAnnotationsMenu(menu, seqs); + assertFalse(menu.isEnabled()); + assertEquals( + MessageManager.getString("label.add_reference_annotations"), + menu.getText()); + // now try null list + menu.setEnabled(true); + testee.configureReferenceAnnotationsMenu(menu, seqs); + assertFalse(menu.isEnabled()); + } + + /** + * Test building the 'add reference annotations' menu for the case where there + * are no reference annotations to add to the alignment. The menu item should + * be disabled. + */ + @Test + public void testConfigureReferenceAnnotationsMenu_noReferenceAnnotations() + { + JMenuItem menu = new JMenuItem(); + List seqs = new ArrayList(); + + /* + * Initial state is that sequences have annotations, and have dataset + * sequences, but the dataset sequences have no annotations. Hence nothing + * to add. + */ + seqs = parentPanel.getAlignment().getSequences(); + + testee.configureReferenceAnnotationsMenu(menu, seqs); + assertFalse(menu.isEnabled()); + } + + /** + * Test building the 'add reference annotations' menu for the case where all + * reference annotations are already on the alignment. The menu item should be + * disabled. + */ + @Test + public void testConfigureReferenceAnnotationsMenu_alreadyAdded() + { + JMenuItem menu = new JMenuItem(); + List seqs = new ArrayList(); + + seqs = parentPanel.getAlignment().getSequences(); + // copy annotation from sequence to dataset + seqs.get(1).getDatasetSequence() + .addAlignmentAnnotation(seqs.get(1).getAnnotation()[0]); + testee.configureReferenceAnnotationsMenu(menu, seqs); + assertFalse(menu.isEnabled()); + } + + /** + * Test building the 'add reference annotations' menu for the case where + * several reference annotations are on the dataset but not on the sequences. + * The menu item should be enabled, and acquire a tooltip which lists the + * annotation sources (calcIds) and type (labels). + */ + @Test + public void testConfigureReferenceAnnotationsMenu() + { + JMenuItem menu = new JMenuItem(); + List seqs = new ArrayList(); + + seqs = parentPanel.getAlignment().getSequences(); + // make up new annotations and add to dataset sequences + + // PDB.secondary structure on Sequence0 + AlignmentAnnotation annotation = new AlignmentAnnotation( + "secondary structure", "", 0); + annotation.setCalcId("PBD"); + seqs.get(0).getDatasetSequence().addAlignmentAnnotation(annotation); + + // PDB.Temp on Sequence1 + annotation = new AlignmentAnnotation("Temp", "", 0); + annotation.setCalcId("PBD"); + seqs.get(1).getDatasetSequence().addAlignmentAnnotation(annotation); + + // JMOL.secondary structure on Sequence0 + annotation = new AlignmentAnnotation("secondary structure", "", 0); + annotation.setCalcId("JMOL"); + seqs.get(0).getDatasetSequence().addAlignmentAnnotation(annotation); + + testee.configureReferenceAnnotationsMenu(menu, seqs); + assertTrue(menu.isEnabled()); + String expected = "
Add annotations for
JMOL/secondary structure
PBD/Temp
"; + assertEquals(expected, menu.getToolTipText()); + } +} -- 1.7.10.2