JAL-2492 use SequenceFeatures.getNonPositionalFeatures()
[jalview.git] / test / jalview / datamodel / features / SequenceFeaturesTest.java
index bb11a87..0d1d89d 100644 (file)
@@ -6,6 +6,7 @@ import static org.testng.Assert.assertTrue;
 
 import jalview.datamodel.SequenceFeature;
 
+import java.util.Iterator;
 import java.util.List;
 import java.util.Set;
 
@@ -237,8 +238,6 @@ public class SequenceFeaturesTest
     SequenceFeature sf10 = addFeature(sf, "Cath", 40, 100);
     SequenceFeature sf11 = addFeature(sf, "Cath", 60, 100);
     SequenceFeature sf12 = addFeature(sf, "Cath", 70, 70);
-    // null type is weird but possible:
-    SequenceFeature sf13 = addFeature(sf, null, 5, 12);
   
     List<SequenceFeature> overlaps = sf.findFeatures(200, 200, "Pfam");
     assertTrue(overlaps.isEmpty());
@@ -281,8 +280,7 @@ public class SequenceFeaturesTest
     assertTrue(sf.findFeatures(0, 1000, "Metal").isEmpty());
 
     overlaps = sf.findFeatures(7, 7, (String) null);
-    assertEquals(overlaps.size(), 1);
-    assertTrue(overlaps.contains(sf13));
+    assertTrue(overlaps.isEmpty());
   }
 
   @Test(groups = "Functional")
@@ -508,13 +506,13 @@ public class SequenceFeaturesTest
     assertEquals(types.size(), 1);
     assertTrue(types.contains("Metal"));
 
-    // null type is possible...
+    // null type is rejected...
     SequenceFeature sf2 = new SequenceFeature(null, "desc", 10, 20,
             Float.NaN, null);
-    store.add(sf2);
+    assertFalse(store.add(sf2));
     types = store.getFeatureTypes();
-    assertEquals(types.size(), 2);
-    assertTrue(types.contains(null));
+    assertEquals(types.size(), 1);
+    assertFalse(types.contains(null));
     assertTrue(types.contains("Metal"));
 
     /*
@@ -524,7 +522,7 @@ public class SequenceFeaturesTest
             Float.NaN, null);
     store.add(sf3);
     types = store.getFeatureTypes();
-    assertEquals(types.size(), 3);
+    assertEquals(types.size(), 2);
     assertTrue(types.contains("Pfam"));
 
     /*
@@ -534,7 +532,7 @@ public class SequenceFeaturesTest
             10, 20, Float.NaN, null);
     store.add(sf4);
     types = store.getFeatureTypes();
-    assertEquals(types.size(), 4);
+    assertEquals(types.size(), 3);
     assertTrue(types.contains("Disulphide Bond"));
 
     /*
@@ -544,14 +542,14 @@ public class SequenceFeaturesTest
             Float.NaN, null);
     store.add(sf5);
     types = store.getFeatureTypes();
-    assertEquals(types.size(), 4); // unchanged
+    assertEquals(types.size(), 3); // unchanged
 
     /*
      * delete first Pfam - still have one
      */
     assertTrue(store.delete(sf3));
     types = store.getFeatureTypes();
-    assertEquals(types.size(), 4);
+    assertEquals(types.size(), 3);
     assertTrue(types.contains("Pfam"));
 
     /*
@@ -559,7 +557,7 @@ public class SequenceFeaturesTest
      */
     assertTrue(store.delete(sf5));
     types = store.getFeatureTypes();
-    assertEquals(types.size(), 3);
+    assertEquals(types.size(), 2);
     assertFalse(types.contains("Pfam"));
   }
 
@@ -580,12 +578,12 @@ public class SequenceFeaturesTest
     assertEquals(store.getFeatureCount(false), 0);
 
     /*
-     * another positional
+     * null feature type is rejected
      */
     SequenceFeature sf2 = new SequenceFeature(null, "desc", 10, 20,
             Float.NaN, null);
-    store.add(sf2);
-    assertEquals(store.getFeatureCount(true), 2);
+    assertFalse(store.add(sf2));
+    assertEquals(store.getFeatureCount(true), 1);
     assertEquals(store.getFeatureCount(false), 0);
   
     /*
@@ -594,7 +592,7 @@ public class SequenceFeaturesTest
     SequenceFeature sf3 = new SequenceFeature("Pfam", "desc", 0, 0,
             Float.NaN, null);
     store.add(sf3);
-    assertEquals(store.getFeatureCount(true), 2);
+    assertEquals(store.getFeatureCount(true), 1);
     assertEquals(store.getFeatureCount(false), 1);
   
     /*
@@ -603,39 +601,39 @@ public class SequenceFeaturesTest
     SequenceFeature sf4 = new SequenceFeature("Disulphide Bond", "desc",
             10, 20, Float.NaN, null);
     store.add(sf4);
-    assertEquals(store.getFeatureCount(true), 3);
+    assertEquals(store.getFeatureCount(true), 2);
     assertEquals(store.getFeatureCount(false), 1);
   
     /*
-     * add another Pfam
+     * add another Pfam but this time as a positional feature
      */
     SequenceFeature sf5 = new SequenceFeature("Pfam", "desc", 10, 20,
             Float.NaN, null);
     store.add(sf5);
