JAL-3453
[jalview.git] / test / jalview / datamodel / features / SequenceFeaturesTest.java
index 32987b0..e979f51 100644 (file)
@@ -1161,7 +1161,7 @@ public class SequenceFeaturesTest
   public void testShiftFeatures()
   {
     SequenceFeatures store = new SequenceFeatures();
-    assertFalse(store.shiftFeatures(1));
+    assertFalse(store.shiftFeatures(0, 1));
 
     SequenceFeature sf1 = new SequenceFeature("Cath", "", 2, 5, 0f, null);
     store.add(sf1);
@@ -1179,7 +1179,7 @@ public class SequenceFeaturesTest
     /*
      * shift features right by 5
      */
-    assertTrue(store.shiftFeatures(5));
+    assertTrue(store.shiftFeatures(0, 5));
   
     // non-positional features untouched:
     List<SequenceFeature> nonPos = store.getNonPositionalFeatures();
@@ -1208,7 +1208,7 @@ public class SequenceFeaturesTest
      * feature at [7-10] should be removed
      * feature at [13-19] should become [1-4] 
      */
-    assertTrue(store.shiftFeatures(-15));
+    assertTrue(store.shiftFeatures(0, -15));
     pos = store.getPositionalFeatures();
     assertEquals(pos.size(), 2);
     SequenceFeatures.sortFeatures(pos, true);
@@ -1218,6 +1218,35 @@ public class SequenceFeaturesTest
     assertEquals(pos.get(1).getBegin(), 13);
     assertEquals(pos.get(1).getEnd(), 22);
     assertEquals(pos.get(1).getType(), "Disulfide bond");
+
+    /*
+     * shift right by 4 from column 2
+     * feature at [1-4] should be unchanged
+     * feature at [13-22] should become [17-26] 
+     */
+    assertTrue(store.shiftFeatures(2, 4));
+    pos = store.getPositionalFeatures();
+    assertEquals(pos.size(), 2);
+    SequenceFeatures.sortFeatures(pos, true);
+    assertEquals(pos.get(0).getBegin(), 1);
+    assertEquals(pos.get(0).getEnd(), 4);
+    assertEquals(pos.get(0).getType(), "Metal");
+    assertEquals(pos.get(1).getBegin(), 17);
+    assertEquals(pos.get(1).getEnd(), 26);
+    assertEquals(pos.get(1).getType(), "Disulfide bond");
+
+    /*
+     * shift right from column 18
+     * should be no updates
+     */
+    SequenceFeature f1 = pos.get(0);
+    SequenceFeature f2 = pos.get(1);
+    assertFalse(store.shiftFeatures(18, 6));
+    pos = store.getPositionalFeatures();
+    assertEquals(pos.size(), 2);
+    SequenceFeatures.sortFeatures(pos, true);
+    assertSame(pos.get(0), f1);
+    assertSame(pos.get(1), f2);
   }
 
   @Test(groups = "Functional")
@@ -1232,4 +1261,87 @@ public class SequenceFeaturesTest
     assertTrue(store.isOntologyTerm("junk", new String[] {}));
     assertTrue(store.isOntologyTerm("junk", (String[]) null));
   }
+
+  @Test(groups = "Functional")
+  public void testDeleteAll()
+  {
+    SequenceFeaturesI store = new SequenceFeatures();
+    assertFalse(store.hasFeatures());
+    store.deleteAll();
+    assertFalse(store.hasFeatures());
+    store.add(new SequenceFeature("Cath", "Desc", 12, 20, 0f, "Group"));
+    store.add(new SequenceFeature("Pfam", "Desc", 6, 12, 2f, "Group2"));
+    assertTrue(store.hasFeatures());
+    store.deleteAll();
+    assertFalse(store.hasFeatures());
+  }
+
+  @Test(groups = "Functional")
+  public void testFindFeatures_withResultList()
+  {
+    SequenceFeaturesI sf = new SequenceFeatures();
+    SequenceFeature sf1 = addFeature(sf, "Pfam", 10, 50);
+    SequenceFeature sf2 = addFeature(sf, "Pfam", 150, 250);
+  
+    /*
+     * findFeatures with result list to append to
+     */
+    List<SequenceFeature> overlaps = new ArrayList<>();
+    List<SequenceFeature> result = sf.findFeatures(200, "Pfam", overlaps);
+    assertSame(result, overlaps);
+    assertEquals(result.size(), 1);
+    assertTrue(result.contains(sf2));
+    assertFalse(result.contains(sf1));
+
+    /*
+     * with no result list - method creates one
+     */
+    result = sf.findFeatures(200, "Pfam", null);
+    assertEquals(result.size(), 1);
+    assertTrue(result.contains(sf2));
+    assertFalse(result.contains(sf1));
+
+    /*
+     * verify the created list is extendable (is not immutable)
+     * notice it may contain duplicates
+     */
+    result = sf.findFeatures(220, "Pfam", result);
+    assertEquals(result.size(), 2);
+    assertSame(result.get(0), sf2); // in input list
+    assertSame(result.get(1), sf2); // duplicate added
+
+    /*
+     * no feature of requested type - with result list
+     */
+    overlaps.clear();
+    result = sf.findFeatures(200, "Rfam", overlaps);
+    assertTrue(result.isEmpty());
+
+    /*
+     * no feature of requested type - with no result list
+     */
+    result = sf.findFeatures(200, "Rfam", null);
+    assertTrue(result.isEmpty());
+
+    /*
+     * verify the created list is extendable (is not immutable)
+     */
+    result = sf.findFeatures(210, "Pfam", result);
+    assertEquals(result.size(), 1);
+    assertTrue(result.contains(sf2));
+    assertFalse(result.contains(sf1));
+  }
+
+  @Test(groups = "Functional")
+  public void testHasFeatures_ofType()
+  {
+    SequenceFeaturesI sf = new SequenceFeatures();
+    assertFalse(sf.hasFeatures("Pfam"));
+  
+    SequenceFeature sf1 = addFeature(sf, "Pfam", 10, 50);
+    assertTrue(sf.hasFeatures("Pfam"));
+  
+    sf.delete(sf1);
+    assertFalse(sf.hasFeatures("Pfam"));
+  }
 }