JAL-2541 length check in deleteChars (redoing lost commit 4a4bc78)
[jalview.git] / test / jalview / datamodel / features / SequenceFeaturesTest.java
index b7b52a7..3f0eb9a 100644 (file)
@@ -10,8 +10,11 @@ import jalview.datamodel.SequenceFeature;
 import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
 
+import junit.extensions.PA;
+
 import org.testng.annotations.Test;
 
 public class SequenceFeaturesTest
@@ -886,12 +889,15 @@ public class SequenceFeaturesTest
      * no type specified - get all types stored
      * they are returned in keyset (alphabetical) order
      */
-    Iterable<String> types = sf.varargToTypes();
-    Iterator<String> iterator = types.iterator();
+    Map<String, FeatureStore> featureStores = (Map<String, FeatureStore>) PA
+            .getValue(sf, "featureStore");
+
+    Iterable<FeatureStore> types = sf.varargToTypes();
+    Iterator<FeatureStore> iterator = types.iterator();
     assertTrue(iterator.hasNext());
-    assertEquals(iterator.next(), "Cath");
+    assertSame(iterator.next(), featureStores.get("Cath"));
     assertTrue(iterator.hasNext());
-    assertEquals(iterator.next(), "Metal");
+    assertSame(iterator.next(), featureStores.get("Metal"));
     assertFalse(iterator.hasNext());
 
     /*
@@ -901,9 +907,9 @@ public class SequenceFeaturesTest
     types = sf.varargToTypes(new String[] {});
     iterator = types.iterator();
     assertTrue(iterator.hasNext());
-    assertEquals(iterator.next(), "Cath");
+    assertSame(iterator.next(), featureStores.get("Cath"));
     assertTrue(iterator.hasNext());
-    assertEquals(iterator.next(), "Metal");
+    assertSame(iterator.next(), featureStores.get("Metal"));
     assertFalse(iterator.hasNext());
 
     /*
@@ -919,9 +925,9 @@ public class SequenceFeaturesTest
     types = sf.varargToTypes((String[]) null);
     iterator = types.iterator();
     assertTrue(iterator.hasNext());
-    assertEquals(iterator.next(), "Cath");
+    assertSame(iterator.next(), featureStores.get("Cath"));
     assertTrue(iterator.hasNext());
-    assertEquals(iterator.next(), "Metal");
+    assertSame(iterator.next(), featureStores.get("Metal"));
     assertFalse(iterator.hasNext());
 
     /*
@@ -930,29 +936,27 @@ public class SequenceFeaturesTest
     types = sf.varargToTypes("Metal");
     iterator = types.iterator();
     assertTrue(iterator.hasNext());
-    assertEquals(iterator.next(), "Metal");
+    assertSame(iterator.next(), featureStores.get("Metal"));
     assertFalse(iterator.hasNext());
 
     /*
      * two types specified - get sorted alphabetically
      */
-    types = sf.varargToTypes("Metal", "Helix");
+    types = sf.varargToTypes("Metal", "Cath");
     iterator = types.iterator();
     assertTrue(iterator.hasNext());
-    assertEquals(iterator.next(), "Helix");
+    assertSame(iterator.next(), featureStores.get("Cath"));
     assertTrue(iterator.hasNext());
-    assertEquals(iterator.next(), "Metal");
+    assertSame(iterator.next(), featureStores.get("Metal"));
     assertFalse(iterator.hasNext());
 
     /*
-     * null type included - should get removed
+     * null type included - should be ignored
      */
     types = sf.varargToTypes("Metal", null, "Helix");
     iterator = types.iterator();
     assertTrue(iterator.hasNext());
-    assertEquals(iterator.next(), "Helix");
-    assertTrue(iterator.hasNext());
-    assertEquals(iterator.next(), "Metal");
+    assertSame(iterator.next(), featureStores.get("Metal"));
     assertFalse(iterator.hasNext());
   }
 
@@ -1143,7 +1147,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);
@@ -1161,7 +1165,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();
@@ -1190,7 +1194,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);
@@ -1200,6 +1204,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")