JAL-3383 tests and fixes for overloaded SequenceFeatures.findFeatures
[jalview.git] / test / jalview / datamodel / features / SequenceFeaturesTest.java
index 30b1402..923a5fe 100644 (file)
@@ -889,11 +889,11 @@ public class SequenceFeaturesTest
      * no type specified - get all types stored
      * they are returned in keyset (alphabetical) order
      */
-    Map<String, FeatureStoreI> featureStores = (Map<String, FeatureStoreI>) PA
+    Map<String, FeatureStore> featureStores = (Map<String, FeatureStore>) PA
             .getValue(sf, "featureStore");
 
-    Iterable<FeatureStoreI> types = sf.varargToTypes();
-    Iterator<FeatureStoreI> iterator = types.iterator();
+    Iterable<FeatureStore> types = sf.varargToTypes();
+    Iterator<FeatureStore> iterator = types.iterator();
     assertTrue(iterator.hasNext());
     assertSame(iterator.next(), featureStores.get("Cath"));
     assertTrue(iterator.hasNext());
@@ -1275,4 +1275,60 @@ public class SequenceFeaturesTest
     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));
+  }
 }