JAL-1619 first draft of 'linked protein and cDNA'
[jalview.git] / test / jalview / datamodel / SequenceTest.java
index d9101cf..2a23104 100644 (file)
@@ -88,7 +88,8 @@ public class SequenceTest
 
   /**
    * Tests for addAlignmentAnnotation. Note this method has the side-effect of
-   * setting the sequenceRef on the annotation.
+   * setting the sequenceRef on the annotation. Adding the same annotation twice
+   * should be ignored.
    */
   @Test
   public void testAddAlignmentAnnotation()
@@ -102,5 +103,103 @@ public class SequenceTest
     AlignmentAnnotation[] anns = seq.getAnnotation();
     assertEquals(1, anns.length);
     assertSame(annotation, anns[0]);
+
+    // re-adding does nothing
+    seq.addAlignmentAnnotation(annotation);
+    anns = seq.getAnnotation();
+    assertEquals(1, anns.length);
+    assertSame(annotation, anns[0]);
+
+    // an identical but different annotation can be added
+    final AlignmentAnnotation annotation2 = new AlignmentAnnotation("a",
+            "b", 2d);
+    seq.addAlignmentAnnotation(annotation2);
+    anns = seq.getAnnotation();
+    assertEquals(2, anns.length);
+    assertSame(annotation, anns[0]);
+    assertSame(annotation2, anns[1]);
+
+  }
+
+  @Test
+  public void testGetStartGetEnd()
+  {
+    SequenceI seq = new Sequence("test", "ABCDEF");
+    assertEquals(1, seq.getStart());
+    assertEquals(6, seq.getEnd());
+
+    seq = new Sequence("test", "--AB-C-DEF--");
+    assertEquals(1, seq.getStart());
+    assertEquals(6, seq.getEnd());
+
+    seq = new Sequence("test", "----");
+    assertEquals(1, seq.getStart());
+    assertEquals(0, seq.getEnd()); // ??
+  }
+
+  @Test
+  public void testFindPosition()
+  {
+    SequenceI seq = new Sequence("test", "ABCDEF");
+    assertEquals(1, seq.findPosition(0));
+    assertEquals(6, seq.findPosition(5));
+    // assertEquals(-1, seq.findPosition(6)); // fails
+
+    seq = new Sequence("test", "AB-C-D--");
+    assertEquals(1, seq.findPosition(0));
+    assertEquals(2, seq.findPosition(1));
+    // gap position 'finds' residue to the right (not the left as per javadoc)
+    assertEquals(3, seq.findPosition(2));
+    assertEquals(3, seq.findPosition(3));
+    assertEquals(4, seq.findPosition(4));
+    assertEquals(4, seq.findPosition(5));
+    // returns 1 more than sequence length if off the end ?!?
+    assertEquals(5, seq.findPosition(6));
+    assertEquals(5, seq.findPosition(7));
+
+    seq = new Sequence("test", "--AB-C-DEF--");
+    assertEquals(1, seq.findPosition(0));
+    assertEquals(1, seq.findPosition(1));
+    assertEquals(1, seq.findPosition(2));
+    assertEquals(2, seq.findPosition(3));
+    assertEquals(3, seq.findPosition(4));
+    assertEquals(3, seq.findPosition(5));
+    assertEquals(4, seq.findPosition(6));
+    assertEquals(4, seq.findPosition(7));
+    assertEquals(5, seq.findPosition(8));
+    assertEquals(6, seq.findPosition(9));
+    assertEquals(7, seq.findPosition(10));
+    assertEquals(7, seq.findPosition(11));
+  }
+
+  @Test
+  public void testDeleteChars()
+  {
+    SequenceI seq = new Sequence("test", "ABCDEF");
+    assertEquals(1, seq.getStart());
+    assertEquals(6, seq.getEnd());
+    seq.deleteChars(2, 3);
+    assertEquals("ABDEF", seq.getSequenceAsString());
+    assertEquals(1, seq.getStart());
+    assertEquals(5, seq.getEnd());
+
+    seq = new Sequence("test", "ABCDEF");
+    seq.deleteChars(0, 2);
+    assertEquals("CDEF", seq.getSequenceAsString());
+    assertEquals(3, seq.getStart());
+    assertEquals(6, seq.getEnd());
+  }
+
+  @Test
+  public void testInsertCharAt()
+  {
+    // non-static methods:
+    SequenceI seq = new Sequence("test", "ABCDEF");
+    seq.insertCharAt(0, 'z');
+    assertEquals("zABCDEF", seq.getSequenceAsString());
+    seq.insertCharAt(2, 2, 'x');
+    assertEquals("zAxxBCDEF", seq.getSequenceAsString());
+    
+    // for static method see StringUtilsTest
   }
 }