Merge branch 'bug/JAL-2541cutRelocateFeatures' into bug/JAL-2684_fixPairwiseAlignofEd...
authorJim Procter <jprocter@issues.jalview.org>
Mon, 6 Nov 2017 17:18:27 +0000 (17:18 +0000)
committerJim Procter <jprocter@issues.jalview.org>
Mon, 6 Nov 2017 17:18:27 +0000 (17:18 +0000)
1  2 
src/jalview/datamodel/Sequence.java
src/jalview/datamodel/features/SequenceFeatures.java
test/jalview/datamodel/SequenceTest.java
test/jalview/datamodel/features/SequenceFeaturesTest.java

Simple merge
@@@ -1617,190 -1697,4 +1697,135 @@@ public class SequenceTes
      assertEquals(".K..BCD.EF..", sq.getSequenceAsString());
      assertEquals(2, PA.getValue(sq, "changeCount"));
    }
 +
 +  @Test(groups = { "Functional" })
-   public void testFindPositions()
-   {
-     SequenceI sq = new Sequence("test/8-13", "-ABC---DE-F--");
-     /*
-      * invalid inputs
-      */
-     assertNull(sq.findPositions(6, 5));
-     assertNull(sq.findPositions(0, 5));
-     assertNull(sq.findPositions(-1, 5));
-     /*
-      * all gapped ranges
-      */
-     assertNull(sq.findPositions(1, 1)); // 1-based columns
-     assertNull(sq.findPositions(5, 5));
-     assertNull(sq.findPositions(5, 6));
-     assertNull(sq.findPositions(5, 7));
-     /*
-      * all ungapped ranges
-      */
-     assertEquals(new Range(8, 8), sq.findPositions(2, 2)); // A
-     assertEquals(new Range(8, 9), sq.findPositions(2, 3)); // AB
-     assertEquals(new Range(8, 10), sq.findPositions(2, 4)); // ABC
-     assertEquals(new Range(9, 10), sq.findPositions(3, 4)); // BC
-     /*
-      * gap to ungapped range
-      */
-     assertEquals(new Range(8, 10), sq.findPositions(1, 4)); // ABC
-     assertEquals(new Range(11, 12), sq.findPositions(6, 9)); // DE
-     /*
-      * ungapped to gapped range
-      */
-     assertEquals(new Range(10, 10), sq.findPositions(4, 5)); // C
-     assertEquals(new Range(9, 13), sq.findPositions(3, 11)); // BCDEF
-     /*
-      * ungapped to ungapped enclosing gaps
-      */
-     assertEquals(new Range(10, 11), sq.findPositions(4, 8)); // CD
-     assertEquals(new Range(8, 13), sq.findPositions(2, 11)); // ABCDEF
-     /*
-      * gapped to gapped enclosing ungapped
-      */
-     assertEquals(new Range(8, 10), sq.findPositions(1, 5)); // ABC
-     assertEquals(new Range(11, 12), sq.findPositions(5, 10)); // DE
-     assertEquals(new Range(8, 13), sq.findPositions(1, 13)); // the lot
-     assertEquals(new Range(8, 13), sq.findPositions(1, 99));
-   }
-   @Test(groups = { "Functional" })
 +  public void testFindFeatures_largeEndPos()
 +  {
 +    /*
 +     * imitate a PDB sequence where end is larger than end position
 +     */
 +    SequenceI sq = new Sequence("test", "-ABC--DEF--", 1, 20);
 +    sq.createDatasetSequence();
 +  
 +    assertTrue(sq.findFeatures(1, 9).isEmpty());
 +    // should be no array bounds exception - JAL-2772
 +    assertTrue(sq.findFeatures(1, 15).isEmpty());
 +  
 +    // add feature on BCD
 +    SequenceFeature sfBCD = new SequenceFeature("Cath", "desc", 2, 4, 2f,
 +            null);
 +    sq.addSequenceFeature(sfBCD);
 +  
 +    // no features in columns 1-2 (-A)
 +    List<SequenceFeature> found = sq.findFeatures(1, 2);
 +    assertTrue(found.isEmpty());
 +  
 +    // columns 1-6 (-ABC--) includes BCD
 +    found = sq.findFeatures(1, 6);
 +    assertEquals(1, found.size());
 +    assertTrue(found.contains(sfBCD));
 +
 +    // columns 10-11 (--) should find nothing
 +    found = sq.findFeatures(10, 11);
 +    assertEquals(0, found.size());
 +  }
 +
 +  @Test(groups = { "Functional" })
 +  public void testSetName()
 +  {
 +    SequenceI sq = new Sequence("test", "-ABC---DE-F--");
 +    assertEquals("test", sq.getName());
 +    assertEquals(1, sq.getStart());
 +    assertEquals(6, sq.getEnd());
 +
 +    sq.setName("testing");
 +    assertEquals("testing", sq.getName());
 +
 +    sq.setName("test/8-10");
 +    assertEquals("test", sq.getName());
 +    assertEquals(8, sq.getStart());
 +    assertEquals(13, sq.getEnd()); // note end is recomputed
 +
 +    sq.setName("testing/7-99");
 +    assertEquals("testing", sq.getName());
 +    assertEquals(7, sq.getStart());
 +    assertEquals(99, sq.getEnd()); // end may be beyond physical end
 +
 +    sq.setName("/2-3");
 +    assertEquals("", sq.getName());
 +    assertEquals(2, sq.getStart());
 +    assertEquals(7, sq.getEnd());
 +
 +    sq.setName("test/"); // invalid
 +    assertEquals("test/", sq.getName());
 +    assertEquals(2, sq.getStart());
 +    assertEquals(7, sq.getEnd());
 +
 +    sq.setName("test/6-13/7-99");
 +    assertEquals("test/6-13", sq.getName());
 +    assertEquals(7, sq.getStart());
 +    assertEquals(99, sq.getEnd());
 +
 +    sq.setName("test/0-5"); // 0 is invalid - ignored
 +    assertEquals("test/0-5", sq.getName());
 +    assertEquals(7, sq.getStart());
 +    assertEquals(99, sq.getEnd());
 +
 +    sq.setName("test/a-5"); // a is invalid - ignored
 +    assertEquals("test/a-5", sq.getName());
 +    assertEquals(7, sq.getStart());
 +    assertEquals(99, sq.getEnd());
 +
 +    sq.setName("test/6-5"); // start > end is invalid - ignored
 +    assertEquals("test/6-5", sq.getName());
 +    assertEquals(7, sq.getStart());
 +    assertEquals(99, sq.getEnd());
 +
 +    sq.setName("test/5"); // invalid - ignored
 +    assertEquals("test/5", sq.getName());
 +    assertEquals(7, sq.getStart());
 +    assertEquals(99, sq.getEnd());
 +
 +    sq.setName("test/-5"); // invalid - ignored
 +    assertEquals("test/-5", sq.getName());
 +    assertEquals(7, sq.getStart());
 +    assertEquals(99, sq.getEnd());
 +
 +    sq.setName("test/5-"); // invalid - ignored
 +    assertEquals("test/5-", sq.getName());
 +    assertEquals(7, sq.getStart());
 +    assertEquals(99, sq.getEnd());
 +
 +    sq.setName("test/5-6-7"); // invalid - ignored
 +    assertEquals("test/5-6-7", sq.getName());
 +    assertEquals(7, sq.getStart());
 +    assertEquals(99, sq.getEnd());
 +
 +    sq.setName(null); // invalid, gets converted to space
 +    assertEquals("", sq.getName());
 +    assertEquals(7, sq.getStart());
 +    assertEquals(99, sq.getEnd());
 +  }
 +
 +  @Test(groups = { "Functional" })
 +  public void testCheckValidRange()
 +  {
 +    Sequence sq = new Sequence("test/7-12", "-ABC---DE-F--");
 +    assertEquals(7, sq.getStart());
 +    assertEquals(12, sq.getEnd());
 +
 +    /*
 +     * checkValidRange ensures end is at least the last residue position
 +     */
 +    PA.setValue(sq, "end", 2);
 +    sq.checkValidRange();
 +    assertEquals(12, sq.getEnd());
 +
 +    /*
 +     * end may be beyond the last residue position
 +     */
 +    PA.setValue(sq, "end", 22);
 +    sq.checkValidRange();
 +    assertEquals(22, sq.getEnd());
 +  }
  }