JAL-2526 Sequence.findPositions to get residue positions for column
[jalview.git] / test / jalview / datamodel / SequenceTest.java
index e3e39f7..4da11eb 100644 (file)
@@ -27,7 +27,6 @@ import static org.testng.AssertJUnit.assertNotSame;
 import static org.testng.AssertJUnit.assertNull;
 import static org.testng.AssertJUnit.assertSame;
 import static org.testng.AssertJUnit.assertTrue;
-import static org.testng.internal.junit.ArrayAsserts.assertArrayEquals;
 
 import jalview.datamodel.PDBEntry.Type;
 import jalview.gui.JvOptionPane;
@@ -232,10 +231,10 @@ public class SequenceTest
     assertEquals(6, sq.findIndex(6));
     assertEquals(6, sq.findIndex(9));
 
-    sq = new Sequence("test", "-A--B-C-D-E-F--");
-    assertEquals(2, sq.findIndex(1));
-    assertEquals(5, sq.findIndex(2));
-    assertEquals(7, sq.findIndex(3));
+    sq = new Sequence("test/8-13", "-A--B-C-D-E-F--");
+    assertEquals(2, sq.findIndex(8));
+    assertEquals(5, sq.findIndex(9));
+    assertEquals(7, sq.findIndex(10));
 
     // before start returns 0
     assertEquals(0, sq.findIndex(0));
@@ -369,11 +368,10 @@ public class SequenceTest
     newDs = PA.getValue(sq, "datasetSequence");
     assertNotNull(newDs);
     assertNotSame(ds, newDs);
-    SequenceFeature[] sfs = sq.getSequenceFeatures();
-    assertNotNull(sfs);
-    assertEquals(1, sfs.length);
-    assertNotSame(sf1, sfs[0]);
-    assertEquals(sf1, sfs[0]);
+    List<SequenceFeature> sfs = sq.getSequenceFeatures();
+    assertEquals(1, sfs.size());
+    assertNotSame(sf1, sfs.get(0));
+    assertEquals(sf1, sfs.get(0));
 
     /*
      * delete at start - no new dataset sequence created
@@ -391,8 +389,8 @@ public class SequenceTest
     assertSame(ds, PA.getValue(sq, "datasetSequence"));
     sfs = sq.getSequenceFeatures();
     assertNotNull(sfs);
-    assertEquals(1, sfs.length);
-    assertSame(sf1, sfs[0]);
+    assertEquals(1, sfs.size());
+    assertSame(sf1, sfs.get(0));
 
     /*
      * delete at end - no new dataset sequence created
@@ -448,16 +446,16 @@ public class SequenceTest
     SequenceI sq = new Sequence("test", "GATCAT");
     sq.createDatasetSequence();
 
-    assertNull(sq.getSequenceFeatures());
+    assertTrue(sq.getSequenceFeatures().isEmpty());
 
     /*
      * SequenceFeature on sequence
      */
     SequenceFeature sf = new SequenceFeature("Cath", "desc", 2, 4, 2f, null);
     sq.addSequenceFeature(sf);
-    SequenceFeature[] sfs = sq.getSequenceFeatures();
-    assertEquals(1, sfs.length);
-    assertSame(sf, sfs[0]);
+    List<SequenceFeature> sfs = sq.getSequenceFeatures();
+    assertEquals(1, sfs.size());
+    assertSame(sf, sfs.get(0));
 
     /*
      * SequenceFeature on sequence and dataset sequence; returns that on
@@ -466,19 +464,19 @@ public class SequenceTest
      * Note JAL-2046: spurious: we have no use case for this at the moment.
      * This test also buggy - as sf2.equals(sf), no new feature is added
      */
