Merge branch 'develop' into features/JAL-2360colourSchemeApplicability
[jalview.git] / test / jalview / datamodel / AlignmentTest.java
index 42cdc8c..7af77f5 100644 (file)
@@ -28,6 +28,7 @@ import static org.testng.AssertJUnit.assertSame;
 import static org.testng.AssertJUnit.assertTrue;
 
 import jalview.datamodel.AlignedCodonFrame.SequenceToSequenceMapping;
+import jalview.gui.JvOptionPane;
 import jalview.io.DataSourceType;
 import jalview.io.FileFormat;
 import jalview.io.FileFormatI;
@@ -41,6 +42,7 @@ import java.util.Iterator;
 import java.util.List;
 
 import org.testng.Assert;
+import org.testng.annotations.BeforeClass;
 import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.Test;
 
@@ -52,6 +54,14 @@ import org.testng.annotations.Test;
  */
 public class AlignmentTest
 {
+
+  @BeforeClass(alwaysRun = true)
+  public void setUpJvOptionPane()
+  {
+    JvOptionPane.setInteractiveMode(false);
+    JvOptionPane.setMockResponse(JvOptionPane.CANCEL_OPTION);
+  }
+
   // @formatter:off
   private static final String TEST_DATA = 
           "# STOCKHOLM 1.0\n" +
@@ -601,6 +611,12 @@ public class AlignmentTest
     AlignmentAnnotation ann = iter.next();
     assertEquals("D.melanogaster.2", ann.sequenceRef.getName());
     assertFalse(iter.hasNext());
+
+    // invalid id
+    anns = al.findAnnotation("CalcIdForD.melanogaster.?");
+    assertFalse(iter.hasNext());
+    anns = al.findAnnotation(null);
+    assertFalse(iter.hasNext());
   }
 
   @Test(groups = { "Functional" })
@@ -1121,4 +1137,63 @@ public class AlignmentTest
     assertSame(pep.getDatasetSequence(), cds.getDBRefs()[0].map.to);
   }
 
+  @Test(groups = { "Functional" })
+  public void testFindGroup()
+  {
+    SequenceI seq1 = new Sequence("seq1", "ABCDEF---GHI");
+    SequenceI seq2 = new Sequence("seq2", "---JKLMNO---");
+    AlignmentI a = new Alignment(new SequenceI[] { seq1, seq2 });
+
+    assertNull(a.findGroup(null, 0));
+    assertNull(a.findGroup(seq1, 1));
+    assertNull(a.findGroup(seq1, -1));
+
+    /*
+     * add a group consisting of just "DEF"
+     */
+    SequenceGroup sg1 = new SequenceGroup();
+    sg1.addSequence(seq1, false);
+    sg1.setStartRes(3);
+    sg1.setEndRes(5);
+    a.addGroup(sg1);
+
+    assertNull(a.findGroup(seq1, 2)); // position not in group
+    assertNull(a.findGroup(seq1, 6)); // position not in group
+    assertNull(a.findGroup(seq2, 5)); // sequence not in group
+    assertSame(a.findGroup(seq1, 3), sg1); // yes
+    assertSame(a.findGroup(seq1, 4), sg1);
+    assertSame(a.findGroup(seq1, 5), sg1);
+
+    /*
+     * add a group consisting of 
+     * EF--
+     * KLMN
+     */
+    SequenceGroup sg2 = new SequenceGroup();
+    sg2.addSequence(seq1, false);
+    sg2.addSequence(seq2, false);
+    sg2.setStartRes(4);
+    sg2.setEndRes(7);
+    a.addGroup(sg2);
+
+    assertNull(a.findGroup(seq1, 2)); // unchanged
+    assertSame(a.findGroup(seq1, 3), sg1); // unchanged
+    /*
+     * if a residue is in more than one group, method returns
+     * the first found (in order groups were added)
+     */
+    assertSame(a.findGroup(seq1, 4), sg1);
+    assertSame(a.findGroup(seq1, 5), sg1);
+
+    /*
+     * seq2 only belongs to the second group
+     */
+    assertSame(a.findGroup(seq2, 4), sg2);
+    assertSame(a.findGroup(seq2, 5), sg2);
+    assertSame(a.findGroup(seq2, 6), sg2);
+    assertSame(a.findGroup(seq2, 7), sg2);
+    assertNull(a.findGroup(seq2, 3));
+    assertNull(a.findGroup(seq2, 8));
+  }
+
 }