import jalview.datamodel.SequenceFeature;
+import java.util.Iterator;
import java.util.List;
import java.util.Set;
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());
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")
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"));
/*
Float.NaN, null);
store.add(sf3);
types = store.getFeatureTypes();
- assertEquals(types.size(), 3);
+ assertEquals(types.size(), 2);
assertTrue(types.contains("Pfam"));
/*
10, 20, Float.NaN, null);
store.add(sf4);
types = store.getFeatureTypes();
- assertEquals(types.size(), 4);
+ assertEquals(types.size(), 3);
assertTrue(types.contains("Disulphide Bond"));
/*
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"));
/*
*/
assertTrue(store.delete(sf5));
types = store.getFeatureTypes();
- assertEquals(types.size(), 3);
+ assertEquals(types.size(), 2);
assertFalse(types.contains("Pfam"));
}
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);
/*
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);
/*
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);
}
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();
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());
+ }
}