JAL-2046 RFC about cyclic dataset sequence references - should be disallowed ?
[jalview.git] / test / jalview / datamodel / SequenceTest.java
index 0d40037..ab11c09 100644 (file)
@@ -26,6 +26,7 @@ import static org.testng.AssertJUnit.assertNotNull;
 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;
 
@@ -38,7 +39,7 @@ import org.testng.annotations.Test;
 
 public class SequenceTest
 {
-  SequenceI seq;
+  Sequence seq;
 
   @BeforeMethod(alwaysRun = true)
   public void setUp()
@@ -309,9 +310,13 @@ public class SequenceTest
     assertEquals(1, sfs.length);
     assertSame(sf, sfs[0]);
 
+
     /*
      * SequenceFeature on sequence and dataset sequence; returns that on
      * sequence
+     * 
+     * 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();
     sq.getDatasetSequence().addSequenceFeature(sf2);
@@ -321,17 +326,20 @@ public class SequenceTest
 
     /*
      * 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);
-    sfs = sq.getSequenceFeatures();
-    assertEquals(1, sfs.length);
-    assertSame(sf2, sfs[0]);
+    assertNull(sq.getDatasetSequence().getSequenceFeatures());
 
     /*
      * Corrupt case - no SequenceFeature, dataset's dataset is the original
      * sequence. Test shows no infinite loop results.
      */
     sq.getDatasetSequence().setSequenceFeatures(null);
+    /**
+     * is there a usecase for this ? setDatasetSequence should throw an error if
+     * this actually occurs.
+     */
     sq.getDatasetSequence().setDatasetSequence(sq); // loop!
     assertNull(sq.getSequenceFeatures());
   }
@@ -382,20 +390,23 @@ public class SequenceTest
   @Test(groups = { "Functional" })
   public void testDeriveSequence_existingDataset()
   {
-    SequenceI sq = new Sequence("Seq1", "CD");
+    Sequence sq = new Sequence("Seq1", "CD");
     sq.setDatasetSequence(new Sequence("Seq1", "ABCDEF"));
     sq.getDatasetSequence().addSequenceFeature(
             new SequenceFeature("", "", 1, 2, 0f, null));
     sq.setStart(3);
     sq.setEnd(4);
-    SequenceI derived = sq.deriveSequence();
+
+    Sequence derived = (Sequence) sq.deriveSequence();
     assertEquals("CD", derived.getSequenceAsString());
     assertSame(sq.getDatasetSequence(), derived.getDatasetSequence());
 
-    assertNull(((Sequence) seq).sequenceFeatures);
-    assertNull(((Sequence) derived).sequenceFeatures);
-    assertNotNull(seq.getSequenceFeatures());
-    assertSame(seq.getSequenceFeatures(), derived.getSequenceFeatures());
+    assertNull(sq.sequenceFeatures);
+    assertNull(derived.sequenceFeatures);
+    // derived sequence should access dataset sequence features
+    assertNotNull(sq.getSequenceFeatures());
+    assertArrayEquals(sq.getSequenceFeatures(),
+            derived.getSequenceFeatures());
   }
 
   /**
@@ -467,6 +478,8 @@ public class SequenceTest
     seq1.setDescription("description");
     seq1.addAlignmentAnnotation(new AlignmentAnnotation("label", "desc",
             1.3d));
+    // JAL-2046 - what is the contract for using a derived sequence's
+    // addSequenceFeature ?
     seq1.addSequenceFeature(new SequenceFeature("type", "desc", 22, 33,
             12.4f, "group"));
     seq1.addPDBId(new PDBEntry("1A70", "B", Type.PDB, "File"));
@@ -514,7 +527,11 @@ public class SequenceTest
     // copy has a copy of the sequence feature:
     SequenceFeature[] sfs = copy.getSequenceFeatures();
     assertEquals(1, sfs.length);
-    assertFalse(sfs[0] == seq1.getSequenceFeatures()[0]);
+    if (seq1.getDatasetSequence()!=null && copy.getDatasetSequence()==seq1.getDatasetSequence()) {
+      assertTrue(sfs[0] == seq1.getSequenceFeatures()[0]);
+    } else {
+      assertFalse(sfs[0] == seq1.getSequenceFeatures()[0]);
+    }
     assertTrue(sfs[0].equals(seq1.getSequenceFeatures()[0]));
 
     // copy has a copy of the PDB entry
@@ -523,4 +540,14 @@ public class SequenceTest
     assertFalse(pdbs.get(0) == seq1.getAllPDBEntries().get(0));
     assertTrue(pdbs.get(0).equals(seq1.getAllPDBEntries().get(0)));
   }
+
+  @Test(groups = "Functional")
+  public void testGetCharAt()
+  {
+    SequenceI sq = new Sequence("", "abcde");
+    assertEquals('a', sq.getCharAt(0));
+    assertEquals('e', sq.getCharAt(4));
+    assertEquals(' ', sq.getCharAt(5));
+    assertEquals(' ', sq.getCharAt(-1));
+  }
 }