-    assertEquals(store.getFeatureCount(true), 4);
-    assertEquals(store.getFeatureCount(false), 1);
-    assertEquals(store.getFeatureCount(true, "Pfam"), 1);
-    assertEquals(store.getFeatureCount(false, "Pfam"), 1);
+    assertEquals(store.getFeatureCount(true), 3); // sf1, sf4, sf5
+    assertEquals(store.getFeatureCount(false), 1); // sf3
+    assertEquals(store.getFeatureCount(true, "Pfam"), 1); // positional
+    assertEquals(store.getFeatureCount(false, "Pfam"), 1); // non-positional
     // search for type==null
-    assertEquals(store.getFeatureCount(true, (String) null), 1);
+    assertEquals(store.getFeatureCount(true, (String) null), 0);
     // search with no type specified
-    assertEquals(store.getFeatureCount(true, (String[]) null), 4);
+    assertEquals(store.getFeatureCount(true, (String[]) null), 3);
     assertEquals(store.getFeatureCount(true, "Metal", "Cath"), 1);
     assertEquals(store.getFeatureCount(true, "Disulphide Bond"), 1);
-    assertEquals(store.getFeatureCount(true, "Metal", "Pfam", null), 3);
+    assertEquals(store.getFeatureCount(true, "Metal", "Pfam", null), 2);
 
     /*
      * delete first Pfam (non-positional)
      */
     assertTrue(store.delete(sf3));
-    assertEquals(store.getFeatureCount(true), 4);
+    assertEquals(store.getFeatureCount(true), 3);
     assertEquals(store.getFeatureCount(false), 0);
   
     /*
      * delete second Pfam (positional)
      */
     assertTrue(store.delete(sf5));
-    assertEquals(store.getFeatureCount(true), 3);
+    assertEquals(store.getFeatureCount(true), 2);
     assertEquals(store.getFeatureCount(false), 0);
   }
 
@@ -653,7 +651,7 @@ public class SequenceFeaturesTest
     assertEquals(features.size(), 1);
     assertTrue(features.contains(sf1));
   
-    SequenceFeature sf2 = new SequenceFeature(null, "desc", 10, 20,
+    SequenceFeature sf2 = new SequenceFeature("Metallic", "desc", 10, 20,
             Float.NaN, null);
     store.add(sf2);
     features = store.getAllFeatures();
@@ -830,4 +828,85 @@ public class SequenceFeaturesTest
     assertEquals(sf.getMinimumScore("Metal", true), Float.NaN);
     assertEquals(sf.getMaximumScore("Metal", true), Float.NaN);
   }
+
+  @Test(groups = "Functional")
+  public void testVarargsToTypes()
+  {
+    SequenceFeatures sf = new SequenceFeatures();
+    sf.add(new SequenceFeature("Metal", "desc", 0, 0, Float.NaN, "group"));
+    sf.add(new SequenceFeature("Cath", "desc", 10, 20, Float.NaN, "group"));
+
+    /*
+     * no type specified - get all types stored
+     * they are returned in keyset (alphabetical) order
+     */
+    Iterable<String> types = sf.varargToTypes();
+    Iterator<String> iterator = types.iterator();
+    assertTrue(iterator.hasNext());
+    assertEquals(iterator.next(), "Cath");
+    assertTrue(iterator.hasNext());
+    assertEquals(iterator.next(), "Metal");
+    assertFalse(iterator.hasNext());
+
+    /*
+     * empty array is the same as no vararg parameter supplied
+     * so treated as all stored types
+     */
+    types = sf.varargToTypes(new String[] {});
+    iterator = types.iterator();
+    assertTrue(iterator.hasNext());
+    assertEquals(iterator.next(), "Cath");
+    assertTrue(iterator.hasNext());
+    assertEquals(iterator.next(), "Metal");
+    assertFalse(iterator.hasNext());
+
+    /*
+     * null type specified; this is passed as vararg
+     * String[1] {null}
+     */
+    types = sf.varargToTypes((String) null);
+    assertFalse(types.iterator().hasNext());
+
+    /*
+     * null types array specified; this is passed as vararg null
+     */
+    types = sf.varargToTypes((String[]) null);
+    iterator = types.iterator();
+    assertTrue(iterator.hasNext());
+    assertEquals(iterator.next(), "Cath");
+    assertTrue(iterator.hasNext());
+    assertEquals(iterator.next(), "Metal");
+    assertFalse(iterator.hasNext());
+
+    /*
+     * one type specified
+     */
+    types = sf.varargToTypes("Metal");
+    iterator = types.iterator();
+    assertTrue(iterator.hasNext());
+    assertEquals(iterator.next(), "Metal");
+    assertFalse(iterator.hasNext());
+
+    /*
+     * two types specified
+     */
+    types = sf.varargToTypes("Metal", "Helix");
+    iterator = types.iterator();
+    assertTrue(iterator.hasNext());
+    assertEquals(iterator.next(), "Metal");
+    assertTrue(iterator.hasNext());
+    assertEquals(iterator.next(), "Helix");
+    assertFalse(iterator.hasNext());
+
+    /*
+     * null type included - should get removed
+     */
+    types = sf.varargToTypes("Metal", null, "Helix");
+    iterator = types.iterator();
+    assertTrue(iterator.hasNext());
+    assertEquals(iterator.next(), "Metal");
+    assertTrue(iterator.hasNext());
+    assertEquals(iterator.next(), "Helix");
+    assertFalse(iterator.hasNext());
+  }
 }