-    SequenceFeature sf2 = new SequenceFeature("Scop", "desc", 2, 5, 1f,
+    SequenceFeature sf2 = new SequenceFeature("Cath", "desc", 2, 4, 2f,
             null);
     sq.getDatasetSequence().addSequenceFeature(sf2);
     sfs = sq.getSequenceFeatures();
-    assertEquals(1, sfs.length);
-    assertSame(sf, sfs[0]);
+    assertEquals(1, sfs.size());
+    assertSame(sf, sfs.get(0));
 
     /*
      * SequenceFeature on dataset sequence only
      * Note JAL-2046: spurious: we have no use case for setting a non-dataset sequence's feature array to null at the moment.
      */
     sq.setSequenceFeatures(null);
-    assertNull(sq.getDatasetSequence().getSequenceFeatures());
+    assertTrue(sq.getDatasetSequence().getSequenceFeatures().isEmpty());
 
     /*
      * Corrupt case - no SequenceFeature, dataset's dataset is the original
@@ -499,7 +497,7 @@ public class SequenceTest
       assertTrue(e.getMessage().toLowerCase()
               .contains("implementation error"));
     }
-    assertNull(sq.getSequenceFeatures());
+    assertTrue(sq.getSequenceFeatures().isEmpty());
   }
 
   /**
@@ -553,7 +551,6 @@ public class SequenceTest
             "group"));
     sq.addDBRef(new DBRefEntry("source", "version", "accession"));
     assertNull(sq.getDatasetSequence());
-    assertNotNull(PA.getValue(sq, "sequenceFeatures")); // to be removed!
     assertNotNull(PA.getValue(sq, "sequenceFeatureStore"));
     assertNotNull(PA.getValue(sq, "dbrefs"));
 
@@ -563,10 +560,8 @@ public class SequenceTest
     assertSame(sq.getDatasetSequence(), rds);
 
     // sequence features and dbrefs transferred to dataset sequence
-    assertNull(PA.getValue(sq, "sequenceFeatures"));
     assertNull(PA.getValue(sq, "sequenceFeatureStore"));
     assertNull(PA.getValue(sq, "dbrefs"));
-    assertNotNull(PA.getValue(rds, "sequenceFeatures"));
     assertNotNull(PA.getValue(rds, "sequenceFeatureStore"));
     assertNotNull(PA.getValue(rds, "dbrefs"));
   }
@@ -675,12 +670,9 @@ public class SequenceTest
     assertEquals("CD", derived.getSequenceAsString());
     assertSame(sq.getDatasetSequence(), derived.getDatasetSequence());
 
-    assertNull(sq.sequenceFeatures);
-    assertNull(derived.sequenceFeatures);
     // derived sequence should access dataset sequence features
     assertNotNull(sq.getSequenceFeatures());
-    assertArrayEquals(sq.getSequenceFeatures(),
-            derived.getSequenceFeatures());
+    assertEquals(sq.getSequenceFeatures(), derived.getSequenceFeatures());
 
     /*
      *  verify we have primary db refs *just* for PDB IDs with associated
@@ -810,18 +802,18 @@ public class SequenceTest
     assertEquals(anns[0].score, seq1.getAnnotation()[0].score);
 
     // copy has a copy of the sequence feature:
-    SequenceFeature[] sfs = copy.getSequenceFeatures();
-    assertEquals(1, sfs.length);
+    List<SequenceFeature> sfs = copy.getSequenceFeatures();
+    assertEquals(1, sfs.size());
     if (seq1.getDatasetSequence() != null
             && copy.getDatasetSequence() == seq1.getDatasetSequence())
     {
-      assertTrue(sfs[0] == seq1.getSequenceFeatures()[0]);
+      assertSame(sfs.get(0), seq1.getSequenceFeatures().get(0));
     }
     else
     {
-      assertFalse(sfs[0] == seq1.getSequenceFeatures()[0]);
+      assertNotSame(sfs.get(0), seq1.getSequenceFeatures().get(0));
     }
-    assertTrue(sfs[0].equals(seq1.getSequenceFeatures()[0]));
+    assertEquals(sfs.get(0), seq1.getSequenceFeatures().get(0));
 
     // copy has a copy of the PDB entry
     Vector<PDBEntry> pdbs = copy.getAllPDBEntries();
@@ -1169,4 +1161,24 @@ public class SequenceTest
     seq2.createDatasetSequence();
     seq.setDatasetSequence(seq2);
   }
+
+  @Test
+  public void testFindPositions()
+  {
+    SequenceI sq = new Sequence("Seq", "ABC--DE-F", 8, 13);
+
+    Range range = sq.findPositions(1, 4); // BC
+    assertEquals(new Range(9, 10), range);
+
+    range = sq.findPositions(2, 4); // C
+    assertEquals(new Range(10, 10), range);
+
+    assertNull(sq.findPositions(3, 4)); // all gaps
+
+    range = sq.findPositions(2, 6); // CDE
+    assertEquals(new Range(10, 12), range);
+
+    range = sq.findPositions(3, 7); // DE
+    assertEquals(new Range(11, 12), range);
+  }
 }